我有一个包含三列的表,关系的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值关系?
答案 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)