SQL Server位列约束,1行= 1,其他所有0

Mik*_*ike 21 sql-server

我有一个bit IsDefault专栏.表中只有一行数据可以将此位列设置为1,其他所有数据都必须设置为0.

我该如何强制执行此操作?

gbn*_*gbn 32

所有版本:

  • 触发
  • 索引视图
  • 存储过程(例如写入测试)

SQL Server 2008:过滤的索引

CREATE UNIQUE INDEX IX_foo ON bar (MyBitCol) WHERE MyBitCol = 1
Run Code Online (Sandbox Code Playgroud)


Joe*_*lli 18

假设您的PK是单个数字列,您可以向表中添加计算列:

ALTER TABLE YourTable
  ADD IsDefaultCheck AS CASE IsDefault
     WHEN 1 THEN -1
     WHEN 0 THEN YourPK
  END
Run Code Online (Sandbox Code Playgroud)

然后在计算列上创建唯一索引.

CREATE UNIQUE INDEX IX_DefaultCheck ON YourTable(IsDefaultCheck)
Run Code Online (Sandbox Code Playgroud)