我正在通过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条件进行子查询,但也许解决该错误的方法可能更容易
答案 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)