2011-12-26 98 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)