如果条件在where语句中

use*_*448 0 sql sql-server

如何编写一个查询,如果一个列值不为null,则将该值与查询字符串进行比较,否则不要比较列值.

例如,我有一个tbl1,其中包含programs1和programs2两列,这两列中的值可以为null或带有值.我想说if语句

if programs1 is not null, programs1=@programs  and 
if programs2 is not null, programs2=@programs
Run Code Online (Sandbox Code Playgroud)

我的查询是这样的:

select * from tbl1 where
(programs1 is not null and programs1=@programs)
and 
(program2 is not null and programs2=@programs)
Run Code Online (Sandbox Code Playgroud)

但它没有按我想要的方式工作.如何为此案例编写正确的查询?TIA.

Bra*_*tie 7

相信你在找COALESCE.

WHERE COALESCE(programs1, programs2) = @Programs
Run Code Online (Sandbox Code Playgroud)

但是,如果您只想比较它是否有值:

-- If the column is null, ignore it. If it has a value, then
-- check that value.
WHERE (programs1 IS NULL OR programs1 = @Programs)
  AND (programs2 IS NULL OR programs2 = @Programs)
Run Code Online (Sandbox Code Playgroud)

另外,我认为你的意思是因为你引用了