我想确保我没有在我的表中插入重复的行(例如,只有主键不同)。我所有的字段都允许 NULLS,因为我决定 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 语句的情况下检查重复项?
原文由 srmark 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用
INTERSECT
运算符。它是
NULL
如果您在所有字段上都有一个复合索引,则敏感且高效:请注意,如果您在字段上创建
UNIQUE
索引,您的生活会简单得多。