Sql server Mssql中唯一键约束上的重复空值冲突

Sql server Mssql中唯一键约束上的重复空值冲突,sql-server,database,null,unique-constraint,Sql Server,Database,Null,Unique Constraint,MS SQL Server不会忽略空值,并将其视为违反唯一键约束,但我知道的是,唯一键与接受空值的主键不同 Violation of UNIQUE KEY constraint 'AK_UserName'. Cannot insert duplicate key in object 'dbo.users'. The duplicate key value is (<NULL>). The statement has been terminated. 违反唯一密钥约束“AK_用户名”

MS SQL Server不会忽略空值,并将其视为违反唯一键约束,但我知道的是,唯一键与接受空值的主键不同

Violation of UNIQUE KEY constraint 'AK_UserName'. Cannot insert duplicate key in object 'dbo.users'. The duplicate key value is (<NULL>).
The statement has been terminated.
违反唯一密钥约束“AK_用户名”。无法在对象“dbo.users”中插入重复密钥。重复的键值为()。
声明已终止。

有人能帮我解决这个问题吗?

您可以创建一个唯一的索引,这样可以忽略空值

CREATE UNIQUE NONCLUSTERED INDEX idx_col1
ON dbo.MyTable(col1)
WHERE col1 IS NOT NULL;

创建筛选的唯一索引,其中列不为null。这样索引就不包括空值。但是它只接受一个
null
值,而不是多个,检查你的表我想已经有一个
null
了exist@tinka,是的,我的表中有一个
null
,但它必须接受不止一个
null
@user3260672 no不太有用-奇怪的是,它没有包含在注释中的
WHERE
子句的示例中(STATISTICS\u norecocomputer=OFF,IGNORE\u DUP\u KEY=OFF,ALLOW\u ROW\u LOCKS=ON,ALLOW\u PAGE\u LOCKS=ON)ON)[PRIMARY]必须放在where of courseThat后面这很有帮助,我一直在寻找它。谢谢@guidogenty框架迁移,使用类似于:Sql(“在[dbo].[Order]([PaymentId])上创建唯一索引[IX_PaymentId],其中[PaymentId]不为NULL;”;