0

リレーションのID、関連するオブジェクトのID、およびオブジェクトの値の3つの列を持つテーブルがあります。同じ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   |
                                   +--------+--------+-------+

問題は、値が0のときにIDと値の関係が繰り返されないように強制するにはどうすればよいですか?

4

1 に答える 1

0

質問のコメントで指摘され@Martin Smithているように、これは実際にはそれほど単純ではない単純なCHECK制約に似ており、その質問への回答には(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 に答える