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 de vérification. Les contraintes CHECK sont créées à l’aide du 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 futureonly
sur , 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_bindrule
de .
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.