sp_bindrule (Transact-SQL)
Se aplica a: SQL Server 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 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.