我想根据条件在where子句中包含列。 例如 选择*来自emp 其中id = 7, 如果(代码不为空)则代码= 8;
如何在sql server中执行此操作
答案 0 :(得分:2)
如果我理解你的错误,你可以使用COALESCE。
返回第一个非空表达式 在其论点中。
SQL声明
SELECT *
FROM emp
WHERE id=7
AND code = COALESCE(@code, code)
答案 1 :(得分:1)
如果code
是列而不是变量,则问题中的查询将被重写如下。
SELECT *
FROM emp
WHERE id=7 AND (code IS NULL OR code=8)
答案 2 :(得分:0)
您可能必须以字符串形式动态创建查询,然后使用Execute方法实际执行它。这种方法有一些潜在的优化问题,但通常都会这样做。你可能会去谷歌T-SQL Dynamic Query
,或类似的东西。
答案 3 :(得分:0)
这是一个例子:
declare @SQL varchar(500)
declare @var1 int
set int = 1
set @SQL = 'Select * from ABC Where 1 = 1'
if(@var1 = 1)
set @SQL + @SQL ' And column1 = ' @var1
exec(@SQL)
答案 4 :(得分:0)
在@ var1中的Null值的情况下也使用它。
从ABC中选择*,其中Column1 = isNull(@ var1,Column1)
答案 5 :(得分:0)
您可以使用COALESCE功能。
答案 6 :(得分:0)
好吧,
我不知道我是否理解了您的问题,但我想您希望在结果中包含代码列的值。
如果我是对的,可以在select部分而不是where子句中完成。一世。即
Select ..., case when code is not null then 8 else code end as code from emp where id = 7
另一种解释是您希望过滤代码<>的行。 8,那将是
Select * from emp where id = 7 and (code is null OR code = 8)