检查SQL Server

时间:2015-07-24 08:58:40

标签: sql sql-server tsql

无法相信我对此感到困惑,但如何在select语句中检查我返回的值为null

IF EXISTS(SELECT TU.Tagged FROM TopicUser TU 
          WHERE TU.TopicId = @TopicId and TU.UserId = @UserId)
BEGIN
    --do stuff
END

TU.Tagged的值是NULL但是它确实进入了条件。记住它不存在。

4 个答案:

答案 0 :(得分:3)

看起来你需要这样的东西:

IF EXISTS(SELECT TU.Tagged 
          FROM TopicUser TU 
          WHERE TU.TopicId = @TopicId 
               AND TU.UserId = @UserId 
               AND TU.Tagged IS NOT NULL)
BEGIN
    --do stuff

END

否则,您只检查符合条件的记录是否存在,但这些记录在NULL列中的值可能为TU.Tagged

答案 1 :(得分:3)

要检查某些内容是否存在,您只需说:

IF EXISTS(SELECT TOP 1 1 FROM TABLE WHERE ID = '2')

如果记录存在,则只返回1。对于您而言,记录存在但列为空。您需要检查用户的ID。我的意思是,即使某些东西是空的,它仍然将它视为存在。

我希望这是有道理的。

答案 2 :(得分:3)

解决方案1:     使用IsNULL()函数,当下面的查询返回null值时,IsNULL函数将null值替换为0,并将条件视为False。

IF EXISTS (SELECT IsNULL(TU.Tagged,0) FROM TopicUser TU 
          WHERE TU.TopicId = @TopicId and TU.UserId = @UserId)
BEGIN  
END

解决方案2:     使用(IS NULL或IS NOT NULL)属性。

IF EXISTS (SELECT TU.Tagged FROM TopicUser TU 
          WHERE TU.TopicId = @TopicId and TU.UserId = @UserId
          AND TU.Tagged IS NOT NULL)
BEGIN

END

答案 3 :(得分:1)

您可以使用ISNULL()。当一个值,如果你想啊,你可以使用下面的查询来代替它选择查询返回null。

coalesce

这样,您可以将null替换为所需的任何值。