sp_bindrule (Transact-SQL)

Se aplica a: síSQL Server (todas las versiones admitidas) SíAzure SQL Database

Enlaza una regla a una columna o a un tipo de datos de alias.

Importante

Esta característica se quitará en una versión futura de Microsoft SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Userestricciones unique y restricciones CHECK en su lugar. Las restricciones CHECK se crean mediante la palabra clave CHECK de las instrucciones CREATE TABLE o ALTER TABLE.

Icono de vínculo de tema Convenciones de sintaxis de Transact-SQL

Sintaxis

  
sp_bindrule [ @rulename = ] 'rule' ,   
     [ @objname = ] 'object_name'   
     [ , [ @futureonly = ] 'futureonly_flag' ]   

Argumentos

[ @rulename = ] 'rule' Es el nombre de una regla creada por la instrucción CREATE RULE. rule es nvarchar(776), sin ningún valor predeterminado.

[ @objname = ] 'object_name' Es la tabla y columna, o el tipo de datos de alias al que se va a enlazar la regla. Una regla no se puede enlazar a una columna text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, de tipo definido por el usuario CLR o timestamp. Una regla no se puede enlazar a una columna calculada.

object_name es nvarchar(776) sin ningún valor predeterminado. Si object_name es un nombre de una 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 la regla a menos que una regla se haya enlazado directamente a la columna.

Nota

object_name puede contener los caracteres de corchete [ y ] como caracteres de identificador delimitados. Para obtener más información, vea Database Identifiers.

Nota

Las reglas creadas a partir de expresiones que utilizan tipos de datos de alias pueden enlazarse a columnas o tipos de datos de alias, pero no se compilan cuando se hace referencia a ellos. Evite el uso de reglas creadas a partir de tipos de datos de alias.

[ @futureonly = ] 'futureonly_flag' Solo se usa al enlazar una regla a un tipo de datos de alias. future_only_flag es varchar(15) con un valor predeterminado de NULL. Este parámetro cuando se establece en futureonly impide que las columnas existentes de un tipo de datos de alias hereden la nueva regla. Si futureonly_flag es NULL, la nueva regla se enlaza a cualquier columna del tipo de datos de alias que actualmente no tenga ninguna regla o que use la regla existente del tipo de datos de alias.

Valores de código de retorno

0 (correcto) o 1 (error)

Observaciones

Puede enlazar una nueva regla a una columna (aunque se prefiere usar una restricción CHECK) o a un tipo de datos de alias con sp_bindrule sin desenlace de una regla existente. Se reemplaza la regla anterior. Si se enlaza una regla a una columna con una restricción CHECK existente, se evalúan todas las restricciones. No se puede enlazar una regla a un tipo de datos de SQL Server.

La regla se aplica cuando se intenta ejecutar una instrucción INSERT, no en la operación de enlace. Puede enlazar una regla de caracteres a una columna de tipo de datos numéricos, aunque esta operación INSERT no es válida.

Las columnas existentes del tipo de datos de alias heredan la nueva regla a menos futureonly_flag se especifique como futureonly. Las nuevas columnas definidas con el tipo de datos de alias siempre heredan la regla. Sin embargo, si la cláusula ALTER COLUMN de una instrucción ALTER TABLE cambia el tipo de datos de una columna a un tipo de datos de alias enlazado a una regla, la columna no hereda la regla enlazada al tipo de datos. La regla debe enlazarse específicamente a la columna mediante sp_bindrule.

Al enlazar una regla a una columna, se agrega información relacionada a la tabla sys.columns. Al enlazar una regla a un tipo de datos de alias, se agrega información relacionada a la tabla sys.types.

Permisos

Para enlazar una regla a una columna de una tabla, se debe tener el permiso ALTER en la tabla. Se requiere el permiso CONTROL en el tipo de datos de alias, o el permiso ALTER en el esquema al que pertenece el tipo, para enlazar una regla a un tipo de datos de alias.

Ejemplos

A. Enlazar una regla a una columna

Partiendo de la base de que se ha creado una regla denominada today en la base de datos actual mediante la instrucción CREATE RULE, este ejemplo enlaza la regla a la columna HireDate de la tabla Employee. Cuando se agrega una fila a Employee, los datos de la columna HireDate se comprueban con la regla today.

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

B. Enlazar una regla a un tipo de datos de alias

Suponiendo que existe una regla denominada rule_ssn y un tipo de datos de alias denominado ssn, este ejemplo enlaza rule_ssn a ssn. En una instrucción CREATE TABLE, las columnas del tipo ssn heredan la regla rule_ssn. Las columnas existentes de tipo también heredan la regla, a menos que se especifique futureonly para futureonly_flag o que tenga una ssn rule_ssn regla enlazada directamente a ssn ella. Las reglas enlazadas a columnas siempre tienen prioridad sobre las enlazadas a tipos de datos.

USE master;  
GO  
EXEC sp_bindrule 'rule_ssn', 'ssn';  

C. Uso del futureonly_flag

En el ejemplo siguiente se enlaza la regla rule_ssn al 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_bindrule rule_ssn, 'ssn', 'futureonly';  

D. Uso de identificadores delimitados

En el ejemplo siguiente se muestra el uso de identificadores delimitados en object_name parámetro .

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.  

Consulte también

Procedimientos almacenados del sistema (Transact-SQL)
Motor de base de datos Procedimientos almacenados (Transact-SQL)
CREATE RULE (Transact-SQL)
DROP RULE (Transact-SQL)
sp_unbindrule (Transact-SQL)
Procedimientos almacenados del sistema (Transact-SQL)