Eindeutige Einschränkungen für nullfähige Spalten in SQL Server 2005

12

In diesem einen Projekt, an dem ich arbeite, muss ein bestimmtes Feld eindeutig sein (kein Problem!), Aber wenn das Feld null ist, soll die Einschränkung ignoriert werden. In SQL Server 2008 verwende ich den gefilterten Index wie unten gezeigt, aber dies ist in früheren Versionen von SQL nicht verfügbar!

CREATE UNIQUE NONCLUSTERED INDEX User_UserName_IUC
ON [User] (pinNr)
WHERE UserName IS NOT NULL

Ich glaube jedoch nicht, dass dies in SQL Server 2005 verfügbar ist. Tatsächlich gibt dieser Blogeintrag an, dass es eine Problemumgehung gibt, bei der ein Auslöser zum Überprüfen der Eindeutigkeit verwendet wird. Hat jemand ein Beispiel dafür? oder vielleicht eine alternative?

Leider ist ein Upgrade auf SQl Server 2008 für diesen bestimmten Client keine Option !!

Ziel Kai
quelle

Antworten:

18

Eigentlich musste ich sowas mal machen. Dabei wurde eine berechnete Spalte erstellt, die den Wert der Spalte Unique (wenn nicht) NULLund den Wert des Primärschlüssels (mit einer anderen Logik, die es unmöglich macht, mit den Werten in der Spalte unique in Konflikt zu geraten) verwendet, und der Index für Unique erstellt diese Spalte. Ein Beispiel hierfür und die Triggermethode finden Sie hier .

Lamak
quelle
7

Sie können eine Ansicht erstellen (wobei der Benutzername nicht null ist) und dann einen eindeutigen Index für die Ansicht erstellen. Sie werden die Ansicht nie brauchen, sie wird nur dafür existieren.

Sie können diese Technik auch verwenden, um die Eindeutigkeit über mehrere Tabellen hinweg zu erzwingen, wo dies normalerweise unmöglich wäre.

Meff
quelle
2
Für indizierte Ansichten ist keine Enterprise Edition erforderlich. Sie erfordern jedoch, dass Sie den Abfragehinweis WITH (NOEXPAND) verwenden, um den Abfrageoptimierer der Standard Edition zu zwingen, die indizierte Ansicht anstelle der zugrunde liegenden Abfrage zu verwenden.
Jeremiah Peschka
3
In diesem Fall besteht der einzige Gesichtspunkt der Ansicht darin, die eindeutige Einschränkung durchzusetzen, und dies ist ein perfekt gültiger / allgemeiner Ansatz.
Martin Smith
2
Bearbeitet, um falsche Informationen über die erforderliche Enterprise Edition zu entfernen.
Meff
@Meff Dank für die Aufnahme hier die Zeit zu antworten auf die Kommentare - ich hoffe , dass Sie nicht ein Fremder auf der Website sein: Sie interessieren könnten diese Fragen :)
Jack sagt Versuch topanswers.xyz