【问题标题】:SQL Server 2008 Unique Key ConstraintSQL Server 2008 唯一键约束
【发布时间】:2013-01-01 20:58:40
【问题描述】:

我有一个表调用测试,有四个字段。我已经在我希望我的记录唯一的表上创建了复合唯一键。我们正在跟踪以前版本的记录并标记所有旧记录 isdeleted=1,但问题是,我的唯一密钥不允许我使用两个或多个 isdeleted=1 的相同记录

Create table test (ApplicationID int,IsDeleted bit
                  CONSTRAINT test_uck UNIQUE (ApplicationID,IsDeleted)                
                  )
go
insert into test values(1,0)
insert into test values(1,1)
insert into test values(1,1)

【问题讨论】:

  • 您似乎在插入重复值。确定它按预期工作吗?

标签: sql-server-2008 key unique unique-constraint


【解决方案1】:

这是你想要的吗:

Create table test (
    ApplicationID int not null,
    IsDeleted bit not null
)
create unique index IX_UniqueApplications on test (ApplicationID)
     where IsDeleted=0
go
insert into test values(1,0)
insert into test values(1,1)
insert into test values(1,1)

它被称为Filtered Index。您不希望 ApplicationIDIsDeleted 的组合是唯一的 - 您只是希望 ApplicationID 在未被删除的情况下是唯一的。这是两个完全不同的概念。

【讨论】:

    【解决方案2】:

    尝试添加版本号字段

    vNum int
    

    到您的表,然后扩展您的主键以包含该字段。

    由于无论如何您都在跟踪记录的先前版本,因此您可以简单地获取该记录的最后一个版本号并将其增加一个以用于下一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-13
      相关资源
      最近更新 更多