2

我正在尝试用一个值填充一个 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查询新手。所以只是想了解这个概念并想知道我在这里做错了什么。

谢谢。

4

2 回答 2

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

sp_executesql (Transact-SQL)

于 2012-05-16T17:51:33.920 回答
0

您需要使用带有输出参数的 sp_executeSQL

如果您没有正确使用参数,请参见底部的示例 将 exec 更改为 sp_executesql 不会提供任何好处

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
于 2012-05-16T17:53:10.530 回答