sp_bindrule (Transact-SQL)

Gilt für:SQL ServerAzure SQL-Datenbank

Bindet eine Regel an eine Spalte oder an einen Aliasdatentyp.

Wichtig

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen eindeutige Einschränkungen und Check-Einschränkungen. CHECK-Einschränkungen werden mithilfe der CHECK-Schlüsselwort (keyword) der CREATE TABLE- oder ALTER TABLE-Anweisungen erstellt.

Transact-SQL-Syntaxkonventionen

Syntax

sp_bindrule
    [ @rulename = ] N'rulename'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

Argumente

[ @rulename = ] N'rulename'

Der Name einer regel, die von der CREATE RULE Anweisung erstellt wurde. @rulename ist nvarchar(776), ohne Standard.

[ @objname = ] N'objname'

Die Tabelle und Spalte oder der Aliasdatentyp, an den die Regel gebunden werden soll. @objname ist nvarchar(776), ohne Standard.

Eine Regel kann nicht an text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR user-defined type oder timestamp column gebunden werden. Eine Regel kann nicht an eine berechnete Spalte gebunden werden.

@objname ist nvarchar(776) ohne Standard. Wenn @objname 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 sie als Aliasdatentyp aufgelöst. Standardmäßig erben vorhandene Spalten des Aliasdatentyps @rulename, es sei denn, eine Regel ist direkt an die Spalte gebunden.

@objname können die Klammerzeichen ([und ]) als durch Trennzeichen getrennte Bezeichnerzeichen enthalten. Weitere Informationen finden Sie unter Datenbankbezeichner.

Regeln, die für Ausdrücke erstellt wurden, die Aliasdatentypen verwenden, können an Spalten- oder Aliasdatentypen gebunden werden, können jedoch nicht kompiliert werden, wenn auf sie verwiesen wird. Vermeiden Sie die Verwendung von Regeln, die für Aliasdatentypen erstellt wurden.

[ @futureonly = ] 'futureonly'

Wird nur verwendet, wenn eine Regel an einen Aliasdatentyp gebunden wird. @futureonly ist varchar(15) mit einem Standardwert von NULL. Mit diesem Parameter wird verhindert futureonly, dass vorhandene Spalten eines Aliasdatentyps die neue Regel erben. Wenn @futureonly ist, wird NULLdie neue Regel an alle Spalten des Aliasdatentyps gebunden, die derzeit keine Regel besitzen oder die die vorhandene Regel des Aliasdatentyps verwenden.

Rückgabecodewerte

0 (erfolgreich) oder 1 Fehler.

Hinweise

Sie können eine neue Regel an eine Spalte binden (obwohl die Verwendung einer CHECK Einschränkung bevorzugt wird) oder an einen Aliasdatentyp ohne sp_bindrule Bindung einer vorhandenen Regel. Die alte Regel wird überschrieben. Wenn eine Regel an eine Spalte mit einer vorhandenen CHECK Einschränkung gebunden ist, werden alle Einschränkungen ausgewertet. Sie können eine Regel nicht an einen SQL Server-Datentyp binden.

Die Regel wird erzwungen, wenn eine INSERT Anweisung versucht wird, nicht bei bindung. Sie können eine Zeichenregel an eine Spalte mit numerischem Datentyp binden, obwohl ein INSERT solcher Vorgang ungültig ist.

Vorhandene Spalten des Aliasdatentyps erben die neue Regel, es sei denn , @futureonly wird als futureonlyangegeben. Neue Spalten, die mit dem Aliasdatentyp definiert sind, erben immer die Regel. Wenn die ALTER COLUMN Klausel einer ALTER TABLE Anweisung jedoch den Datentyp einer Spalte in einen alias-Datentyp ändert, der an eine Regel gebunden ist, wird die an den Datentyp gebundene Regel nicht von der Spalte geerbt. Die Regel muss speziell an die Spalte gebunden werden, indem Sie diese verwenden sp_bindrule.

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

Berechtigungen

Um eine Regel an eine Tabellenspalte zu binden, müssen Sie über die Berechtigung für die Tabelle verfügen ALTER . CONTROL Die Berechtigung für den Aliasdatentyp oder ALTER die Berechtigung für das Schema, zu dem der Typ gehört, ist erforderlich, um eine Regel an einen Aliasdatentyp zu binden.

Beispiele

A. Binden einer Regel an eine Spalte

Wenn angenommen wird, dass in der aktuellen Datenbank mithilfe der CREATE RULE Anweisung eine Regel today erstellt wird, bindet das folgende Beispiel die Regel an die HireDate Spalte der Employee Tabelle. 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. In einer CREATE TABLE Anweisung erben Spalten vom Typ ssn die rule_ssn Regel. Vorhandene Spalten vom Typ ssn erben auch die rule_ssn Regel, es sei denn , es wird künftig für @futureonly angegeben oder ssn eine Regel direkt an sie gebunden. Regeln, die an Spalten gebunden sind, haben immer Vorrang vor Standardeinstellungen, die an Datentypen gebunden sind.

USE master;
GO

EXEC sp_bindrule 'rule_ssn', 'ssn';

C. Verwenden Sie die Option futureonly.

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 durch Trennzeichen getrennten Bezeichnern

Das folgende Beispiel zeigt die Verwendung von durch Trennzeichen getrennten Bezeichnern in @objname 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.