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.

ms188064.note(de-de,SQL.90).gifWichtig:
CREATE RULE wird in einer zukünftigen Version von Microsoft SQL Server nicht mehr unterstützt. Vermeiden Sie die Verwendung von CREATE RULE bei neuen Entwicklungsarbeiten, und planen Sie die Änderung von Anwendungen, die CREATE RULE derzeit verwenden. 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 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.

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.

ms188064.note(de-de,SQL.90).gifHinweis:
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. Weitere Informationen finden Sie unter Datentypen (Datenbankmodul).

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 gebunden werden an eine Spalte des Datentyps text, ntext, image, varchar(max), nvarchar(max), varbinary(max) oder xml, nicht an einen CLR-benutzerdefinierten Spaltentyp und nicht an timestamp-Spalten. 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 das SQL Server-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 setzt die alte außer Kraft. 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.

ms188064.note(de-de,SQL.90).gifHinweis:
Mit der Einstellung des Kompatibilitätsgrades wird bestimmt, ob das Datenbankmodul eine leere Zeichenfolge als einzelnes Leerzeichen oder als leere Zeichenfolge interpretiert. Ist der Kompatibilitätsgrad kleiner oder gleich 65, so interpretiert das Datenbankmodul leere Zeichenfolgen als einzelne Leerzeichen. Ist der Kompatibilitätsgrad gleich 70, so interpretiert das Datenbankmodul leere Zeichenfolgen als leere Zeichenfolgen. Weitere Informationen finden Sie unter sp_dbcmptlevel (Transact-SQL).

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 tatsächlichen 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 (Transact-SQL)
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)

Andere Ressourcen

Batches
Verwenden von Bezeichnern als Objektnamen

Hilfe und Informationen

Informationsquellen für SQL Server 2005