Partager via


sp_bindefault (Transact-SQL)

Lie une valeur par défaut à 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 modifiez dès que possible les applications qui utilisent actuellement cette fonctionnalité. Nous vous recommandons plutôt de créer des définitions par défaut à l'aide du mot clé DEFAULT des instructions ALTER TABLE ou CREATE TABLE. Pour plus d'informations, consultez Création et modification des définitions DEFAULT.

Icône Lien de rubriqueConventions de syntaxe de Transact-SQL

Syntaxe

sp_bindefault [ @defname = ] 'default' , 
    [ @objname = ] 'object_name' 
    [ , [ @futureonly = ] 'futureonly_flag' ] 

Arguments

  • [ [ @defname= ] 'default'
    Nom de la valeur par défaut créée par l'instruction CREATE DEFAULT. default est de type nvarchar(776) et n'a pas de valeur par défaut.

  • [ [ @objname= ] 'object_name'
    Nom de la table et de la colonne ou type de données d'alias, auquel est liée la valeur par défaut. object_name est de type nvarchar(776) et n'a pas de valeur par défaut. object_name ne peut pas être défini avec varchar(max), nvarchar(max), varbinary(max), xml ou les types CLR définis par l'utilisateur.

    Si object_name est un nom à une composante, il est résolu en tant que type de données d'alias. S'il s'agit d'un nom à deux ou trois composantes, il est d'abord résolu en tant que table et colonne. Si la résolution échoue, il est résolu en tant que type de données d'alias. Par défaut, les colonnes existantes du type de données d'alias héritent de default, sauf si une valeur par défaut a été liée directement à la colonne. Une valeur par défaut ne peut pas être liée à une colonne de type text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp ou à une colonne de type CLR définie par l'utilisateur, une colonne dont la propriété est IDENTITY, une colonne calculée ou une colonne qui a déjà une contrainte DEFAULT.

    [!REMARQUE]

    object_name peut contenir des crochets [] comme identificateurs délimités. Pour plus d'informations, consultez Identificateurs délimités (Moteur de base de données).

  • [ [ @futureonly= ] 'futureonly_flag'
    S'utilise seulement pour lier une valeur par défaut à un type de données d'alias. L'argument futureonly_flag est de type varchar(15). Sa valeur par défaut est NULL. Lorsque ce paramètre est défini sur futureonly, les colonnes existantes de ce type de données ne peuvent pas hériter la nouvelle valeur par défaut. Il ne s'emploie jamais lors de la liaison d'une valeur par défaut à une colonne. Si futureonly_flag a pour valeur NULL, la nouvelle valeur par défaut est liée à toute colonne du type de données d'alias qui ne possède pas encore de valeur par défaut ou qui utilise la valeur par défaut existante du type de données d'alias.

Valeurs des codes de retour

0 (succès) ou 1 (échec)

Notes

Vous pouvez lier une nouvelle valeur par défaut à une colonne (il est toutefois recommandé d'utiliser une contrainte DEFAULT) ou à un type de données d'alias à l'aide de sp_bindefault sans dissocier de valeur par défaut existante. L'ancienne valeur par défaut est remplacée par la nouvelle. Vous ne pouvez pas lier une valeur par défaut à une type de données système SQL Server ou à un type CLR défini par l'utilisateur. En cas d'incompatibilité entre la valeur par défaut et la colonne à laquelle vous l'avez liée, Moteur de base de données SQL Server retourne un message d'erreur quand il essaie d'insérer la valeur par défaut et non au moment de sa liaison.

Les colonnes existantes qui utilisent le type de données d'alias héritent la nouvelle valeur par défaut, sauf si elles sont liées directement à une valeur par défaut ou si futureonly_flag est défini comme futureonly. Les nouvelles colonnes qui utilisent le type de données d'alias héritent toujours la valeur par défaut.

Lorsque vous liez une valeur par défaut à une colonne, l'information correspondante est ajoutée à la vue de catalogue sys.columns. Lorsque vous liez une valeur par défaut à un type de données d'alias, l'information correspondante est ajoutée à la vue de catalogue sys.types.

Autorisations

L'utilisateur doit posséder la table ou être membre du rôle de serveur fixe sysadmin, ou du rôle de base de données fixe db_owner et db_ddladmin.

Exemples

A. Liaison d'une valeur par défaut à une colonne

Une valeur par défaut nommée today a été définie dans la base de données actuelle par une instruction CREATE DEFAULT, l'exemple suivant lie cette valeur par défaut à la colonne HireDate de la table Employee. Si aucune valeur n'est fournie pour la colonne HireDate lors de l'ajout d'une ligne dans la table Employee, la colonne prend la valeur de today par défaut.

USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';

B. Liaison d'une valeur par défaut à un type de données d'alias

Une valeur par défaut nommée def_ssn et un type de données d'alias nommé ssn existent déjà. L'exemple suivant lie la valeur par défaut def_ssn à ssn. Lors de la création d'une table, toutes les colonnes affectées au type de données d'alias ssn héritent la valeur par défaut. Les colonnes existantes de type ssn héritent également la valeur par défaut def_ssn, sauf si la valeur futureonly_flag est définie comme futureonly, ou si la colonne a déjà une valeur par défaut qui lui est directement liée. Les valeurs par défaut liées aux colonnes ont toujours priorité sur celles liées à des types de données.

USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';

C. Utilisation de l'argument futureonly_flag

L'exemple suivant lie la valeur par défaut def_ssn à un type de données d'alias ssn. Puisque l'option futureonly est spécifiée, aucune colonne existante de type ssn n'est affectée.

USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';

D. Utilisation des identificateurs délimités

Cet exemple montre l'utilisation d'identificateurs délimités dans le paramètre, [t.1], dans object_name.

USE master;
GO
CREATE TABLE [t.1] (c1 int) 
-- Notice the period as part of the table name.
EXEC sp_bindefault 'default1', '[t.1].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.