【问题标题】:Visual Studio 2019 - SQL dacpac - Violation of UNIQUE KEY constraint ....The duplicate key value is (<NULL>)Visual Studio 2019 - SQL dacpac - 违反 UNIQUE KEY 约束 ....重复键值为 (<NULL>)
【发布时间】:2021-02-03 16:06:53
【问题描述】:

我在 Visual Studio 中使用了一个数据库项目

我试图通过允许 UNIQUE NULLABLES 来消除该错误,但它一直出现

我希望字段具有唯一值,除非它们为空

(我知道有很多答案,但它们与创建表查询无关)

我做错了什么?

CREATE TABLE [dbo].[users] ( 
    [Id] INT IDENTITY (1, 1)  NOT NULL PRIMARY KEY,
    [Email]          VARCHAR (100) UNIQUE NONCLUSTERED NULL DEFAULT NULL,
    [Login]          VARCHAR (100) UNIQUE NONCLUSTERED NULL DEFAULT NULL,
    [Identifier] VARCHAR(40) NOT NULL UNIQUE DEFAULT newid(),
    [ResetPasswordToken] VARCHAR(40) UNIQUE NONCLUSTERED NULL DEFAULT   NULL,
    [ResetPasswordDate]DATETIME UNIQUE NONCLUSTERED NULL DEFAULT   NULL,
...(other fields)
);

感谢您对此的帮助

【问题讨论】:

  • 不,这是我读到的第一个答案,因为我提到它不是创建表,我上面的代码不起作用
  • 为什么要尝试在create table实现呢?该答案中的方法也是如此,但在表定义之外(我的意思是唯一性是由唯一索引强制执行的约束,无论它在哪里声明)。

标签: sql null constraints unique


【解决方案1】:

答案是关于使用“GO”这个词

GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_User_Email] ON [dbo].[Users]([Email] ASC) WHERE ([Email] IS NOT NULL);

GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_User_Login] ON [dbo].[Users]([Login] ASC) WHERE ([Login] IS NOT NULL);

GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_User_ResetPasswordToken] ON [dbo].[Users]([ResetPasswordToken] ASC) WHERE ([ResetPasswordToken] IS NOT NULL);

GO
CREATE UNIQUE NONCLUSTERED INDEX [IX_User_ResetPasswordDate] ON [dbo].[Users]([ResetPasswordDate] ASC) WHERE ([ResetPasswordDate] IS NOT NULL);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多