sp_bindefault (Transact-SQL)
Se aplica a: SQL Server
Azure SQL Database
Azure SQL Instancia administrada
Enlaza un valor predeterminado con una columna o un tipo de datos de alias.
Importante
Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Se recomienda crear definiciones predeterminadas mediante la palabra clave DEFAULT de las instrucciones ALTER TABLE o CREATE TABLE en su lugar.
Convenciones de sintaxis de Transact-SQL
Sintaxis
sp_bindefault
[ @defname = ] N'defname'
, [ @objname = ] N'objname'
[ , [ @futureonly = ] 'futureonly' ]
[ ; ]
Argumentos
[ @defname = ] N'defname'
Nombre del valor predeterminado creado por CREATE DEFAULT
. @defname es nvarchar(776), sin ningún valor predeterminado.
[ @objname = ] N'objname'
El nombre de la tabla y la columna, o el tipo de datos de alias, al que se va a enlazar el valor predeterminado. @objname es nvarchar(776), sin ningún valor predeterminado. @objname no se pueden definir con tipos definidos por el usuario varchar(max),nvarchar(max), varbinary(max), xml o CLR definidos por el usuario.
Si @objname es un nombre de una parte, se resuelve como un tipo de datos de alias. Si es un nombre de dos o tres partes, primero se resuelve como una tabla y columna; y si se produce un error en esta resolución, se resuelve como un tipo de datos de alias. De forma predeterminada, las columnas existentes del tipo de datos alias heredan @defname, a menos que un valor predeterminado esté enlazado directamente a la columna. Un valor predeterminado no se puede enlazar a una columna de tipo text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp o CLR definido por el usuario, una columna con la IDENTITY
propiedad , una columna calculada o una columna que ya tiene una DEFAULT
restricción.
@objname puede contener corchetes ([
y ]
) como identificadores delimitados. Para obtener más información, consulte Identificadores de base de datos.
[ @futureonly = ] 'futureonly'
Solo se usa al enlazar un valor predeterminado a un tipo de datos de alias. @futureonly es varchar(15), con un valor predeterminado de NULL
. Cuando este parámetro se establece futureonly
en , 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 es NULL
, el nuevo valor predeterminado se enlaza a las columnas del tipo de datos de alias que no tienen actualmente ningún valor predeterminado o que usan el valor predeterminado existente del tipo de datos de alias.
Valores de código de retorno
0
(correcto) o 1
(erróneo).
Comentarios
Puede usar sp_bindefault
para enlazar un nuevo valor predeterminado a una columna, aunque se prefiere usar la DEFAULT
restricción o para un tipo de datos de alias sin desenlace de un valor predeterminado existente. El valor predeterminado anterior se reemplaza. No se puede enlazar un valor predeterminado a un tipo de datos del sistema de SQL Server o a un tipo definido por el usuario CLR. Si el valor predeterminado no es compatible con la columna a la que se ha enlazado, sql Server Motor de base de datos devuelve un mensaje de error cuando intenta insertar el valor predeterminado, no al enlazarlo.
Las columnas existentes del tipo de datos alias heredan el nuevo valor predeterminado, a menos que un valor predeterminado esté enlazado directamente a ellos o se especifique de forma futura como futureonly
. Las nuevas columnas del tipo de datos de alias siempre heredan el valor predeterminado.
Al enlazar un valor predeterminado a una columna, se agrega información relacionada a la vista de sys.columns
catálogo. Al enlazar un valor predeterminado a un tipo de datos de alias, se agrega información relacionada a la vista de sys.types
catálogo.
Permisos
El usuario debe ser propietario de la tabla, o ser miembro del rol fijo de servidor sysadmin , o el db_owner y db_ddladmin roles fijos de base de datos.
Ejemplos
A Enlazar un valor predeterminado a una columna
Un nombre today
predeterminado se define en la base de datos actual mediante CREATE DEFAULT
. En el ejemplo siguiente se enlaza el valor predeterminado a la HireDate
columna de la Employee
tabla. Cada vez que se agrega una fila a la Employee
tabla y los datos de la HireDate
columna no se proporciona, la columna obtiene el valor del valor predeterminado today
.
USE master;
GO
EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';
B. Enlazar un valor predeterminado a 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 de tipo ssn
también heredan el valor predeterminado def_ssn
, a menos futureonly
que se especifique para el valor de @futureonly o la columna tenga un enlazado predeterminado directamente a él. Los valores predeterminados enlazados a columnas siempre tienen prioridad sobre los valores predeterminados enlazados a los tipos de datos.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';
C. Use la opción futureonly
.
En el siguiente ejemplo se enlaza el valor predeterminado def_ssn
con el tipo de datos de alias ssn
. Como se especifica futureonly
, esto no afecta a ninguna de las columnas existentes de tipo ssn
.
USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn', 'futureonly';
D. Uso de identificadores delimitados
En el ejemplo siguiente se muestra el uso de identificadores delimitados, [t.1]
, en @objname.
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.