Ich habe eine Tabelle in SQL Server 2005 mit einem Fremdschlüssel und möchte, dass dieser Fremdschlüssel ein eindeutiger Wert oder null ist. Ich habe es als eindeutigen Schlüssel eingerichtet, aber es erlaubt mir nicht, mehrere Nullen in derselben Tabelle zu haben. Ist es möglich zu tun, was ich will?
Sie können dies nicht mit einer Einschränkung auf Tabellenebene in SQL Server 2005 erzwingen, aber Sie können eine Sicht mit der Definition SELECT Col FROM t WHERE Col IS NOT NULL
erstellen und dann einen eindeutigen gruppierten Index dafür erstellen.
In SQL Server 2008 können Sie ein gefilterter index bei den Werten, die nicht null sind - das ist leider ein neues Feature in der Version 2008, also 2005 nicht Ich bin in der Lage, so etwas zu tun, fürchte ich.
Immer ein Ärgernis von mir. Ich bevorzuge die "andere" Interpretation des Standards.
Siehe Erstellen einer eindeutigen Einschränkung, die ignoriert Nullen in SQL Server . Es umfasst drei verschiedene Ansätze.
Lösung 1: Gefilterte Indizes.
Dies scheint ziemlich normal zu sein, nach anderen Antworten zu urteilen. Ich habe diesen Ansatz nicht ausprobiert - es erfordert jedoch SQL Server 2008.
Lösung 2: Einschränkung für berechnete Spalte
Ich habe das benutzt und es funktioniert. Beziehungen müssen jedoch möglicherweise angepasst und / oder sekundäre nicht-eindeutige Abdeckung indiziert hinzugefügt werden (eine für eindeutige Einschränkung, eine für die Indexabdeckung).
Lösung 3: UDF Check Constraint (nicht empfohlen)
Ahh, die Macht von TSQL (lies: etwas else zu behandeln). Ich bin diesen Weg nicht gegangen.
Glückliche Kodierung.
Tags und Links sql-server-2005 unique-key