多列约束

时间:2011-12-26 16:10:02

标签: sql-server-2005 check-constraints

我有一个包含三列的表,关系的ID,相关对象的ID和对象的值。该表可以具有尽可能多的重复ID值关系,除非对于相同ID,值为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   |
                                   +--------+--------+-------+

问题是如何强制它在值为0时不允许重复的ID值关系?

1 个答案:

答案 0 :(得分: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)