Condividi tramite


CREATE RULE (Transact-SQL)

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.

ms188064.note(it-it,SQL.90).gifImportante:
L'istruzione CREATE RULE verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare CREATE RULE in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni che attualmente la utilizzano. È consigliabile utilizzare in alternativa vincoli CHECK, che vengono creati tramite la parola chiave CHECK dell'istruzione CREATE TABLE o ALTER TABLE. Per ulteriori informazioni, vedere Vincoli CHECK.

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 argomentoConvenzioni della sintassi Transact-SQL

Sintassi

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

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 utilizzare 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. Per ulteriori informazioni, vedere Tipi di dati (Motore di database).

È 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. Non è possibile associare una regola a una colonna di tipo text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, di tipo CLR definito dall'utente o timestamp né a una colonna calcolata.

Racchiudere le costanti per valori di carattere e di data tra virgolette singole (') e far precedere le costanti binarie da 0x. Se la regola non è compatibile con la colonna a cui è associata, viene visualizzato 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, utilizzare sp_help. Per visualizzare il testo di una regola, eseguire sp_helptext specificando il nome della regola come parametro. Per rinominare una regola, utilizzare sp_rename.

Per creare una nuova regola con lo stesso nome di una già esistente, è prima necessario eliminare la regola esistente tramite DROP RULE dopo averla disassociata con sp_unbindrule. Per disassociare una regola da una colonna, utilizzare 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.

[!NOTA] L'impostazione del livello di compatibilità determina se una stringa vuota viene interpretata dal Motore di database come un singolo spazio o come una reale stringa vuota. Se il livello di compatibilità è minore o uguale a 65, le stringhe vuote vengono interpretate dal Motore di database come singoli spazi. Se il livello di compatibilità è uguale a 70, le stringhe vuote vengono interpretate dal Motore di database come reali stringhe vuote. Per ulteriori informazioni, vedere sp_dbcmptlevel (Transact-SQL).

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

A. Creazione di una regola con un intervallo

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

CREATE RULE range_ruleAS @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_ruleAS @list IN ('1389', '0736', '0877');

A. 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 integer compreso tra 0 e 9.

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

Vedere anche

Riferimento

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)

Altre risorse

Batch
Utilizzo degli identificatori come nomi di oggetti

Guida in linea e informazioni

Assistenza su SQL Server 2005