Constraint

如何實現只能在單行上設置的“預設”標誌

  • July 25, 2016

例如,使用與此類似的表:

create table foo(bar int identity, chk char(1) check (chk in('Y', 'N')));

標誌是否實現為 a char(1)、 abit或其他形式都沒有關係。我只想能夠強制執行它只能在單行上設置的約束。

SQL Server 2008 - 過濾的唯一索引

CREATE UNIQUE INDEX IX_Foo_chk ON dbo.Foo(chk) WHERE chk = 'Y'

SQL Server 2000、2005:

您可以利用唯一索引中只允許一個空值這一事實:

create table t( id int identity, 
               chk1 char(1) not null default 'N' check(chk1 in('Y', 'N')), 
               chk2 as case chk1 when 'Y' then null else id end );
create unique index u_chk on t(chk2);

對於 2000 年,您可能需要SET ARITHABORT ON(感謝@gbn 提供此資訊)

引用自:https://dba.stackexchange.com/questions/4815