2017-10-19 2 views
3

Ich mag würde eine bedingte Einschränkung für meine Datenbank haben:SQL bedingte Einschränkung für mehrere Spalten eindeutig ist

enter image description here

Sie können sehen, dass meine CreatedBy Spalte einige Einträge hat aufgrund Altdaten Probleme fehlt.

Mein neuer Code stellt sicher, dass der CreatedBy ausgefüllt ist.

Frage:

Ich möchte, dass niemand gewährleisten, kann durch Hinzufügen einer bedingten Einschränkung doppelte Einträge in den db eingeben. dass definiert, dass eine Zeile soll von AnswerID, PollID und CreatedBy eindeutig sein ... nur wenn CreatedBy nicht leer ist

Es könnte wie folgt aussehen:

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

Irgendwelche Ideen, wenn es möglich ist?

+0

@a_horse_with_no_name - Danke, hoffe, dass hilft – Jimmyt1988

Antwort

5

sicher, verwenden Sie einen filtered index:

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

Oder, da Sie gesagt "nicht leer", dann so etwas tun sollte:

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

Es ist ... es ist schön (wischt Träne aus dem Gesicht). Danke, ich versuche es jetzt! – Jimmyt1988

0

Wenn Version vor ist bis 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) 
Verwandte Themen