2017-10-19 16 views
3
私は私のデータベース上で条件付きの制約を持っていると思い

SQL条件の制約

enter image description here

あなたは私のCreatedBy列はレガシーデータの問題が原因で不足しているいくつかのエントリを持っていることがわかります。

私の新しいコードではCreatedByが記入されています。

質問:

私は誰もが条件付きの制約を追加することにより、DBに重複したエントリを入力することができていることを確認したいと思います。それが可能だ場合

CONSTRAINT UNIQUE BY AnswerID, PollID, CreatedBy WHERE CreatedBy IS NOT NULL 

任意のアイデア:それは、行がAnswerIDで一意である必要があることを規定しPollIDCreatedBy ... CreatedByが空

でない場合にのみ、それはこのように見えるかもしれませんか?

+0

@a_horse_with_no_name - ありがとうございました – Jimmyt1988

答えて

5

filtered indexを使用し、確かに:

CREATE UNIQUE NONCLUSTERED INDEX <indexName> 
    ON <tableName> (AnswerID, PollID, CreatedBy) 
    WHERE CreatedBy IS NOT NULL; 

それとも、あなたが "空ではない" と述べたことから、このような何かを行う必要があります。

CREATE UNIQUE NONCLUSTERED INDEX <indexName> 
    ON <tableName> (AnswerID, PollID, CreatedBy) 
    WHERE CreatedBy IS NOT NULL 
     AND CreatedBy <> N''; 
+2

それは美しいです(顔から涙を拭きます)。ありがとう、私は今試してみよう! – Jimmyt1988

0

バージョンは2008年以前にある場合:

CREATE VIEW dbo.vw_Tablename 
WITH SCHEMABINDING AS 
SELECT AnswerID, PollID, CreatedBy 
FROM dbo.Tablename 
WHERE CreatedBy IS NOT NULL; 

GO 

CREATE UNIQUE CLUSTERED INDEX UIX_vw_Tablename 
    ON dbo.vw_Tablename(AnswerID, PollID, CreatedBy)