SQL Server 2005 eindeutiger Schlüssel mit Nullwert

8

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?

    
Curtis 12.05.2011, 18:52
quelle

4 Antworten

9

Dies ist eine lange Beschwerde über die eindeutigen Einschränkungen / Indizes von SQL Server. Die beste Lösung besteht darin, eine Sicht mit Schemabinding zu erstellen und dann einen eindeutigen Index für diese Spalte zu erstellen:

%Vor%     
Thomas 12.05.2011, 18:55
quelle
1

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.

    
Martin Smith 12.05.2011 18:56
quelle
0

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.

    
marc_s 12.05.2011 18:55
quelle
0

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.

  1. 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.

  2. 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).

  3. 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.

    
user166390 12.05.2011 19:01
quelle

Tags und Links