在sql server的where子句中如何使用不等于和null一起?

时间:2014-01-06 13:46:17

标签: sql sql-server where-clause

http://www.sqlfiddle.com/#!6/be964/5

我期待两个结果。

如果table包含产品密钥,例如'x',则需要获取它们。 除此以外;如果table不包含产品密钥,例如't',则需要获取记录为空。

我尝试过如下的查询;

declare @param nvarchar(30);
set @param = 'x' -- or 't'
SELECT *  FROM [Test]
WHERE 
([ProductKey] = @param and [ProductKey] is not null) 
or 
([ProductKey] <>@param and [ProductKey] is null)

但它不起作用。

1 个答案:

答案 0 :(得分:4)

你的选择中的where子句按行进行。如果我没有弄错的话,如果没有匹配的产品密钥,你只需要productkey is null部分。我建议你使用exists函数。所以当你的表中存在productkey时,它会使用它,或者当它不使用null时:

declare @param varchar;
set @param = 'x' -- or 't'


SELECT * FROM [Test]
WHERE ([ProductKey] = @param)
   or ([ProductKey] is null 
       and not exists (select * from [Test] where [ProductKey] = @param))