CREATE RULE (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate)

Crea un oggetto denominato regola. Quando una regola viene associata a una colonna o a un tipo di dati alias, specifica i valori che è possibile inserire in tale colonna.

Importante

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È consigliabile utilizzare in alternativa i vincoli CHECK, che vengono creati tramite la parola chiave CHECK dell'istruzione CREATE TABLE o ALTER TABLE. Per altre informazioni, vedere Unique Constraints and Check Constraints.

A una colonna o un tipo di dati alias è possibile associare una sola regola. È tuttavia possibile associare a una colonna sia una regola che uno o più vincoli CHECK. In tal caso, vengono valutate tutte le restrizioni.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

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

Nota

Per visualizzare la sintassi Transact-SQL per SQL Server 2014 e versioni precedenti, vedere Documentazione delle versioni precedenti.

Argomenti

schema_name
Nome dello schema a cui appartiene la regola.

rule_name
Nome della nuova regola. I nomi di regola devono essere conformi alle regole per gli identificatori. Il nome del proprietario della regola è facoltativo.

condition_expression
Una o più condizioni che definiscono la regola. Una regola può essere qualsiasi espressione valida in una clausola WHERE e può includere elementi quali operatori aritmetici o relazionali e predicati, ad esempio IN, LIKE, BETWEEN. Una regola non può fare riferimento a colonne o ad altri oggetti di database. È possibile includere funzioni predefinite che non fanno riferimento a oggetti di database. Non è possibile utilizzare funzioni definite dall'utente.

condition_expression include una variabile. Il nome di ogni variabile locale inizia con il simbolo di chiocciola ( @ ). L'espressione fa riferimento al valore immesso con l'istruzione UPDATE o INSERT. Quando si crea la regola è possibile usare qualsiasi nome o simbolo per rappresentare il valore, ma il primo carattere deve essere il simbolo di chiocciola ( @ ).

Nota

Evitare di creare regole in espressioni che utilizzano tipi di dati alias. Sebbene sia possibile creare regole in espressioni che utilizzano questi tipi di dati, dopo l'associazione delle regole a colonne o tipi di dati alias, la compilazione dell'espressione ha esito negativo quando vi viene fatto riferimento.

Osservazioni

L'istruzione CREATE RULE non può essere utilizzata in combinazione con altre istruzioni Transact-SQL all'interno di un singolo batch. Le regole non vengono applicate ai dati già esistenti nel database quando vengono create e non possono essere associate a tipi di dati di sistema.

È possibile creare una regola solo nel database corrente. Dopo avere creato una regola, eseguire sp_bindrule per associarla a una colonna o un tipo di dati alias. La regola deve essere compatibile con il tipo di dati della colonna. Ad esempio, non è possibile utilizzare "@value LIKE A%" come regola per una colonna numerica. Una regola non può essere associata a una colonna text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, di tipo CLR definito dall'utente o timestamp, né a una colonna calcolata.

Delimitare le costanti per valori di carattere e di data con virgolette singole (') e anteporre 0x alle costanti binarie. Se la regola non è compatibile con la colonna a cui è associata, Motore di database di SQL Server restituisce un messaggio di errore quando si immette un valore, non durante l'associazione della regola.

Una regola associata a un tipo di dati alias viene attivata solo quando si tenta di aggiornare o immettere un valore in una colonna del database con il tipo di dati alias. Poiché le regole non impongono controlli sulle variabili, non assegnare alle variabili con un tipo di dati alias un valore che non verrebbe accettato da una regola associata a una colonna dello stesso tipo.

Per visualizzare un report su una regola, usare sp_help. Per visualizzare il testo di una regola, eseguire sp_helptext specificando il nome della regola come parametro. Per rinominare una regola, usare sp_rename.

Per creare una nuova regola con lo stesso nome di una già esistente, è in primo luogo necessario eliminare la regola esistente tramite DROP RULE dopo averla disassociata con sp_unbindrule. Per disassociare una regola da una colonna, usare sp_unbindrule.

È possibile associare una nuova regola a una colonna o a un tipo di dati senza disassociare la regola precedente. In tal caso, la nuova regola risulta prioritaria rispetto alla regola precedente. Le regole associate a colonne sono sempre prioritarie rispetto a quelle associate a tipi di dati alias. L'associazione di una regola a una colonna comporta la sostituzione di una regola già associata al tipo di dati alias della colonna. L'associazione di una regola a un tipo di dati, al contrario, non comporta la sostituzione di una regola associata a una colonna con tale tipo di dati alias. Nella tabella seguente vengono descritti i criteri di precedenza applicati quando vengono associate regole a colonne e tipi di dati alias per cui esistono già altre regole.

Nuova regola associata a Regola esistente associata a

tipo di dati alias
Regola esistente associata a

Colonna
Tipo di dati alias Sostituzione della regola esistente Nessuna modifica
Colonna Sostituzione della regola esistente Sostituzione della regola esistente

Se a una colonna sono associati sia un valore predefinito che una regola, il valore predefinito deve essere compreso nel dominio definito dalla regola. Un valore predefinito in conflitto con una regola non viene immesso. Ogni tentativo di immettere un valore predefinito di questo tipo causa la visualizzazione di un messaggio di errore.

Autorizzazioni

Per eseguire l'istruzione CREATE RULE, è necessario disporre almeno dell'autorizzazione CREATE RULE per il database corrente e dell'autorizzazione ALTER per lo schema in cui la regola viene creata.

Esempi

R. Creazione di una regola con un intervallo

Nell'esempio seguente viene creata una regola che limita l'intervallo di valori interi immessi nella colonna o nelle colonne a cui la regola è associata.

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

B. Creazione di una regola con un elenco

Nell'esempio seguente viene creata una regola che limita ai soli valori in essa elencati i valori effettivi immessi nella colonna o nelle colonne a cui la regola è associata.

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

C. Creazione di una regola basata su un modello

Nell'esempio seguente viene creata una regola basata su un modello composto da due caratteri seguiti da un segno meno (-), quindi da qualsiasi numero di caratteri o da nessun carattere e infine da un valore intero compreso tra 0 e 9.

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

Vedere anche

ALTER TABLE (Transact-SQL)
CREATE DEFAULT (Transact-SQL)
CREATE TABLE (Transact-SQL)
DROP DEFAULT (Transact-SQL)
DROP RULE (Transact-SQL)
Espressioni (Transact-SQL)
sp_bindrule (Transact-SQL)
sp_help (Transact-SQL)
sp_helptext (Transact-SQL)
sp_rename (Transact-SQL)
sp_unbindrule (Transact-SQL)
WHERE (Transact-SQL)