2011-12-26 2 views
0

У меня есть таблица с тремя столбцами, идентификатор отношения, идентификатор связанного объекта и значение объекта. Таблица может иметь столько повторных отношений ID-Value, за исключением случаев, когда значение равно 0 для одного и того же идентификатора.Ограничение нескольких столбцов

   Correct      Incorrect 
    +--------+--------+-------+ +--------+--------+-------+ 
    | PK_ID | ID | Value | | PK_ID | ID | Value | 
    +--------+--------+-------+ +--------+--------+-------+ 
    | 1 | 1 | 1 | | 1 | 1 | 1 | 
    | 2 | 1 | 1 | | 2 | 1 | 1 | 
    | 3 | 2 | 0 | | 3 | 2 | 0 | 
    +--------+--------+-------+ | 4 | 2 | 0 | 
            +--------+--------+-------+ 

Вопрос заключается в том, как я могу обеспечить его, чтобы не допустить повторного отношения ID-значение, если значение равно 0?

+3

не может сделать это с помощью проверочного ограничения. Используйте отфильтрованный индекс или представление с уникальным ограничением, зависящим от версии SQL Server. –

+0

@Martin да, это именно то, что мне нужно, но я на SQL Server 05 – PedroC88

+1

Тогда вам нужно использовать технику с индексированным представлением. В моем ответе есть пример в ссылке «Возможная дубликация». –

ответ

0

Как отметил @Martin Smith в комментариях вопрос это действительно похоже на Simple CHECK Constraint not so simple и в ответ на этот вопрос (хотя это было для SQL-08) есть пример решения для SQL-00 и 05.

идея заключается в том, чтобы создать представление индекса для имитации отфильтрованного уникального индекса со следующим кодом:

CREATE VIEW dbo.myTableView 
WITH SCHEMABINDING 
AS 
SELECT ID 
FROM dbo.myTable 
WHERE Value = 0 

GO 
CREATE UNIQUE CLUSTERED INDEX ix ON dbo.myTableView(ID) 

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

  • Нет связанных вопросов^_^