标量变量必须在SQL变量中声明

时间:2018-12-06 20:19:01

标签: sql sql-server

我正在通过Management Studio使用sql脚本创建报告,但出现错误“必须声明标量变量“ @Account”。我在该门户网站上已经阅读了其他类似的问题,但它们与c#有关

我目前正在尝试减少脚本上的代码,所以我决定将sql脚本放入变量中,因为根据条件的不同,where条件将改变。下面是代码示例

Declare @Account int = 1 , @SQL varchar(max)=''
Select @SQL = N'Select ColumnA,ColumnB, ColumnC from Table1 where ColumnA =1'

if @Account IS NULL
Begin
exec(@SQL)
end

--Here is where the error is hapening
else
begin
--This is the line causing the error
Select @SQL = @SQL + 'AND ColumnB=@Account"
exec(@SQL)
end

如果我手动键入“ ColumnB =“旁边的变量的值,它可以工作,但是帐户号将由执行脚本的用户选择。我正在考虑也许建立一个临时表来捕获变量值,然后对where条件进行子查询,但也许解决该错误的方法可能更容易

2 个答案:

答案 0 :(得分:2)

您要sp_executesql

select @SQL = @SQL + 'AND ColumnB=@Account';

exec sp_executesql @SQL, N'@Account int', @Account=@Account;

这是将参数传递到SQL Server中的动态SQL语句中的方式。我强烈建议您仅使用sp_executesql来执行SQL语句-即使没有参数也是如此。使用它可以轻松地在需要时实现参数。

答案 1 :(得分:0)

您要将'@Account'传递给@SQL变量-基础EXEC无法看到该变量。

解决此问题的一种方法是执行以下操作:

Select @SQL = @SQL + 'AND ColumnB=' + CAST(@Account as varchar)