宣布' AND'变量中的条件

时间:2016-08-11 01:26:58

标签: sql sql-server

请告诉我这是否是解决问题的正确方法。

我想在变量中的AND条件之后声明代码..代码是:

SELECT * FROM MyTable
WHERE Key = '12345'
AND (Condition1 or Condition2 or Condition3)

我希望能达到这样的目的:

DECLARE @Condition
SET @Condition = 'Condition1 or Condition2 or Condition3'

SELECT * FROM MyTable
WHERE Key = '12345'
AND @Condition

AND运算符需要一个布尔表达式,所以这不起作用。请告诉我如何实现这一目标..

我的想法是,我可以将@Condition存储在变量表(varName, varValue)中,只要我想在代码中使用它(有点像全局变量),就可以从那里获取它。如果我遵循这种方法,请告知我代码的性能是否会受到影响。

2 个答案:

答案 0 :(得分:2)

您需要使用动态sql:

declare @sql nvarchar(max);

set @sql = 'select * from mytable where [key] = @key and @condition';
set @sql = replace(@sql, '@condition', @condition);

exec sp_executesql @sql, N'@key varchar(255)', @key = '12345';

当您将@condition放入where子句时,它将被视为字符串。这就是全部。没有语义分析。

答案 1 :(得分:1)

我想知道你是否可以根据自己的条件创建一个表变量......既然你不是很清楚这些条件是什么,很难判断这样的事情是否会起作用,但这是一种方法我有时使用:

declare @conditions table (condition nvarchar(255), value bit);
insert into @table (condition, value)
select condition, value
from (
    values ('Less than x', 1), ('Greater than y', 0))
) x (condition, value)    

然后在你的where子句中使用它......

select *
from Table
where not exists (select 1 from @conditions where value = 1)

或者你可以加入它。如果您要比较整数,可以交叉加入并说出where @conditions.condition < yourTable.value