我有一张表格,其中包含以下列:
Id int
Name varchar *
Description varchar
LevelId int *
DeletedAt datetime nullable *
我希望在标有星号的上述字段上设置唯一约束:名称,LevelId和DeletedAt。我之所以添加DeletedAt约束是为了当有人软删除并添加具有相同名称和LevelId的新记录时,数据库会允许添加。但我错了,认为两行具有相同名称,LevelId和DeletedAt均为NULL的记录不会被允许,因为NULL不等于NULL。
我需要的是替代方案。如何支持此要求?我能想到的一件事是将DeletedAt替换为varchar,然后具有默认值,例如“Active”或空字符串(只是不是null),然后将已删除的行作为字符串放置日期。但我在想是否有更优雅的解决方案。
NULL
,正如您所期望的那样。 - Damien_The_UnbelieverMsg 2601, Level 14, State 1, Line 1 Cannot insert duplicate key row in object 'dbo.T' with unique index 'IX_T'. The duplicate key value is (abc, def, <NULL>)。
- Damien_The_UnbelieverCREATE TABLE
,CREATE INDEX
和INSERT
,可以无错误运行。就像我所说,当我根据您的描述构建这样的脚本时,我收到了错误2601,拒绝重复项。 - Damien_The_Unbeliever