Constraint
如何實現只能在單行上設置的“預設”標誌
例如,使用與此類似的表:
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 提供此資訊)