请告诉我这是否是解决问题的正确方法。
我想在变量中的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)
中,只要我想在代码中使用它(有点像全局变量),就可以从那里获取它。如果我遵循这种方法,请告知我代码的性能是否会受到影响。
答案 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
。