从sp_executesql分配标量变量

时间:2017-10-29 11:48:38

标签: sql sql-server sql-server-2008

我需要任何人的帮助。我试图从sp_executesql运行的查询中分配一个标量变量。我的查询如下:

select @sql = N'Select @found = count(' +@column+ ') from ' +@table+ ' where 
                +@column+ ' = ''' +@intVariable+''';';

EXECUTE sp_executesql @sql, N'@table nvarchar(max), @column nvarchar(max), 
               @temp_id nvarchar(max), @found int', 
               @table,@column,@temp_id,@found; 

查询不会产生任何错误。但@found未分配查询结果。我试图改变设置但也一样。任何人都可以告诉我查询有什么问题?我一整天都这样做。

非常感谢您提供的所有帮助。

1 个答案:

答案 0 :(得分:2)

您的脚本如下所示:

DECLARE @found int;

DECLARE @sql NVARCHAR(MAX) = 
    N'Select @found = count(' +QUOTENAME(@column)+ ') '+
    N'from ' +QUOTENAME(@table)+ ' '+
    N'where ' +QUOTENAME(@column)+ '=@intVariable;';

EXEC sp_executesql @sql, '@intVariable INT, @found INT OUTPUT', @intVariable, @found OUTPUT;

这有@found作为OUTPUT变量。必须在参数字符串和将参数传递给sp_executesql时指定它以输出值。

此外,QUOTENAME()用于正确转义对象名称。