检查列';SQL Server中的s值为空

检查列';SQL Server中的s值为空,sql,sql-server,tsql,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.taged的值为NULL,但它确实进入条件。记住,它并不存在 看起来您需要这样的东西: IF EXISTS(SELECT TU.Tagge

真不敢相信我会被这个问题困扰,但我如何在select语句中检查返回的值是否为null

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

TU.taged
的值为
NULL
,但它确实进入条件。记住,它并不存在

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

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

否则,仅当满足条件的记录存在时才进行检查,但这些记录在
TU.taged
列中可能有一个
NULL
值。

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

IF EXISTS(SELECT TOP 1 1 FROM TABLE WHERE ID = '2')
如果记录存在,则只返回1。对于您来说,记录存在,但列为空。您需要检查用户的ID。我的意思是,即使某个东西是空的,它仍然将它视为存在

我希望这是有意义的。

解决方案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: 使用(为NULL或不为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
您可以使用ISNULL()。当select查询为值返回null时,如果要将其替换为O,则可以使用下面的查询

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

与此类似,您可以用您想要的任何值替换null。

如果存在
则只检查符合您的条件的行(
其中TU.TopicId=@TopicId和TU.UserId=@UserId
)是否存在-如果存在,则返回true-无论
TU.taged
有什么值。如果至少有一行与
中的
条件匹配,则
IF EXISTS()
中的
SELECT
实际上只返回
True
。。。。你当前的
WHERE
子句没有提到
TU.taged
必须不为空……我想了那么多,现在我想了一会儿……谢谢,我真傻