sp_bindrule (Transact-SQL)

S’applique à :SQL ServerAzure SQL Database

Lie une règle à une colonne ou un type de données d'alias.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt des contraintes uniques et des contraintes case activée. Les contraintes CHECK sont créées à l’aide de l’mot clé CHECK des instructions CREATE TABLE ou ALTER TABLE.

Conventions de la syntaxe Transact-SQL

Syntaxe

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

Arguments

[ @rulename = ] N’rulename'

Nom d’une règle créée par l’instruction CREATE RULE . @rulename est nvarchar(776), sans valeur par défaut.

[ @objname = ] N’objname'

Table et colonne, ou type de données alias auquel la règle doit être liée. @objname est nvarchar(776), sans valeur par défaut.

Une règle ne peut pas être liée à un texte, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR type défini par l’utilisateur ou colonne timestamp. Une règle ne peut pas être liée à une colonne calculée.

@objname est nvarchar(776) sans valeur par défaut. Si @objname est un nom en une seule partie, il se résout en tant que type de données d’alias. S’il s’agit d’un nom en deux ou trois parties, il se résout d’abord en tant que table et colonne ; si cette résolution échoue, elle se résout en tant que type de données alias. Par défaut, les colonnes existantes du type de données alias héritent @rulename sauf si une règle est liée directement à la colonne.

@objname peut contenir les caractères entre crochets ([et]) en tant que caractères d’identificateur délimités. Pour plus d’informations, consultez Identificateurs de base de données.

Les règles créées sur des expressions qui utilisent des types de données d’alias peuvent être liées à des colonnes ou à des types de données d’alias, mais ne peuvent pas être compilées lorsqu’elles sont référencées. Évitez d'utiliser des règles créées sur des types de données d'alias.

[ @futureonly = ] 'futureonly'

Utilisé uniquement lors de la liaison d’une règle à un type de données alias. @futureonly est varchar(15), avec la valeur par défaut NULL. Ce paramètre, lorsqu’il est défini futureonlysur , empêche les colonnes existantes d’un type de données alias d’hériter de la nouvelle règle. Si @futureonly est NULL, la nouvelle règle est liée à toutes les colonnes du type de données alias qui n’ont actuellement aucune règle ou qui utilisent la règle existante du type de données alias.

Valeurs des codes de retour

0 (réussite) ou 1 (échec).

Notes

Vous pouvez lier une nouvelle règle à une colonne (bien que l’utilisation d’une CHECK contrainte soit préférée) ou à un type de données alias avec sp_bindrule sans dissocier une règle existante. L'ancienne règle est remplacée par la nouvelle. Si une règle est liée à une colonne avec une contrainte existante CHECK , toutes les restrictions sont évaluées. Vous ne pouvez pas lier une règle à un type de données SQL Server.

La règle est appliquée lorsqu’une INSERT instruction est tentée, et non lors de la liaison. Vous pouvez lier une règle de caractère à une colonne de type de données numérique , bien qu’une INSERT telle opération ne soit pas valide.

Les colonnes existantes du type de données alias héritent de la nouvelle règle, sauf si @futureonly est spécifié comme futureonly. Les nouvelles colonnes définies avec le type de données d'alias héritent toujours de la règle. Toutefois, si la ALTER COLUMN clause d’une ALTER TABLE instruction modifie le type de données d’une colonne en type de données alias lié à une règle, la règle liée au type de données n’est pas héritée par la colonne. La règle doit être spécifiquement liée à la colonne à l’aide sp_bindrulede .

Lorsque vous liez une règle à une colonne, les informations associées sont ajoutées à la sys.columns table. Lorsque vous liez une règle à un type de données alias, les informations associées sont ajoutées à la sys.types table.

Autorisations

Pour lier une règle à une colonne de table, vous devez disposer ALTER d’autorisations sur la table. CONTROL l’autorisation sur le type de données alias, ou ALTER l’autorisation sur le schéma auquel appartient le type, est nécessaire pour lier une règle à un type de données alias.

Exemples

R. Lier une règle à une colonne

En supposant qu’une règle nommée today est créée dans la base de données active à l’aide de l’instruction CREATE RULE , l’exemple suivant lie la règle à la HireDate colonne de la Employee table. Quand une ligne est ajoutée à la table Employee, SQL Server vérifie si les données fournies pour la colonne HireDate respectent la règle today.

USE master;
GO

EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate';

B. Lier une règle à un type de données d’alias

En supposant l'existence d'une règle nommée rule_ssn et d'un type de données d'alias nommé ssn, cet exemple lie rule_ssn à ssn. Dans une CREATE TABLE instruction, les colonnes de type ssn héritent de la rule_ssn règle. Les colonnes existantes de type ssn héritent également de la rule_ssn règle, sauf si futureonly est spécifiée pour @futureonly, ou ssn qu’une règle est liée directement à celle-ci. Les règles liées aux colonnes sont toujours prioritaires sur les valeurs par défaut liées aux types de données.

USE master;
GO

EXEC sp_bindrule 'rule_ssn', 'ssn';

C. Utiliser l’option futureonly

L'exemple suivant lie la règle rule_ssn au type de données d'alias ssn. Puisque l'option futureonly est incluse, aucune colonne existante de type ssn n'est affectée.

USE master;
GO

EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly';

D. Utiliser des identificateurs délimités

L’exemple suivant montre l’utilisation d’identificateurs délimités dans @objname paramètre.

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.