try:
1、select @AllSum=sum(abc) from try
或者
2、把'select sum(' + @SumColumn + ') from ' + @TableName)写入存储过程,return sum(T)值
1、select @AllSum=sum(abc) from try
或者
2、把'select sum(' + @SumColumn + ') from ' + @TableName)写入存储过程,return sum(T)值
set @sql=N'select @AllSum=sum(' + @SumColumn + N') from ' + @TableName
exec sp_executesql @sql,N'@AllSum money output',@AllSum output
@SumColumn 为传入被汇总列名
@TableName 为传入表名
将执行结果存入变量 @AllSum 中
实际执行语句为 select sum(abc) from try
--使用exec或者exec sp_executesql 须知:
1.表名,字段名都不可以传入,必须先在提交sql string 给exec或者exec sp_executesql 之间解释出来!即必须先 set @sql=N'select @AllSum=sum(' + @SumColumn + N') from ' + @TableName这样解释出来后,给exec或者exec sp_executesql去执行
2.exec不能像exec sp_executesql那样传入,楼上各位的例子可见到分别!
sp_executesql共有三个参数,第一个@sql是要执行的动态SQL语句不能少,第二个'@AllSum money output'是第一个语句里用到的变量定义,第三个参数@AllSum outputsql是执行语句要输出的变量值。
感谢vivianfdlpw,问题解决。能讲解参数N'@AllSum money output',@AllSum output吗?sqlserver帮助没看懂!
举例:
declare @a_nam as varchar(10)
declare @sumNam as int
set @a_nam = '1'
exec sp_executesql N'select @sumNam=count(a_nam) from a where a_nam=@a_nam',N'@a_nam varchar(10),@sumNam int output',@a_nam,@sumNam output--这里传入变量@a_nam,查询出a_nam等于@a_nam的一共有多少行,然后付给@sumNam返回!
返回的@sumNam 比较后面加上output,N'select @sumNam=count(a_nam) from a where a_nam=@a_nam'前面的N必须大写!FYI~