0

我需要编写一个接受变量的存储过程(实际上,其中有几个,但会为此目的对其进行简化),然后构建一个基于该变量进行过滤的 SQL 语句。但是,用户是否传递该变量是可选的。如果用户没有传递变量,过滤器必须忽略该部分,而不是返回 Null 值。

基本上,我得到的是:

@VariableA varchar(50)
@SQL nvarchar(max)

Select @SQL = 'Select ColumnX from TableY where (('+@VariableA+ ' = somevalue) or (@VariableA is null))'

exec sp_executesql @SQL

所以,我的问题是当@SQL 字符串作为查询执行时,@VariableA 变量超出范围。如果用户不通过它,我如何编写动态 SQL 查询来运行,同时检查变量是否为空值?

4

1 回答 1

0

您需要在此处添加更多参数,并且您不需要连接 @SQL 字符串中的变量,额外的变量告诉动态 SQL 应该引用什么:

declare @VariableA varchar(50)
  , @SQL nvarchar(max)

Select @SQL = N'Select ColumnX from TableY where (@VariableA = somevalue) or (@VariableA is null)'

exec sp_executesql @SQL, N'@VariableA varchar(50)', N'@VariableA = @VariableA'

您需要在动态 SQL 之前适当地设置 @VariableA。

更多信息: http: //msdn.microsoft.com/en-us/library/ms188001 (v=sql.100).aspx

于 2012-12-20T15:58:24.333 回答