Compartir a través de


sp_bindrule (Transact-SQL)

Enlaza una regla a una columna o a 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. En su lugar, utilice restricciones CHECK. Las restricciones CHECK se crean utilizando la palabra clave CHECK de las instrucciones CREATE TABLE o ALTER TABLE.

Icono de vínculo a temasConvenciones 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 con la instrucción CREATE RULE. rule es de tipo nvarchar(776) y no tiene valor predeterminado.

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

    object_name es de tipo nvarchar(776), sin valor predeterminado. 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 rule, a menos que se haya enlazado una regla directamente con la columna.

    Nota

    object_name puede contener corchetes ([ y ]) como caracteres de identificador delimitado. Para obtener más información, vea Identificadores delimitados (motor de base de datos).

    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'
    Sólo se usa cuando se enlaza una regla a un tipo de datos de alias. future_only_flag es de tipo varchar(15) y su valor predeterminado es NULL. Cuando este parámetro 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 con las columnas del tipo de datos de alias que actualmente no tengan regla o utilicen la regla existente del tipo de datos de alias.

Valores de código de retorno

0 (correcto) o 1 (error)

Comentarios

Con sp_bindrule, se puede enlazar una nueva regla a una columna (aunque se prefiere la utilización de una restricción CHECK) o a un tipo de datos de alias sin desenlazar 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. Es posible enlazar una regla de caracteres a una columna del tipo de datos numeric, aunque la operación INSERT no es válida.

Las columnas existentes del tipo de datos de alias heredan la nueva regla a menos que 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. Será necesario enlazar la regla a la columna específicamente, mediante sp_bindrule.

Al enlazar una regla a una columna, la información relacionada se agrega a la tabla sys.columns. Al enlazar una regla a un tipo de datos de alias, la información relacionada se agrega 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 del tipo ssn también heredan la regla rule_ssn, a menos que se especifique futureonly para futureonly_flag o que ssn tenga una regla enlazada directamente. 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. Usar 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. Usar identificadores delimitados

En el siguiente ejemplo se muestra el uso de identificadores delimitados en el parámetro 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.