sp_bindrule (Transact-SQL)
Associa uma regra a uma coluna ou a um tipo de dados de alias.
Importante |
---|
Esse recurso será removido em uma versão futura do Microsoft SQL Server. Não utilize esse recurso em desenvolvimentos novos e modifique, assim que possível, os aplicativos que atualmente o utilizam. Usa restrições CHECK. As restrições CHECK são criadas pelo uso da palavra-chave CHECK das instruções CREATE TABLE ou ALTER TABLE. |
Sintaxe
sp_bindrule [ @rulename = ] 'rule' ,
[ @objname = ] 'object_name'
[ , [ @futureonly = ] 'futureonly_flag' ]
Argumentos
[ [ @rulename=] 'rule'
É o nome de uma regra criada pela instrução CREATE RULE. rule é nvarchar(776), sem padrão.[ [ @objname=] 'object_name'
É a tabela e a coluna ou o tipo de dados de alias aos quais a regra será associada. A regra não pode ser associada a uma coluna text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, tipo de dado CLR definido pelo usuário ou timestamp. A regra não pode ser associada a uma coluna computada.object_name é nvarchar(776) sem padrão. Se object_name for um nome composto de uma parte, ele será resolvido como um tipo de dados de alias. Se for um nome composto de duas ou três partes, primeiro será resolvido como uma tabela e coluna e, se essa resolução falhar, será resolvido como um tipo de dados de alias. Por padrão, as colunas existentes do tipo de dados de alias herdam rule, a menos que uma regra seja associada diretamente à coluna.
Observação object_name podem conter os caracteres de colchetes [ e ] como caracteres de identificadores delimitados. Para obter mais informações, consulte Identificadores delimitados (Mecanismo de Banco de Dados).
Observação As regras criadas em expressões que usam tipos de dados de alias podem ser associadas colunas ou a tipos de dados de alias, mas falham ao compilar quando são referenciadas. Evite usar regras criadas em tipos de dados de alias.
[ [ @futureonly= ] 'futureonly_flag'
É usado apenas ao associar uma regra a um tipo de dados de alias. future_only_flag é varchar(15) com um padrão NULL. Esse parâmetro, quando definido como futureonly, evita que as colunas existentes de um tipo de dados de alias herdem a nova regra. Se futureonly_flag for NULL, a nova regra será associada a quaisquer colunas do tipo de dados de alias que atualmente não tenham regra ou que estejam usando a regra existente do tipo de dados de alias.
Valores de código de retorno
0 (êxito) ou 1 (falha)
Comentários
É possível associar uma nova regra a uma coluna (embora seja preferível usar uma restrição CHECK) ou um tipo de dados de alias com sp_bindrule sem desassociar a regra existente. A regra antiga é substituída. Se uma regra for associada a uma coluna com uma restrição CHECK existente, todas as restrições serão avaliadas. Não é possível associar uma regra a um tipo de dados do SQL Server.
A regra é imposta quando uma instrução INSERT é usada, mas não na associação. Você pode associar uma regra de caractere a uma coluna de tipo de dados numeric, embora essa operação INSERT não seja válida.
As colunas existentes do tipo de dados de alias herdam a regra nova a menos que futureonly_flag seja especificado como futureonly. As novas colunas definidas com o tipo de dados de alias sempre herdam a regra. Entretanto, se a cláusula ALTER COLUMN de uma instrução ALTER TABLE alterar o tipo de dados de uma coluna para um tipo de dados de alias associado a uma regra, a regra associada ao tipo de dados não será herdada pela coluna. A regra deve ser associada especificamente à coluna usando sp_bindrule.
Quando você associa uma regra a uma coluna, as informações relacionadas são adicionadas à tabela sys.columns. Quando associa uma regra a um tipo de dados de alias, as informações relacionadas são adicionadas à tabela sys.types.
Permissões
Para associar uma regra a uma coluna de tabela, você deve ter a permissão ALTER na tabela. É necessário ter a permissão CONTROL no tipo de dados de alias ou a permissão ALTER no esquema ao qual o tipo pertence para associar uma regra a um tipo de dados de alias.
Exemplos
A. Associando uma regra a uma coluna
Supondo que uma regra chamada today tenha sido criada no banco de dados atual usando a instrução CREATE RULE, o exemplo a seguir associa a regra à coluna HireDate da tabela Employee. Quando uma linha é acrescentada a Employee, os dados para a coluna HireDate são verificados em relação à regra today.
USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate'
B. Associando uma regra a um tipo de dados de alias
Supondo a existência de uma regra chamada rule_ssn e um tipo de dados de alias chamado ssn, o exemplo a seguir associa rule_ssn a ssn. Em uma instrução CREATE TABLE, as colunas de tipo ssn herdam a regra rule_ssn. As colunas existentes do tipo ssn também herdam a regra rule_ssn, a menos que futureonly seja especificado para futureonly_flag ou ssn tenha uma regra associada diretamente a ela. As regras associadas a colunas sempre têm precedência sobre as associadas aos tipos de dados.
USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn'
C. Usando futureonly_flag
O exemplo a seguir associa a regra rule_ssn ao tipo de dados de alias ssn. Como futureonly foi especificado, nenhuma coluna existente do tipo ssn será afetada.
USE master;
GO
EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly'
D. Usando identificadores delimitados
O exemplo a seguir mostra o uso de identificadores delimitados no 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.