2011-12-26 97 views
0

我有一个三列的表,关系的ID,相关对象的ID和对象的值。除了当相同ID的值为0时,该表可以具有多个重复的ID-值关系。多列约束

   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的版本使用经过筛选的索引或具有唯一约束的视图。 – 2011-12-26 16:14:18

+0

@Martin是的,这正是我需要的,但我在SQL Server 05上 – PedroC88 2011-12-26 17:26:53

+1

然后你需要使用索引视图技术。我在“可能重复”链接的答案中有一个例子。 – 2011-12-26 17:29:23

回答

0

如问题这确实是类似于Simple CHECK Constraint not so simple,并在回答这个问题的评论中指出的@Martin Smith(虽然它是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)