技术开发 频道

SQL Server动态SQL对变量讲行赋值

  【IT168技术文档】

  当我们执行如下SQL语句时:

declare @t int exec('set @t=1') print(@t)

  报如下错误:

  服务器: 消息 137,级别 15,状态 2,行 1
  必须声明变量 '@t'。

   实际就是变量与动态语句不能共享,那么换成这样就行:

declare @t int set @t=1 print(@t) 或 exec('declare @t int; set @t=1; print(@t)')

  但是有时候你一定要,变量与动态SQL结合起来。比如,你在存储过程中定义一个输出参数,◎COUNT int output
而你在获得这个值的最好的方法就是动态SQL,那么有什么好的方式吗?

  那就要用到系统存储过程,sp_executesql ,如下:

declare @sql2 nvarchar(500) set @sql2 = 'select @COUNT = count(distinct('+@groupby+')) from TG_ENTRY where '+@sqlWhere execute sp_executesql @sql2, N'@COUNT int output', @TOTAL_COUNT output
0
相关文章