Heim >Datenbank >MySQL-Tutorial >Können Skalarwertfunktionen Unterabfrageeinschränkungen in SQL Server-Prüfungseinschränkungen umgehen?

Können Skalarwertfunktionen Unterabfrageeinschränkungen in SQL Server-Prüfungseinschränkungen umgehen?

DDD
DDDOriginal
2025-01-04 14:06:39229Durchsuche

Can Scalar-Valued Functions Bypass Subquery Restrictions in SQL Server Check Constraints?

Unterabfragefunktionalität in Prüfeinschränkungen

Die Verwendung von Unterabfragen in Prüfeinschränkungen ist seit langem eine Einschränkung in SQL-Server 2008 R2. In diesem Artikel wird das Problem untersucht und eine alternative Lösung mithilfe einer Skalarrückgabefunktion bereitgestellt.

Problem:

Beim Versuch, einen Spaltenwert anhand einer anderen Tabelle mithilfe einer Unterabfrage zu validieren Bei einer Check-Einschränkung tritt der folgende Fehler auf: „Unterabfragen sind in diesem Kontext nicht zulässig. Nur skalare Ausdrücke sind zulässig.“ erlaubt.“

Hintergrund:

Prüfeinschränkungen werden verwendet, um die Datenbankintegrität durchzusetzen, indem ein Ausdruck anhand jeder Zeile ausgewertet wird, die in eine Tabelle eingefügt oder aktualisiert wird. Normalerweise bestehen diese Ausdrücke aus Skalaroperationen und nicht aus Unterabfragen.

Lösung:

Um diese Einschränkung zu umgehen, kann eine benutzerdefinierte Skalarrückgabefunktion erstellt werden, die das Notwendige kapselt Unterabfrage. Die Funktion sollte einen Skalarwert ausgeben, der angibt, ob die Unterabfragebedingung erfüllt ist.

Beispiel:

Angenommen, wir haben eine Tabelle namens „Tabelle1“ mit einer Spalte „MyField“. Dies muss anhand einer Tabelle namens „Tabelle2“ validiert werden. Wir können eine Funktion namens „myFunction“ wie folgt erstellen:

CREATE FUNCTION myFunction (
    @field DATATYPE(?)
)
RETURNS VARCHAR(5)
AS
BEGIN
    IF EXISTS (SELECT* FROM Table2 WHERE MYFIELD = @field)
        return 'True'
    return 'False'
END

Anwenden der Funktion:

Die „myFunction“ kann jetzt in der Prüfeinschränkung verwendet werden als folgt:

ALTER TABLE Table1
    WITH CHECK ADD CONSTRAINT CK_Code
    CHECK (myFunction(MYFIELD) = 'True')

Dies emuliert effektiv die Funktionalität der Unterabfrage in der Prüfung Einschränkung.

Schlussfolgerung:

Obwohl Unterabfragen nicht direkt in Prüfeinschränkungen verwendet werden können, können skalar zurückgebende Funktionen verwendet werden, um die gewünschte Validierung zu erreichen. Diese Problemumgehung ermöglicht komplexere Datenvalidierungsszenarien, ohne die Datenbankintegrität zu beeinträchtigen.

Das obige ist der detaillierte Inhalt vonKönnen Skalarwertfunktionen Unterabfrageeinschränkungen in SQL Server-Prüfungseinschränkungen umgehen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn