Compartir a través de


sp_bindrule (Transact-SQL)

Se aplica a: SQL ServerAzure 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 SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Use restricciones Unique y compruebe las restricciones en su lugar. Las restricciones CHECK se crean mediante la palabra clave CHECK de las instrucciones CREATE TABLE o ALTER TABLE .

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_bindrule
    [ @rulename = ] N'rulename'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

Argumentos

[ @rulename = ] N'rulename'

Nombre de una regla creada por la CREATE RULE instrucción . @rulename es nvarchar(776), sin ningún valor predeterminado.

[ @objname = ] N'objname'

La tabla y la columna, o el tipo de datos de alias al que se va a enlazar la regla. @objname es nvarchar(776), sin ningún valor predeterminado.

Una regla no se puede enlazar a una columna text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR user-defined type o timestamp. Una regla no se puede enlazar a una columna calculada.

@objname es nvarchar(776) sin valor predeterminado. 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; 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 @rulename a menos que una regla esté enlazada directamente a la columna.

@objname puede contener los caracteres corchetes ([ y ]) como caracteres de identificador delimitados. Para obtener más información, consulte Identificadores de base de datos.

Las reglas creadas en expresiones que usan tipos de datos de alias se pueden enlazar a columnas o tipos de datos de alias, pero no se pueden compilar cuando se hace referencia a ellos. Evite el uso de reglas creadas a partir de tipos de datos de alias.

[ @futureonly = ] 'futureonly'

Solo se usa al enlazar una regla a un tipo de datos de alias. @futureonly 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 es NULL, la nueva regla se enlaza a las columnas del tipo de datos de alias que no tienen actualmente ninguna regla o que usan la regla existente del tipo de datos de alias.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Comentarios

Puede enlazar una nueva regla a una columna (aunque se prefiere usar una restricción) o a un CHECK tipo de datos de alias con sp_bindrule sin enlazar una regla existente. Se reemplaza la regla anterior. Si una regla está enlazada a una columna con una restricción existente CHECK , 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 una INSERT instrucción, no en el enlace. Puede enlazar una regla de caracteres a una columna de tipo de datos numérico , aunque esta INSERT operación no es válida.

Las columnas existentes del tipo de datos alias heredan la nueva regla a menos que se especifique @futureonly como futureonly. Las nuevas columnas definidas con el tipo de datos de alias siempre heredan la regla. Sin embargo, si la ALTER COLUMN cláusula de una ALTER TABLE instrucción cambia el tipo de datos de una columna a un tipo de datos de alias enlazado a una regla, la regla enlazada al tipo de datos no la hereda la columna. 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 sys.columns tabla. Al enlazar una regla a un tipo de datos de alias, se agrega información relacionada a la sys.types tabla.

Permisos

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

Ejemplos

A Enlazar una regla a una columna

Suponiendo que se crea una regla denominada today en la base de datos actual mediante la instrucción , en el CREATE RULE ejemplo siguiente se enlaza la regla a la HireDate columna de la Employee tabla. 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 CREATE TABLE instrucción , las columnas de tipo ssn heredan la rule_ssn regla. Las columnas existentes de tipo ssn también heredan la rule_ssn regla, a menos que se especifique de forma futura para @futureonly o ssn que tenga una regla enlazada directamente a ella. Las reglas enlazadas a columnas siempre tienen prioridad sobre los valores predeterminados enlazados a los tipos de datos.

USE master;
GO

EXEC sp_bindrule 'rule_ssn', 'ssn';

C. Use la opción futureonly.

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 @objname 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.