Ich habe das schon ein paar Mal in meiner Karriere kommen, und keiner meiner lokalen Kollegen scheint in der Lage zu sein, es zu beantworten. Angenommen, ich habe eine Tabelle mit einem "Description" -Feld, das ein Kandidatentaste ist, mit der Ausnahme, dass ein Benutzer manchmal die Hälfte des Prozesses stoppt. Für etwa 25% der Datensätze ist dieser Wert null, aber für alle, die nicht NULL sind, muss er eindeutig sein.SQL kann ich eine bedingte Eindeutigkeit für eine Tabelle haben?
Ein anderes Beispiel könnte eine Tabelle sein, die mehrere "Versionen" eines Datensatzes verwalten muss, und ein Bitwert zeigt an, welcher der "aktiven" ist. Der "Kandidatenschlüssel" ist also immer gefüllt, aber es gibt möglicherweise drei Versionen, die identisch sind (mit 0 im aktiven Bit) und nur eine, die aktiv ist (1 im aktiven Bit).
Ich habe alternative Methoden, um diese Probleme zu lösen (im ersten Fall erzwingen Sie den Regelcode, entweder in der gespeicherten Prozedur oder Business-Schicht, und in der zweiten füllen eine Archivtabelle mit einem Trigger und UNION die Tabellen, wenn ich brauche eine Geschichte). Ich möchte keine Alternativen (es sei denn, es gibt nachweislich bessere Lösungen), ich frage mich nur, ob irgendein Geschmack von SQL auf diese Weise "bedingte Eindeutigkeit" ausdrücken kann. Ich benutze MS SQL, wenn es einen Weg gibt, das zu tun, großartig. Ich bin hauptsächlich akademisch an dem Problem interessiert.
Mögliche doppelte: http://stackoverflow.com/questions/866061/conditional-unique-constraint –
Welche Version von SQL Server? – gbn
Danke für den Zeiger In silico. Es trifft definitiv auf Situation 2 zu. Ich habe gesucht, bevor ich gepostet habe, aber ich habe nicht wirklich nach den Schlüsselwörtern gesucht, die ich schließlich im Titel verwendet habe, oder ich hätte es gefunden! Der Link, den du postest, geht nicht ganz auf Situation Nr. 1 ein, die mit Tom H.'s Vorschlag von 2005 und Arthur in 2008 gelöst wurde. gbn: Ich benutze 2005, weshalb ich nichts über Index wusste Filter in 2008. –