Freigeben über


CREATE RULE (Transact-SQL)

Erstellt ein Objekt, das als Regel bezeichnet wird. Wenn eine Regel an eine Spalte oder an einen Aliasdatentyp gebunden ist, gibt sie die zulässigen Werte an, die in die betreffende Spalte eingefügt werden können.

Wichtig

Diese Funktion wird in zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Stattdessen wird die Verwendung von CHECK-Einschränkungen empfohlen.CHECK-Einschränkungen werden mit dem CHECK-Schlüsselwort der CREATE TABLE- oder ALTER TABLE-Anweisung erstellt.Weitere Informationen finden Sie unter UNIQUE- und CHECK-Einschränkungen.

An eine Spalte oder an einen Aliasdatentyp kann jeweils nur eine Regel gebunden sein. Allerdings können einer Spalte sowohl eine Regel als auch eine oder mehrere CHECK-Einschränkungen zugeordnet werden. Ist dies der Fall, werden alle Einschränkungen berücksichtigt.

Gilt für: SQL Server (SQL Server 2008 bis aktuelle Version).

Themenlink (Symbol) Transact-SQL-Syntaxkonventionen

Syntax

CREATE RULE [ schema_name . ] rule_name 
AS condition_expression
[ ; ]

Argumente

  • schema_name
    Der Name des Schemas, zu dem die Regel gehört.

  • rule_name
    Der Name der neuen Regel. Regelnamen müssen den Regeln für Bezeichner entsprechen. Das Angeben des Regelbesitzernamens ist optional.

  • condition_expression
    Die Bedingung oder die Bedingungen, die die Regel definieren. Eine Regel kann jeder Ausdruck sein, der in einer WHERE-Klausel zulässig ist, und kann Elemente, wie z. B. arithmetische Operatoren, relationale Operatoren und Prädikate (z. B. IN, LIKE, BETWEEN) einschließen. Eine Regel kann nicht auf Spalten oder andere Datenbankobjekte verweisen. Integrierte Funktionen, die nicht auf Datenbankobjekte verweisen, dürfen in einer Regel eingeschlossen sein. Benutzerdefinierte Funktionen können nicht verwendet werden.

    condition_expression enthält eine Variable. Jede lokale Variable erhält als Präfix das at-Zeichen (@). Der Ausdruck bezieht sich auf den Wert, der mit der UPDATE- oder INSERT-Anweisung eingegeben wird. Wenn Sie die Regel erstellen, können Sie den Wert durch einen beliebigen Namen bzw. ein Symbol darstellen; das erste Zeichen muss jedoch ein at-Zeichen (@) sein.

    Hinweis

    Vermeiden Sie die Erstellung von Regeln für Ausdrücke, die Aliasdatentypen verwenden.Obwohl die Erstellung von Regeln für Ausdrücke, die Aliasdatentypen verwenden, möglich ist, können die Ausdrücke nach dem Binden der Regeln an Spalten oder Aliasdatentypen nicht kompiliert werden, wenn auf diese verwiesen wird.

Hinweise

CREATE RULE-Anweisungen können nicht mit anderen Transact-SQL-Anweisungen in einem einzelnen Batch kombiniert werden. Wenn Sie Regeln erstellen, gelten diese nicht für die Daten, die zu diesem Zeitpunkt bereits in der Datenbank vorhanden sind; darüber hinaus können Regeln nicht an Systemdatentypen gebunden werden.

Eine Regel kann nur in der aktuellen Datenbank erstellt werden. Führen Sie nach dem Erstellen einer Regel sp_bindrule aus, um die Regel an eine Spalte oder an einen Aliasdatentyp zu binden. Eine Regel muss mit dem Datentyp der Spalte kompatibel sein. Es ist beispielsweise nicht möglich, "@value LIKE A%" als Regel für eine numerische Spalte zu verwenden. Eine Regel kann nicht an eine Spalte des Datentyps text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR-benutzerdefinierter Typ oder timestamp gebunden werden. An eine berechnete Spalte kann keine Regel gebunden werden.

Stellen Sie sicher, dass Sie Zeichen- und Datumskonstanten in einfache Anführungszeichen (') setzen und vor binären Konstanten 0x einfügen. Falls die Regel nicht mit der Spalte kompatibel ist, an die sie gebunden ist, gibt SQL Server Database Engine (Datenbankmodul) eine Fehlermeldung zurück, wenn ein Wert eingefügt wird, nicht jedoch, wenn die Regel gebunden wird.

Eine Regel, die an einen Aliasdatentyp gebunden ist, wird nur dann aktiviert, wenn Sie versuchen, einen Wert in eine Datenbankspalte dieses Aliasdatentyps einzufügen bzw. den Spaltenwert zu aktualisieren. Mit Regeln werden keine Variablen getestet. Weisen Sie deshalb einer Variable eines Aliasdatentyps keinen Wert zu, der gegen eine Regel verstoßen würde, die an eine Spalte dieses Datentyps gebunden ist.

Verwenden Sie sp_help, um einen Bericht über eine Regel zu erhalten. Führen Sie sp_helptext mit dem Namen einer Regel als Parameter aus, um den Text der Regel anzuzeigen. Verwenden Sie sp_rename, um eine Regel umzubenennen.

Eine Regel muss mit der DROP RULE-Anweisung gelöscht werden, bevor eine neue Regel gleichen Namens erstellt wird. Außerdem muss ihre Bindung durch die Ausführung von sp_unbindrule aufgehoben werden, bevor sie gelöscht wird. Verwenden Sie sp_unbindrule, um die Bindung einer Regel an eine Spalte aufzuheben.

Sie können eine neue Regel an eine Spalte oder einen Datentyp binden, ohne die Bindung der alten aufzuheben; die neue Regel überschreibt die alte. Regeln, die an Spalten gebunden sind, haben immer Vorrang vor Regeln, die an Aliasdatentypen gebunden sind. Wenn Sie eine Regel an eine Spalte binden, wird dabei die Regel ersetzt, die bereits an den Aliasdatentyp jener Spalte gebunden ist. Binden Sie dagegen eine Regel an einen Datentyp, so ersetzt diese nicht die Regel, die an eine Spalte mit diesem Aliasdatentyp gebunden wurde. Die folgende Tabelle zeigt die Rangfolge, die gilt, wenn Regeln an Spalten und Aliasdatentypen, für die bereits Regeln vorhanden sind, gebunden werden:

Neue Regel wird gebunden an

Alte Regel ist gebunden an

Aliasdatentyp

Alte Regel ist gebunden an

Spalte

Aliasdatentyp

Ersetzt alte Regel

Keine Änderung

Spalte

Ersetzt alte Regel

Ersetzt alte Regel

Wenn einer Spalte ein Standardwert und eine Regel zugeordnet sind, muss der Standardwert innerhalb der durch die Regel definierten Domäne liegen. Ein Standardwert, der gegen eine Regel verstößt, wird nie eingefügt. Bei jedem Versuch, einen solchen Standardwert einzufügen, generiert das SQL Server-Datenbankmodul eine Fehlermeldung.

Berechtigungen

Zum Ausführen der CREATE RULE-Anweisung muss ein Benutzer mindestens über die CREATE RULE-Berechtigung in der aktuellen Datenbank und über die ALTER-Berechtigung auf dem Schema, in dem die Regel erstellt wird, verfügen.

Beispiele

A.Erstellen einer Regel mit einem Wertebereich

Das folgende Beispiel erstellt eine Regel, die den Wertebereich von ganzen Zahlen beschränkt, die in die Spalte(n) eingegeben werden, an die diese Regel gebunden ist.

CREATE RULE range_rule
AS 
@range>= $1000 AND @range <$20000;

B.Erstellen einer Regel mit einer Liste

Das folgende Beispiel erstellt eine Regel, die die Ist-Werte, die in die Spalte oder Spalten eingegeben werden (an die diese Regel gebunden ist), auf Werte beschränkt, die in der Regel aufgelistet sind.

CREATE RULE list_rule
AS 
@list IN ('1389', '0736', '0877');

C.Erstellen einer Regel mit einem Muster

Das folgende Beispiel erstellt eine Regel, die ein Muster vorgibt, das aus zwei beliebigen Zeichen, gefolgt von einem Bindestrich (-), einer beliebigen Anzahl von Zeichen oder gar keinem Zeichen und abschließend einer ganzen Zahl zwischen 0 und 9 besteht.

CREATE RULE pattern_rule 
AS
@value LIKE '__-%[0-9]'

Siehe auch

Verweis

ALTER TABLE (Transact-SQL)

CREATE DEFAULT (Transact-SQL)

CREATE TABLE (SQL Server)

DROP DEFAULT (Transact-SQL)

DROP RULE (Transact-SQL)

Ausdrücke (Transact-SQL)

sp_bindrule (Transact-SQL)

sp_help (Transact-SQL)

sp_helptext (Transact-SQL)

sp_rename (Transact-SQL)

sp_unbindrule (Transact-SQL)

WHERE (Transact-SQL)