T-sql:如何比较两者都为空的值?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我想确保我没有将重复的行插入到我的表中(例如,只有主键不同)。我的所有字段都允许NULL,因为我决定NULL表示“所有值”。由于有空,存储过程中的下列语句无法工作:

IF EXISTS(SELECT * FROM MY_TABLE WHERE 
    MY_FIELD1 = @IN_MY_FIELD1  AND
    MY_FIELD2 = @IN_MY_FIELD2  AND
    MY_FIELD3 = @IN_MY_FIELD3  AND 
    MY_FIELD4 = @IN_MY_FIELD4  AND
    MY_FIELD5 = @IN_MY_FIELD5  AND
    MY_FIELD6 = @IN_MY_FIELD6)
    BEGIN
        goto on_duplicate
    END

因为NULL=NULL不是真。

如何在不对每一列都有if is null语句的情况下检查重复项?

提问于
用户回答回答于

使用INTERSECT

它是NULL-如果所有字段都有一个综合索引,则敏感和高效:

IF      EXISTS
        (
        SELECT  MY_FIELD1, MY_FIELD2, MY_FIELD3, MY_FIELD4, MY_FIELD5, MY_FIELD6
        FROM    MY_TABLE
        INTERSECT
        SELECT  @IN_MY_FIELD1, @IN_MY_FIELD2, @IN_MY_FIELD3, @IN_MY_FIELD4, @IN_MY_FIELD5, @IN_MY_FIELD6
        )
BEGIN
        goto on_duplicate
END

注意创建一个UNIQUE索引。

用户回答回答于

(Field1 = Field2) OR (ISNULL(Field1, Field2) IS NULL)

只有当这两个值都是non-NULL,或者两个值都是相等的NULL

扫码关注云+社区