CREATE RULE (Transact-SQL)

Cria um objeto chamado regra. Quando associada a uma coluna ou a um tipo de dados de alias, a regra especifica os valores aceitáveis que podem ser inseridos naquela coluna.

Observação importanteImportante

Esse recurso será removido em uma versão futura do Microsoft SQL Server. Evite usar esse recurso em desenvolvimentos novos e planeje modificar os aplicativos que atualmente o utilizam. Recomenda-se o uso de restrições de verificação. As restrições de verificação são criadas pelo uso da palavra-chave CHECK de CREATE TABLE ou ALTER TABLE. Para obter mais informações, consulte Restrições CHECK.

Uma coluna ou tipo de dados de alias só pode ter uma regra associada. No entanto, uma coluna pode ter uma regra e uma ou mais restrições de verificação associadas. Quando isso ocorrer, todas as restrições serão avaliadas.

Ícone de vínculo de tópicoConvenções de sintaxe Transact-SQL

Sintaxe

CREATE RULE [ schema_name . ] rule_name 
AS condition_expression
[ ; ]

Argumentos

  • schema_name
    É o nome do esquema ao qual a regra pertence.

  • rule_name
    É o nome da nova regra. Nomes de regras precisam ser compatíveis com as regras para identificadores. A especificação do nome do proprietário da regra é opcional.

  • condition_expression
    É a condição ou condições que definem a regra. Uma regra pode ser qualquer expressão válida em uma cláusula WHERE e pode incluir elementos, como operadores aritméticos, operadores relacionais e predicados (por exemplo, IN, LIKE, BETWEEN). Uma regra não pode fazer referência a colunas ou a outros objetos de banco de dados. É possível incluir funções internas que não fazem referência a objetos de banco de dados. As funções definidas pelo usuário não podem ser usadas.

    condition_expression inclui uma variável. O sinal de arroba (@) precede cada uma das variáveis locais. A expressão se refere ao valor digitado com a instrução UPDATE ou INSERT. Qualquer nome ou símbolo pode ser usado para representar o valor durante a criação da regra. No entanto, o primeiro caractere precisa ser o sinal de arroba (@).

    ObservaçãoObservação

    Evite criar regras em expressões que usam tipos de dados de alias. Embora as regras possam ser criadas em expressões que usam tipos de dados de alias, após associar as regras a tipos de dados de colunas ou de alias, as expressões falham ao compilar quando referenciadas.

Comentários

CREATE RULE não pode ser combinada com outras instruções Transact-SQL em um único lote. As regras não se aplicam a dados já existentes no banco de dados no momento da criação das regras, e as regras não podem ser associadas a tipos de dados do sistema. Para obter mais informações, consulte Tipos de dados (Mecanismo de Banco de Dados).

A regra só pode ser criada no banco de dados atual. Depois da criação da regra, execute sp_bindrule para associá-la ao tipo de dados de coluna ou de alias. A regra deve ser compatível com o tipo de dados de coluna. Por exemplo, "@value LIKE A% " não pode ser usado como regra para uma coluna numérica. A regra não pode ser associada a uma coluna text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, tipo CLR definido pelo usuário ou timestamp. A regra não pode ser associada a uma coluna computada.

Inclua as constantes de caractere e data entre aspas ('), precedendo as constantes binárias com 0x. Se a regra não for compatível com a coluna à qual está associada, o Mecanismo de banco de dados do SQL Server retornará uma mensagem de erro quando o valor for inserido, mas não quando a regra for associada.

Uma regra associada a um tipo de dados de alias é ativada apenas quando se tenta inserir um valor em, ou atualizar, uma coluna de banco de dados do tipo de dados de alias. Como as regras não testam variáveis, não atribua um valor a uma variável do tipo de dados de alias que possa ser rejeitada por uma regra associada à coluna do mesmo tipo de dados.

Para obter um relatório em uma regra, use sp_help. Para exibir o texto de uma regra, execute sp_helptext com o nome da regra como o parâmetro. Para renomear uma regra, use sp_rename.

Uma regra deve ser descartada pelo uso de DROP RULE antes que uma nova, com o mesmo nome, seja criada, e a regra deve ser não associada pelo uso de sp_unbindrule antes de ser descartada. Para desassociar uma regra de uma coluna, use sp_unbindrule.

Você pode associar uma nova regra a uma coluna ou tipo de dados sem desassociar a anterior; a nova regra substitui a anterior. As regras associadas a colunas sempre têm precedência a regras associadas a tipos de dados de alias. A associação de uma regra a uma coluna substitui a regra já associada ao tipo de dados de alias daquela coluna. Mas a associação de uma regra a um tipo de dados não substitui a regra associada à coluna daquele tipo de dados de alias. A tabela a seguir mostra a precedência em vigor quando as regras são associadas a colunas e a tipos de dados de alias nos quais já existem regras.

Nova regra associada a

Regra antiga associada a

tipo de dados de alias

Regra antiga associada a

Coluna

Tipo de dados de alias

Regra antiga substituída

Nenhuma alteração

Coluna

Regra antiga substituída

Regra antiga substituída

Se uma coluna tiver um padrão e uma regra associados, o padrão deverá se encaixar no domínio definido pela regra. Um padrão em conflito com uma regra nunca é inserido. O Mecanismo de Banco de Dados do SQL Server gera uma mensagem de erro toda vez que tenta inserir um padrão assim.

Permissões

Para executar CREATE RULE, no mínimo, um usuário deve ter a permissão CREATE RULE no banco de dados atual e a permissão ALTER no esquema em que a regra está sendo criada.

Exemplos

A. Criando uma regra com um intervalo

O exemplo a seguir cria uma regra que restringe o intervalo de inteiros inserido na coluna ou colunas às quais essa regra está associada.

CREATE RULE range_rule
AS 
@range>= $1000 AND @range <$20000;

B. Criando uma regra com uma lista

O exemplo a seguir cria uma regra que restringe os valores reais digitados na coluna ou colunas (às quais essa regra está associada) somente para aqueles listados na regra.

CREATE RULE list_rule
AS 
@list IN ('1389', '0736', '0877');

A. Criar uma regra com um padrão

O exemplo a seguir cria uma regra para seguir o padrão de quaisquer dois caracteres seguidos de um hífen (-), qualquer número de caracteres ou nenhum caractere, e que termina com um número inteiro de 0 a 9.

CREATE RULE pattern_rule 
AS
@value LIKE '__-%[0-9]'