Создание ограничения SQL Server 2008 - PullRequest
1 голос
/ 27 февраля 2010

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

1 2 True
1 2 False
1 2 True ------> Это не должно быть разрешено

Ответы [ 4 ]

1 голос
/ 27 февраля 2010
ALTER TABLE Table_1 ADD CONSTRAINT col1_col2_COL3
   UNIQUE (col1, col2, col3);
1 голос
/ 28 февраля 2010

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

, чтобы сделать это в SSMS, разверните имя таблицы и затем нажмите на нее мышью. нажмите на новый индекс в открывшемся меню. в окне New Index и на вкладке General вы можете добавить свои произвольные столбцы. на вкладке фильтра добавьте выражение фильтра.

0 голосов
/ 27 февраля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...