2010-02-27 3 views
1

У меня есть таблица с двумя целыми столбцами и столбцом бит. Как я могу установить ограничение на таблицу, чтобы он не позволял дублировать комбинацию из двух целых чисел с истинным. Например:Создание ограничения SQL Server 2008

1 2 Истинного
1 2 Ложные
1 2 Правда ------> Это не должно быть разрешено

ответ

1

Это может быть тяжелее, чем вам нравится, но я считаю, что он дает то, что вы хотите. Создайте представление о строках, где бит столбца 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 
0

создать уникальный индекс idxName на (Field1, Field2), когда условие = 'True';

+0

У меня нет удобной системы SQL 2k8 для проверки, не уверены, разрешены ли уникальные отфильтрованные индексы: http://technet.microsoft.com/en-us/library/cc280372.aspx –

1
ALTER TABLE Table_1 ADD CONSTRAINT col1_col2_COL3 
    UNIQUE (col1, col2, col3); 
+2

Я думаю, он хочет разрешить дубликаты, если col3 - False, хотя –

+0

Это позволит использовать 1 2 true и 1 2 false. –

0

для этого в SSMS, разверните имя таблицы, а затем нажмите кнопку записи щелчок мыши на нем. нажмите на новый индекс в открытом меню. в окне «Новый индекс», а на вкладке «Общие» вы можете добавить свои произвольные столбцы. в закладке фильтра добавьте выражение фильтра.

Смежные вопросы