0

我有一个包含三列的表,即关系的 ID、相关对象的 ID 和对象的值。该表可能有尽可能多的重复 ID-Value 关系,但同一 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   |
                                   +--------+--------+-------+

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

4

1 回答 1

0

正如问题评论中所指出的,@Martin Smith这确实类似于Simple CHECK Constraint 不是那么简单,并且在该问题的答案中(尽管它是针对 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)
于 2011-12-26T18:39:15.003 回答