动态查询不与变量一起使用

时间:2012-01-20 14:28:21

标签: sql-server-2008

declare  @SQL  varchar(2000)
declare @Total int 

SET @SQL = 'Select'+@Total+'= SUM(isnull(Points,0)) as Pointsvalue  From  Offer'

exec(@SQL)  

select @Total

我想这样做但总是结果显示我是空的。但是当我直接运行查询时,它会得到120的结果

我哪里错了?请让我知道

由于

王子

2 个答案:

答案 0 :(得分:5)

如果要将其作为动态查询运行,请尝试以下操作:

declare @SQL nvarchar(2000), @Total int 

SET @SQL = N'Select @Total = SUM(isnull(Points,0)) as Pointsvalue  From  Offer'
exec sp_executesql @SQL, N'@Total int output', @Total = @Total output

select @Total

(见sp_executesql (Transact-SQL)

但是,看起来你没有真正的动态查询 所以,正如msmucker0527所指出的,你可以简单地运行:

declare @Total int 

Select @Total = SUM(isnull(Points,0)) as Pointsvalue  From  Offer

select @Total

答案 1 :(得分:1)

你想做的是(我认为)

SET @SQL = 'Select @Total = SUM(isnull(Points,0)) as Pointsvalue  From  Offer'

然而,这会告诉你因为@Total不在范围内(Exec中的查询有它自己的)

如果你想要上面的话,你不需要做exec ......

所以我对你想要实现的目标感到有点困惑

小费

使用exec(String)编写查询时。 注释掉exec,并用Print @SQL替换它,看看它会尝试做什么。