sp_bindrule (Transact-SQL)
Bindet eine Regel an eine Spalte oder an einen Aliasdatentyp.
Wichtig: |
---|
Dieses Feature wird in einer zukünftigen Version von Microsoft SQL Server entfernt. Verwenden Sie dieses Feature beim Entwickeln neuer Anwendungen nicht, und planen Sie 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. |
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 hat den Datentyp nvarchar(776) und 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 hat den Datentyp nvarchar(776) und keinen Standardwert. Wenn object_name ein einteiliger Name ist, wird er als Aliasdatentyp aufgelöst. Wenn es sich um einen zwei- oder dreiteiligen Namen handelt, wird er zuerst als Tabelle und Spalte aufgelöst. Wenn diese 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.
Hinweis: |
---|
object_name kann die Zeichen [ und ] als begrenzte Bezeichner enthalten. Weitere Informationen finden Sie unter Begrenzte Bezeichner (Datenbankmodul). |
Hinweis: |
---|
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 dann verwendet, wenn eine Regel an einen Aliasdatentyp gebunden wird. future_only_flag hat den Datentyp varchar(15) und den Standardwert 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
Zum Binden einer Regel an eine Tabellenspalte ist die ALTER-Berechtigung für die Tabelle erforderlich. Zum Binden einer Regel an einen Aliasdatentyp ist die CONTROL-Berechtigung für den Aliasdatentyp erforderlich 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.
Siehe auch
Verweis
Gespeicherte Systemprozeduren (Transact-SQL)
Gespeicherte Prozeduren für das Datenbankmodul (Transact-SQL)
CREATE RULE (Transact-SQL)
DROP RULE (Transact-SQL)
sp_unbindrule (Transact-SQL)
Gespeicherte Systemprozeduren (Transact-SQL)