Unterabfragen in Prüfeinschränkungen: Eine Problemumgehung
In SQL Server 2008 R2 löst die Verwendung von Unterabfragen in Prüfeinschränkungen eine Fehlermeldung aus, die besagt, dass nur Skalar vorhanden sind Ausdrücke sind erlaubt. Der folgende Code zielt beispielsweise darauf ab, beim Einfügen von Daten eine Spalte in Tabelle1 mit Werten in Tabelle2 zu vergleichen:
ALTER TABLE Table1 WITH CHECK ADD CONSTRAINT CK_Code CHECK (MyField in (Select Field From Table2))
Behebung des Fehlers
Um diese Einschränkung zu umgehen, Erwägen Sie alternative Ansätze:
1. Verwenden einer Funktion:
Konvertieren Sie die Unterabfrage in eine Funktion, die einen Skalarwert (z. B. True oder False) zurückgibt, der angibt, ob der Wert in der anderen Tabelle vorhanden ist. Verwenden Sie dann die Funktion in der Prüfeinschränkung.
Zum Beispiel:
CREATE FUNCTION myFunction ( @field DATATYPE(?) ) RETURNS VARCHAR(5) AS BEGIN IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field) return 'True' return 'False' END
2. Alternative Syntax:
In einigen Fällen ist es möglich, die Prüfeinschränkung mithilfe einer alternativen Syntax umzuschreiben, die Unterabfragen vermeidet:
Verwendung von EXISTS:
CHECK (EXISTS (SELECT* FROM Table2 WHERE MYFIELD = MyField))
Verwenden von IN mit a Unterauswahl:
CHECK (MyField IN (SELECT Field FROM Table2))
3. Fremdschlüsseleinschränkung:
Wenn die Beziehung zwischen den Tabellen eine echte Fremdschlüsselbeziehung darstellt, ist die Verwendung einer Fremdschlüsseleinschränkung die am besten geeignete Lösung. Dies erzwingt die referenzielle Integrität und garantiert die Datenkonsistenz.
Durch die Implementierung einer der genannten Problemumgehungen können Sie unterabfrageähnliche Funktionen in Prüfeinschränkungen nutzen, allerdings mit zusätzlichen Überlegungen wie der Implementierung von Funktionen oder der Verwendung einer alternativen Syntax.
Das obige ist der detaillierte Inhalt vonWie kann ich Unterabfragen in SQL Server 2008 R2-Prüfungseinschränkungen verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!