sp_bindrule (Transact-SQL)

Bindet eine Regel an eine Spalte oder an einen Aliasdatentyp.

Wichtiger HinweisWichtig

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 so bald wie möglich das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen CHECK-Einschränkungen. CHECK-Einschränkungen werden mit dem CHECK-Schlüsselwort der Anweisungen CREATE TABLE oder ALTER TABLE erstellt.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

Syntax

sp_bindrule [ @rulename = ] 'rule' , 
     [ @objname = ] 'object_name' 
     [ , [ @futureonly = ] 'futureonly_flag' ] 

Argumente

  • [ [ @rulename=] 'rule'
    Der Name einer Regel, die von der CREATE RULE-Anweisung erstellt wurde. rule ist vom Datentyp nvarchar(776) und hat keinen Standardwert.

  • [ [ @objname=] 'object_name'
    Die Tabelle und Spalte oder der Aliasdatentyp, an die bzw. den die Regel gebunden werden soll. 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. Eine Regel kann nicht an eine berechnete Spalte gebunden werden.

    object_name ist vom Datentyp nvarchar(776) und besitzt keinen Standardwert. Wenn object_name ein einteiliger Name ist, wird er als Aliasdatentyp aufgelöst. Ein zwei- oder dreiteiliger Name wird zunächst als Tabelle und Spalte aufgelöst. Wenn die Auflösung fehlschlägt, wird er als Aliasdatentyp aufgelöst. Vorhandene Spalten des Aliasdatentyps erben standardmäßig rule, es sei denn, eine Regel ist direkt an die Spalte gebunden.

    HinweisHinweis

    object_name kann die Zeichen [ und ] als begrenzte Bezeichner enthalten. Weitere Informationen finden Sie unter Begrenzte Bezeichner (Datenbankmodul).

    HinweisHinweis

    Regeln, die für Ausdrücke erstellt werden, die Aliasdatentypen verwenden, können an Spalten oder Aliasdatentypen gebunden werden. Wenn darauf verwiesen wird, schlägt jedoch die Kompilierung fehl. Vermeiden Sie die Verwendung von Regeln, die für Aliasdatentypen erstellt wurden.

  • [ [ @futureonly= ] 'futureonly_flag'
    Wird nur beim Binden einer Regel an einen Aliasdatentyp verwendet. future_only_flag ist vom Datentyp varchar(15), der Standardwert ist NULL. Wenn für diesen Parameter der Wert futureonly festgelegt wird, wird verhindert, dass vorhandene Spalten eines Aliasdatentyps die neue Regel erben. Wenn futureonly_flag den Wert NULL hat, wird die neue Regel an Spalten des Aliasdatentyps gebunden, die aktuell keine Regel haben oder die die vorhandene Regel des Aliasdatentyps verwenden.

Rückgabecodewerte

0 (Erfolg) oder 1 (Fehler)

Hinweise

Sie können eine neue Regel mit sp_bindrule an eine Spalte oder an einen Aliasdatentyp binden (obwohl empfohlen wird, die CHECK-Einschränkung zu verwenden), ohne die Bindung an eine vorhandene Regel aufzuheben. Die alte Regel wird außer Kraft gesetzt. Wenn eine Regel an eine Spalte gebunden wird, für die eine CHECK-Einschränkung vorhanden ist, werden alle Einschränkungen ausgewertet. Das Binden einer Regel an einen SQL Server-Datentyp ist nicht möglich.

Die Regel tritt in Kraft, wenn eine INSERT-Anweisung ausgeführt wird, nicht aber beim Binden. Sie können eine Zeichenregel an eine Spalte des Datentyps numeric binden, obwohl dieser INSERT-Vorgang ungültig ist.

Vorhandene Spalten des Aliasdatentyps erben die neue Regel, es sei denn, futureonly_flag wurde als futureonly angegeben. Neue Spalten, die mit dem Aliasdatentyp definiert sind, erben immer die Regel. Wenn jedoch die ALTER COLUMN-Klausel einer ALTER TABLE-Anweisung den Datentyp einer Spalte in einen Aliasdatentyp ändert, der an eine Regel gebunden ist, wird diese Regel nicht an die Spalte vererbt. Die Regel muss mit sp_bindrule explizit an die Spalte gebunden werden.

Wenn Sie eine Regel an eine Spalte binden, werden der Tabelle sys.columns die zugehörigen Informationen hinzugefügt. Wenn Sie eine Regel an einen Aliasdatentyp binden, werden der Tabelle sys.types die zugehörigen Informationen hinzugefügt.

Berechtigungen

Um eine Regel an eine Tabellenspalte zu binden, benötigen Sie die ALTER-Berechtigung für die Tabelle. Um eine Regel an einen Aliasdatentyp zu binden, benötigen Sie die CONTROL-Berechtigung für den Aliasdatentyp oder die ALTER-Berechtigung für das Schema, dem der Typ angehört.

Beispiele

A. Binden einer Regel an eine Spalte

Unter der Annahme, dass in der aktuellen Datenbank eine Regel mit dem Namen today mit der CREATE RULE-Anweisung erstellt wurde, wird in diesem Beispiel diese Regel an die Spalte HireDate der Tabelle Employee gebunden. Wird der Tabelle Employee eine Zeile hinzugefügt, werden die Daten für die Spalte HireDate in Hinblick auf die Regel today überprüft.

USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate'

B. Binden einer Regel an einen Aliasdatentyp

Unter der Annahme, eine Regel namens rule_ssn und ein Aliasdatentyp namens ssn sind vorhanden, wird in diesem Beispiel rule_ssn an ssn gebunden. Alle Spalten vom Datentyp ssn erben in einer CREATE TABLE-Anweisung die Regel rule_ssn. Vorhandene Spalten des Typs ssn erben ebenfalls die Regel rule_ssn, sofern nicht futureonly für futureonly_flag angegeben wurde oder ssn direkt an eine Regel gebunden ist. An Spalten gebundene Regeln haben immer Vorrang vor den an Datentypen gebundenen Regeln.

USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn'

C. Verwenden von futureonly_flag

Im folgenden Beispiel wird die Regel rule_ssn an den Aliasdatentyp ssn gebunden. Da futureonly angegeben wurde, sind keine vorhandenen Spalten des Typs ssn betroffen.

USE master;
GO
EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly'

D. Verwenden von begrenzten Bezeichnern

Das folgende Beispiel zeigt die Verwendung von begrenzten Bezeichnern im object_name-Parameter.

USE master;
GO
CREATE TABLE [t.2] (c1 int) 
-- Notice the period as part of the table name.
EXEC sp_bindrule rule1, '[t.2].c1' 
-- The object contains two periods; 
-- the first is part of the table name 
-- and the second distinguishes the table name from the column name.