我正在尝试使用值填充sql变量。当代码如下时,它可以工作:
declare @num_records int
set @num_records = ( select distinct count(*) as num_recs
from dbo.tbllookup )
print @num_records
例如,我使我的查询更简单,但它是一个复杂的查询,我想把它放在变量中,因为我必须在其他地方重用查询的一部分。所以我尝试了这个,但它不起作用。错误显示“关键字'exec'附近的语法不正确。”
declare @num_records int
declare @sqlstr varchar(200)
set @sqlstr = '( select distinct count(*) as num_recs
from dbo.tbllookup )'
set @num_records = exec(@sqlstr)
print @num_records
我是一个sql查询新手。所以只想了解这个概念,并想知道我在这里做错了什么。
感谢。
答案 0 :(得分:1)
正如您所发现的,您无法以这种方式填充变量。您必须使用sp_executesql
来执行此操作。
Declare @Sql nvarchar(max);
Declare @CountResult int;
Set @Sql = 'Select @Count = Count(*) From SomeTable';
exec sp_executesql @Sql, N'@Count int OUTPUT', @CountResult OUTPUT
Select @CountResult
答案 1 :(得分:0)
您需要将sp_executeSQL与输出参数
一起使用请参阅底部Changing exec to sp_executesql doesn't provide any benefit if you are not using parameters correctly
的示例declare @sqlstr Nvarchar(200)
DECLARE @num_records int
set @sqlstr = '( select distinct @num_records = count(*)
from dbo.tbllookup )'
EXEC SP_EXECUTESQL @sqlstr, N'@num_records INT OUTPUT', @num_records OUTPUT
print @num_records