Compartir a través de


sp_bindefault (Transact-SQL)

Enlaza un valor predeterminado con una columna o un tipo de datos de alias.

Nota importanteImportante

Esta característica se quitará en una versión futura de Microsoft SQL Server. No utilice esta característica en nuevos trabajos de desarrollo y modifique lo antes posible las aplicaciones que actualmente la utilizan. Se recomienda crear definiciones predeterminadas mediante la palabra clave DEFAULT de las instrucciones ALTER TABLE o CREATE TABLE. Para obtener más información, vea Crear y modificar definiciones DEFAULT.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • [ [ @defname= ] 'default'
    Es el nombre del valor predeterminado creado por CREATE DEFAULT. default es de tipo nvarchar(776) y no tiene ningún valor predeterminado.

  • [ [ @objname= ] 'object_name'
    Es el nombre de la tabla y la columna o del tipo de datos de alias con el que se enlaza el valor predeterminado. object_name es de tipo nvarchar(776) y no tiene ningún valor predeterminado. object_name no se puede definir con varchar(max), nvarchar(max), varbinary(max), xml o con los tipos definidos por el usuario CLR.

    Si object_name es un nombre de una sola parte, se resuelve como un tipo de datos de alias. Si es un nombre de dos o tres partes, se resuelve primero como una tabla y una columna, y si esta resolución genera un error, se resuelve como un tipo de datos de alias. De forma predeterminada, las columnas existentes del tipo de datos de alias heredan default, a menos que se haya enlazado un valor predeterminado directamente con la columna. No se puede enlazar un valor predeterminado con una columna de tipo text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp o definido por el usuario CLR, una columna con la propiedad IDENTITY, una columna calculada o una columna que ya tenga una restricción DEFAULT.

    Nota

    object_name puede incluir corchetes [] como identificadores delimitados. Para obtener más información, vea Identificadores delimitados (motor de base de datos).

  • [ [ @futureonly= ] 'futureonly_flag'
    Sólo se usa cuando se enlaza un valor predeterminado con un tipo de datos de alias. futureonly_flag es de tipo varchar(15) y su valor predeterminado es NULL. Cuando este parámetro se establece en futureonly, las columnas existentes de ese tipo de datos no pueden heredar el nuevo valor predeterminado. Este parámetro nunca se utiliza al enlazar un valor predeterminado con una columna. Si futureonly_flag es NULL, el nuevo valor predeterminado se enlaza con las columnas del tipo de datos de alias que actualmente no tengan un valor predeterminado o que utilicen el valor predeterminado existente del tipo de datos de alias.

Valores de código de retorno

0 (correcto) o 1 (error)

Comentarios

Puede utilizar sp_bindefault para enlazar un valor predeterminado nuevo con una columna, aunque es preferible utilizar la restricción DEFAULT, o con un tipo de datos de alias sin deshacer el enlace con un valor predeterminado existente. El valor predeterminado anterior se reemplaza. No puede enlazar un valor predeterminado con un tipo de datos del sistema de SQL Server o un tipo definido por el usuario CLR. Si el valor predeterminado no es compatible con la columna con la que se debe enlazar, el SQL Server Database Engine (Motor de base de datos de SQL Server) devuelve un mensaje de error cuando intenta insertar el valor predeterminado y no cuando lo enlaza.

Las columnas existentes del tipo de datos de alias heredan el nuevo valor predeterminado a menos que tengan un valor predeterminado enlazado directamente o que se especifique futureonly_flag como futureonly. Las nuevas columnas del tipo de datos de alias siempre heredan el valor predeterminado.

Al enlazar un valor predeterminado con una columna, la información relacionada se agrega a la vista de catálogo sys.columns. Al enlazar un valor predeterminado con un tipo de datos de alias, la información relacionada se agrega a la vista de catálogo sys.types.

Permisos

El usuario debe ser propietario de la tabla o ser un miembro de la función fija de servidor sysadmin o de las funciones fijas de base de datos db_owner y db_ddladmin.

Ejemplos

A. Enlazar un valor predeterminado con una columna

Se ha definido un valor predeterminado denominado today en la base de datos actual mediante CREATE DEFAULT y en el siguiente ejemplo se enlaza el valor predeterminado con la columna HireDate de la tabla Employee. Cuando se agregue una fila a la tabla Employee y no se proporcionen datos para la columna HireDate, dicha columna obtiene el valor predeterminado today.

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

B. Enlazar un valor predeterminado con un tipo de datos de alias

El valor predeterminado denominado def_ssn y el tipo de datos de alias denominado ssn ya existen. En el siguiente ejemplo se enlaza el valor predeterminado def_ssn con ssn. Al crear una tabla, el valor predeterminado es heredado por todas las columnas a las que se asigna el tipo de datos de alias ssn. Las columnas existentes del tipo ssn también heredan el valor predeterminado def_ssn a menos que se especifique futureonly para el valor futureonly_flag o que la columna tenga un valor predeterminado enlazado directamente. Los valores predeterminados enlazados con columnas siempre tienen preferencia sobre los enlazados con tipos de datos.

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

C. Utilizar futureonly_flag

En el siguiente ejemplo se enlaza el valor predeterminado def_ssn con el tipo de datos de alias ssn. Dado que se especifica futureonly, esto no afecta a las columnas existentes de tipo ssn.

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

D. Utilizar identificadores delimitados

En el siguiente ejemplo se muestra el uso de identificadores delimitados, [t.1], en 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.