sp_bindrule (Transact-SQL)
Lie une règle à une colonne ou un type de données d'alias.
Important : |
---|
Cette fonctionnalité sera supprimée dans une prochaine version de Microsoft 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 les contraintes CHECK à la place. Ces contraintes CHECK sont créées à l'aide du mot clé CHECK des instructions CREATE TABLE ou ALTER TABLE. |
Conventions de la syntaxe de Transact-SQL
Syntaxe
sp_bindrule [ @rulename = ] 'rule' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
Arguments
[ @rulename=] 'rule'
Nom de la règle créée par une instruction CREATE RULE. rule est du type nvarchar(776), sans valeur par défaut.
[ @objname=] 'object_name'
Table ou colonne, ou bien type de données d'alias auquel la règle doit être liée. Une règle ne peut pas être associée à un type de données CLR défini par l'utilisateur, text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml ou à une colonne timestamp. Une règle ne peut pas être liée à une colonne calculée.
object_name est de type nvarchar(776), sans valeur par défaut. Si object_name est un nom non composé, il est résolu comme un type de données d'alias. S'il s'agit d'un nom en deux ou trois parties, il est d'abord résolu en tant que table ou colonne. Si cette résolution échoue, il est résolu comme un type de données d'alias. Par défaut, les colonnes existantes du type de données d'alias héritent de rule, sauf si une règle a été liée directement à la colonne.
Remarque : |
---|
object_name peut contenir les caractères crochet [ et ] comme caractères d'identificateur délimité. Pour plus d'informations, consultez Identificateurs délimités (Moteur de base de données). |
Remarque : |
---|
Les règles créées sur des expressions utilisant 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_flag'
N'est utilisé que pour lier une règle à un type de données d'alias. futureonly_flag est de type varchar(15), avec NULL comme valeur par défaut. Ce paramètre, lorsqu'il a la valeur futureonly, empêche les colonnes existantes d'un type de données d'alias d'hériter de la nouvelle règle. Si futureonly_flag a pour valeur NULL, la nouvelle règle est liée à toute colonne du type de données d'alias qui n'a pas de règle à ce moment, ou qui utilise la règle existante du type de données d'alias.
Notes
Vous pouvez lier une nouvelle règle à une colonne (il est toutefois recommandé d'utiliser une contrainte CHECK) ou à un type de données d'alias à l'aide de sp_bindrule sans dissocier une règle existante. L'ancienne règle est remplacée par la nouvelle. Si une règle est associée à une colonne à l'aide d'une contrainte CHECK existante, toutes les restrictions sont évaluées. Vous ne pouvez pas lier de règle à un type de données SQL Server.
La règle s'impose lors d'une tentative d'insertion de données (INSERT) et non au moment de la liaison. Il est possible de lier une règle de type de données caractère à une colonne de type de données numeric, bien qu'une telle opération INSERT ne soit pas valide.
Les colonnes existantes d'un type de données défini par l'utilisateur héritent de la nouvelle règle, sauf si futureonly_flag a la valeur futureonly. Les nouvelles colonnes définies avec le type de données d'alias héritent toujours de la règle. Si la clause ALTER COLUMN d'une instruction ALTER TABLE change le type de données d'une colonne en un type de données d'alias lié à une règle, la colonne n'hérite pas de cette règle liée au type de données. Il convient de lier la règle elle-même à la colonne à l'aide de sp_bindrule.
Lorsque vous liez une règle à une colonne, l'information correspondante est ajoutée à la table sys.columns. Lorsque vous liez une règle à un type de données d'alias, les informations correspondantes sont ajoutées à la table sys.types.
Autorisations
Pour lier une règle à une colonne de table, une autorisation ALTER est nécessaire. Pour lier une règle à un type de données d'alias, il est nécessaire de disposer d'une autorisation CONTROL sur le type de données d'alias ou d'une autorisation ALTER sur le schéma auquel le type appartient.
Valeurs des codes renvoyés
0 (succès) ou 1 (échec)
Exemples
A. Liaison d'une règle à une colonne
En supposant qu'une règle nommée today
ait été créée dans la base de données active par l'instruction CREATE RULE, l'exemple suivant lie la règle à la colonne HireDate
de la table Employee
. 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. Liaison d'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
. Toutes les colonnes créées par une instruction CREATE TABLE avec le type de données ssn
héritent de la règle rule_ssn
. Les colonnes existantes de type ssn
héritent également de la règle rule_ssn
, sauf si futureonly_flag a pour valeur futureonly, ou si ssn
a une règle qui lui est directement liée. Les règles liées à des colonnes ont toujours priorité sur les règles liées à des types de données.
USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn'
C. Utilisation de l'argument futureonly_flag
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. Utilisation des identificateurs délimités
Cet exemple illustre l'utilisation des identificateurs délimités dans le paramètre object_name.
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.
Voir aussi
Référence
Procédures stockées système (Transact-SQL)
Procédures stockées du moteur de base de données (Transact-SQL)
CREATE VIEW (Transact-SQL)
DROP RULE (Transact-SQL)
sp_unbindrule (Transact-SQL)
Procédures stockées système (Transact-SQL)