如我的存储过程中要返回的值
@messCount int out,
@DayAvg Float out,
@UserCount int out,
过程中这样写
  DECLARE @sqltext varchar(255)
 SELECT @sqltext='and UserId ='+CONVERT(nvarchar, @StuID)SELECT @messCount=COUNT(*) FROM SendInfo
WHERE +@sqltext
这样不行,我的意思是根据一定的条件写入@sqltext这个变量,再加入到运行的sql语句中,请问高手要如何做。
  用Exec不行,我要得出@messCount的返回值。
  exec('SELECT '+@messCount+'COUNT(*) FROM SendInfoWHERE '+@sqltext)不是我想要的结果,因为不能返回值给@messCount。

解决方案 »

  1.   

    用ADOQUERY,如:
    ADOQUERY.SQL.ADD('SELECT ID FROM 表 WHERE '+条件);
    ADOQUERY.OPEN;
    用ADOQUERY.FIELDBYNAME('ID').ASSTRING返回
      

  2.   

    给个参考你create proc p1(@tablename varchar(100),@colname varchar(30))
    as
    begin
     exec('select '+@colname+' from '+@tablename)
    end
      

  3.   

    create proc p1(@tablename varchar(100),@colname varchar(30))
    as
    begin
     exec(SQL)
    end
      

  4.   

    发现用
    select @messCount=(SELECT COUNT(*) FROM SendInfo WHERE Userid=7)
    可以让@messCount得到返回值,但括号里的sql语句又不能是动态的,真是头大啊!高手们,帮帮我吧!我又要得到返回值,又要在括号里的sql语句是一个变量,应该怎么实现?
      

  5.   

    没什么好办法,
    我是用创建临时表做的
    set @strSQL = ' select ' +  @TblName+'_01  seq into ##h_x from ' + @TblName + ' where ' + @TblName +  '_02= ''' + @Site + ''' and ' + @TblName + '_03 = ''' + convert(char(10),getdate(),120) + ''' ' 
    exec(@strSQL)select @RetValue = LTrim(str(seq)) from ##h_x
    drop table ##h_x
      

  6.   

    wdhans(wdhans) ,你的方法试了,能行得通,谢谢!但想知道是否有更好的办法,因为写临时表再读出来感觉效率不会太高。