CREATE RULE (Transact-SQL)CREATE RULE (Transact-SQL)

DIESES THEMA GILT FÜR:jaSQL Server (ab 2008)neinAzure SQL-DatenbankneinAzure SQL Data Warehouse neinParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Erstellt ein Objekt, das als Regel bezeichnet wird.Creates an object called a rule. 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.When bound to a column or an alias data type, a rule specifies the acceptable values that can be inserted into that column.

Wichtig

Dieses Feature wird in einer künftigen Version von Microsoft SQL Server entfernt.This feature will be removed in a future version of Microsoft SQL Server. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird.Avoid using this feature in new development work, and plan to modify applications that currently use this feature. Stattdessen wird die Verwendung von CHECK-Einschränkungen empfohlen. We recommend that you use check constraints instead. CHECK-Einschränkungen werden mit dem CHECK-Schlüsselwort der CREATE TABLE- oder ALTER TABLE-Anweisung erstellt.Check constraints are created by using the CHECK keyword of CREATE TABLE or ALTER TABLE. Weitere Informationen finden Sie unter Unique Constraints and Check Constraints.For more information, see Unique Constraints and Check Constraints.

An eine Spalte oder an einen Aliasdatentyp kann jeweils nur eine Regel gebunden sein.A column or alias data type can have only one rule bound to it. Allerdings können einer Spalte sowohl eine Regel als auch eine oder mehrere CHECK-Einschränkungen zugeordnet werden.However, a column can have both a rule and one or more check constraints associated with it. Ist dies der Fall, werden alle Einschränkungen berücksichtigt.When this is true, all restrictions are evaluated.

Themenlinksymbol Transact-SQL Syntax Conventions (Transact-SQL-Syntaxkonventionen)Topic link icon Transact-SQL Syntax Conventions

SyntaxSyntax


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

ArgumenteArguments

schema_nameschema_name
Der Name des Schemas, zu dem die Regel gehört.Is the name of the schema to which the rule belongs.

rule_namerule_name
Der Name der neuen Regel.Is the name of the new rule. Regelnamen müssen den Regeln für entsprechen Bezeichner.Rule names must comply with the rules for identifiers. Das Angeben des Regelbesitzernamens ist optional.Specifying the rule owner name is optional.

condition_expressioncondition_expression
Die Bedingung oder die Bedingungen, die die Regel definieren.Is the condition or conditions that define the rule. 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.A rule can be any expression valid in a WHERE clause and can include elements such as arithmetic operators, relational operators, and predicates (for example, IN, LIKE, BETWEEN). Eine Regel kann nicht auf Spalten oder andere Datenbankobjekte verweisen.A rule cannot reference columns or other database objects. Integrierte Funktionen, die nicht auf Datenbankobjekte verweisen, dürfen in einer Regel eingeschlossen sein.Built-in functions that do not reference database objects can be included. Benutzerdefinierte Funktionen können nicht verwendet werden.User-defined functions cannot be used.

Condition_expression enthält einen Variablenverweis.condition_expression includes one variable. Das at-Zeichen (@) vorangestellt ist jede lokale Variable.The at sign (@) precedes each local variable. Der Ausdruck bezieht sich auf den Wert, der mit der UPDATE- oder INSERT-Anweisung eingegeben wird.The expression refers to the value entered with the UPDATE or INSERT statement. Kann einen beliebigen Namen bzw. ein Symbol zur Darstellung des Werts, beim Erstellen der Regel verwendet werden, aber das erste Zeichen muss das at-Zeichen (@).Any name or symbol can be used to represent the value when creating the rule, but the first character must be the at sign (@).

Hinweis

Vermeiden Sie die Erstellung von Regeln für Ausdrücke, die Aliasdatentypen verwenden.Avoid creating rules on expressions that use alias data types. 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.Although rules can be created on expressions that use alias data types, after binding the rules to columns or alias data types, the expressions fail to compile when referenced.

HinweiseRemarks

CREATE RULE-Anweisungen können nicht mit anderen Transact-SQLTransact-SQL-Anweisungen in einem einzelnen Batch kombiniert werden.CREATE RULE cannot be combined with other Transact-SQLTransact-SQL statements in a single batch. 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.Rules do not apply to data already existing in the database at the time the rules are created, and rules cannot be bound to system data types.

Eine Regel kann nur in der aktuellen Datenbank erstellt werden.A rule can be created only in the current database. Nachdem Sie eine Regel erstellt haben, führen Sie Sp_bindrule auf die Regel an eine Spalte oder an den Aliasdatentyp zu binden.After you create a rule, execute sp_bindrule to bind the rule to a column or to alias data type. Eine Regel muss mit dem Datentyp der Spalte kompatibel sein.A rule must be compatible with the column data type. Z. B. "@value wie a%" kann nicht als eine Regel für eine numerische Spalte verwendet werden.For example, "@value LIKE A%" cannot be used as a rule for a numeric column. Eine Regel kann nicht gebunden werden, um eine Text, Ntext, Image, varchar(max), nvarchar(max), varbinary(max), Xml, CLR-benutzerdefinierten Typ oder ZeitstempelSpalte.A rule cannot be bound to a text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR user-defined type, or timestampcolumn. An eine berechnete Spalte kann keine Regel gebunden werden.A rule cannot be bound to a computed column.

Stellen Sie sicher, dass Sie Zeichen- und Datumskonstanten in einfache Anführungszeichen (') setzen und vor binären Konstanten 0x einfügen.Enclose character and date constants with single quotation marks (') and precede binary constants with 0x. Falls die Regel nicht mit der Spalte kompatibel ist, an die sie gebunden ist, gibt SQL Server-DatenbankmodulSQL Server Database Engine eine Fehlermeldung zurück, wenn ein Wert eingefügt wird, nicht jedoch, wenn die Regel gebunden wird.If the rule is not compatible with the column to which it is bound, the SQL Server-DatenbankmodulSQL Server Database Engine returns an error message when a value is inserted, but not when the rule is bound.

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.A rule bound to an alias data type is activated only when you try to insert a value into, or to update, a database column of the alias data type. 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.Because rules do not test variables, do not assign a value to an alias data type variable that would be rejected by a rule that is bound to a column of the same data type.

Verwenden Sie zum Abrufen eines Berichts auf eine Regel Sp_help.To get a report on a rule, use sp_help. Um den Text einer Regel anzuzeigen, führen Sie Sp_helptext mit dem Regelnamen als Parameter.To display the text of a rule, execute sp_helptext with the rule name as the parameter. Um eine Regel umzubenennen, verwenden Sie "Sp_rename".To rename a rule, use sp_rename.

Eine Regel muss gelöscht werden, mithilfe der DROP RULE, bevor Sie ein neuer Eintrag mit dem gleichen Namen erstellt wird, und die Regel muss ungebundenen mit Sp_unbindrule bevor er gelöscht wird.A rule must be dropped by using DROP RULE before a new one with the same name is created, and the rule must be unbound byusing sp_unbindrule before it is dropped. Verwenden Sie zum Aufheben der Bindung einer Regel an eine Spalte, Sp_unbindrule.To unbind a rule from a column, use sp_unbindrule.

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.You can bind a new rule to a column or data type without unbinding the previous one; the new rule overrides the previous one. Regeln, die an Spalten gebunden sind, haben immer Vorrang vor Regeln, die an Aliasdatentypen gebunden sind.Rules bound to columns always take precedence over rules bound to alias data types. Wenn Sie eine Regel an eine Spalte binden, wird dabei die Regel ersetzt, die bereits an den Aliasdatentyp jener Spalte gebunden ist.Binding a rule to a column replaces a rule already bound to the alias data type of that column. Binden Sie dagegen eine Regel an einen Datentyp, so ersetzt diese nicht die Regel, die an eine Spalte mit diesem Aliasdatentyp gebunden wurde.But binding a rule to a data type does not replace a rule bound to a column of that alias data type. Die folgende Tabelle zeigt die Rangfolge, die gilt, wenn Regeln an Spalten und Aliasdatentypen, für die bereits Regeln vorhanden sind, gebunden werden:The following table shows the precedence in effect when rules are bound to columns and to alias data types on which rules already exist.

Neue Regel wird gebunden anNew rule bound to Alte Regel ist gebunden anOld rule bound to

Aliasdatentypalias data type
Alte Regel ist gebunden anOld rule bound to

ColumnColumn
Alias-DatentypAlias data type Ersetzt alte RegelOld rule replaced Keine ÄnderungNo change
ColumnColumn Ersetzt alte RegelOld rule replaced Ersetzt alte RegelOld rule replaced

Wenn einer Spalte ein Standardwert und eine Regel zugeordnet sind, muss der Standardwert innerhalb der durch die Regel definierten Domäne liegen.If a column has both a default and a rule associated with it, the default must fall within the domain defined by the rule. Ein Standardwert, der gegen eine Regel verstößt, wird nie eingefügt.A default that conflicts with a rule is never inserted. Bei jedem Versuch, einen solchen Standardwert einzufügen, generiert das SQL Server-Datenbankmodul eine Fehlermeldung.The SQL Server Database Engine generates an error message each time it tries to insert such a default.

BerechtigungenPermissions

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.To execute CREATE RULE, at a minimum, a user must have CREATE RULE permission in the current database and ALTER permission on the schema in which the rule is being created.

BeispieleExamples

A.A. Erstellen einer Regel mit einem WertebereichCreating a rule with a range

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.The following example creates a rule that restricts the range of integers inserted into the column or columns to which this rule is bound.

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

B.B. Erstellen einer Regel mit einer ListeCreating a rule with a list

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.The following example creates a rule that restricts the actual values entered into the column or columns (to which this rule is bound) to only those listed in the rule.

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

C.C. Erstellen einer Regel mit einem MusterCreating a rule with a pattern

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.The following example creates a rule to follow a pattern of any two characters followed by a hyphen (-), any number of characters or no characters, and ending with an integer from 0 through 9.

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

Siehe auchSee Also

ALTER TABLE (Transact-SQL) ALTER TABLE (Transact-SQL)
CREATE DEFAULT (Transact-SQL) CREATE DEFAULT (Transact-SQL)
CREATE TABLE (Transact-SQL) CREATE TABLE (Transact-SQL)
Löschen Sie die STANDARDMÄßIGE ( Transact-SQL ) DROP DEFAULT (Transact-SQL)
DROP RULE ( Transact-SQL ) DROP RULE (Transact-SQL)
Ausdrücke ( Transact-SQL ) Expressions (Transact-SQL)
Sp_bindrule ( Transact-SQL ) sp_bindrule (Transact-SQL)
sp_help (Transact-SQL) sp_help (Transact-SQL)
sp_helptext (Transact-SQL) sp_helptext (Transact-SQL)
sp_rename (Transact-SQL) sp_rename (Transact-SQL)
Sp_unbindrule ( Transact-SQL ) sp_unbindrule (Transact-SQL)
WOBEI ( Transact-SQL )WHERE (Transact-SQL)