Это может быть тяжелее, чем вам нравится, но я считаю, что он дает то, что вы хотите. Создайте представление о строках, где бит столбца TRUE, а затем материализуйте его с уникальным индексом. Ниже пример работает на SQL Server 2008.
--Set statements required for creating materialized views.
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
--Set statements required when creating index for materialized views.
SET ANSI_PADDING ON
GO
SET ANSI_WARNINGS ON
GO
SET ARITHABORT ON --only required in 80 compatibility mode.
GO
SET CONCAT_NULL_YIELDS_NULL ON
GO
SET NUMERIC_ROUNDABORT OFF
GO
CREATE TABLE dbo.Test (a int not null, b int not null, c bit not null);
GO
CREATE VIEW dbo.vTest (a,b) WITH SCHEMABINDING AS
SELECT a,b FROM dbo.Test WHERE c = 'TRUE' ;
GO
CREATE UNIQUE CLUSTERED INDEX [AK_vTest] ON dbo.vTest (a,b);
GO
INSERT dbo.Test (a,b,c) VALUES (1,2,'TRUE'); --succeeds.
INSERT dbo.Test (a,b,c) VALUES (1,2,'FALSE'); --succeeds.
INSERT dbo.Test (a,b,c) VALUES (1,2,'FALSE'); --succeeds.
INSERT dbo.Test (a,b,c) VALUES (1,2,'TRUE'); --fails "Msg 2601, Level 14"
GO
SELECT * FROM dbo.Test
SELECT * FROM dbo.vTest
DROP VIEW dbo.vTest
DROP TABLE dbo.Test
У меня нет удобной системы SQL 2k8 для проверки, не уверены, разрешены ли уникальные отфильтрованные индексы: http://technet.microsoft.com/en-us/library/cc280372.aspx –