sp_bindrule (Transact-SQL)

Associa una regola a una colonna o a un tipo di dati alias.

Nota importanteImportante

Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Non utilizzare questa caratteristica in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui è attualmente implementata. Utilizzare in alternativa i vincoli CHECK. I vincoli CHECK vengono creati utilizzando la parola chiave CHECK delle istruzioni CREATE TABLE o ALTER TABLE.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_bindrule [ @rulename = ] 'rule' , 
     [ @objname = ] 'object_name' 
     [ , [ @futureonly = ] 'futureonly_flag' ] 

Argomenti

  • [ @rulename=] 'rule'
    Nome della regola creata tramite l'istruzione CREATE RULE. rule è di tipo nvarchar(776) e non prevede alcun valore predefinito.

  • [ @objname=] 'object_name'
    Tabella e colonna, o tipo di dati alias a cui associare la regola. Una regola non può essere associata a una colonna di tipo text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR definito dall'utente o timestamp. Una regola non può inoltre essere associata a una colonna calcolata.

    object_name è di tipo nvarchar(776) e non prevede alcun valore predefinito. Se object_name è un nome composto da una sola parte, viene risolto come un tipo di dati alias. Se è un nome in due o tre parti, viene prima risolto come tabella e colonna. Se la risoluzione non riesce, viene risolto come tipo di dati alias. Per impostazione predefinita, le colonne esistenti del tipo di dati alias ereditano rule, a meno che una regola non sia stata associata direttamente alla colonna.

    [!NOTA]

    object_name può includere i simboli di parentesi [ e ] come caratteri delimitatori. Per ulteriori informazioni, vedere Identificatori delimitati (Motore di database).

    [!NOTA]

    Le regole create nelle espressioni che utilizzano tipi di dati alias possono essere associate a colonne o a tipi di dati alias, ma non è possibile compilarle quando un altro elemento fa riferimento ad esse. Evitare di utilizzare le regole create nei tipi di dati alias.

  • [ @futureonly= ] 'futureonly_flag'
    Utilizzato solo quando si associa una regola a un tipo di dati alias. future_only_flag è di tipo varchar(15) e non prevede alcun valore predefinito. Quando questo parametro è impostato su futureonly, le colonne esistenti di un tipo di dati alias non ereditano la nuova regola. Se futureonly_flag è NULL, la nuova regola viene associata a tutte le colonne del tipo di dati alias prive di regola o che utilizzano la regola esistente del tipo di dati alias.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

È possibile associare una nuova regola a una colonna (sebbene sia preferibile utilizzare un vincolo CHECK) oppure a un tipo di dati alias tramite sp_bindrule senza disassociare una regola esistente. La regola precedente verrà infatti ignorata. Se una regola viene associata a una colonna con un vincolo CHECK esistente, vengono valutate tutte le restrizioni. Non è possibile associare una regola a un tipo di dati di SQL Server.

La regola viene applicata quando si esegue un'istruzione INSERT, non in fase di associazione. È possibile associare una regola di tipo carattere a una colonna di tipo numeric. Questa operazione INSERT tuttavia non è valida.

Le colonne esistenti del tipo di dati alias ereditano la nuova regola, a meno che per futureonly_flag non sia stato specificato il flag futureonly. Le nuove colonne definite con il tipo di dati alias ereditano sempre la regola. Tuttavia, se la clausola ALTER COLUMN di un'istruzione ALTER TABLE imposta una colonna su un tipo di dati alias associato a una regola, la regola associata al tipo di dati non viene ereditata dalla colonna. La regola deve essere associata in modo esplicito alla colonna tramite sp_bindrule.

Quando si associa una regola a una colonna, le informazioni correlate vengono aggiunte alla tabella syscolumns. Quando si associa una regola a un tipo di dati alias, le informazioni correlate vengono aggiunte alla tabella sys.types.

Autorizzazioni

Per associare una regola a una colonna di tabella, è necessario disporre dell'autorizzazione ALTER per la tabella. Per associare una regola a un tipo di dati alias, è richiesta l'autorizzazione CONTROL per il tipo di dati alias o l'autorizzazione ALTER per lo schema a cui appartiene il tipo.

Esempi

A. Associazione di una regola a una colonna

Supponendo che la regola today sia stata creata nel database corrente tramite l'istruzione CREATE RULE, nell'esempio seguente viene associata tale regola alla colonna HireDate della tabella Employee. Quando si aggiunge una riga alla tabella Employee, i dati della colonna HireDate vengono verificati in base alla regola today.

USE master;
GO
EXEC sp_bindrule 'today', 'HumanResources.Employee.HireDate'

B. Associazione di una regola a un tipo di dati alias

Supponendo che esistano la regola rule_ssn e il tipo di dati alias ssn, nell'esempio seguente viene associata la regola rule_ssn a ssn. In un'istruzione CREATE TABLE le colonne di tipo ssn ereditano la regola rule_ssn. La regola rule_ssn viene ereditata inoltre dalle colonne di tipo ssn esistenti, tranne nei casi in cui per futureonly_flag è specificato il flag futureonly oppure quando al tipo ssn è stata associata direttamente una regola. Le regole associate alle colonne sono sempre prioritarie rispetto a quelle associate ai tipi di dati.

USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn'

C. Utilizzo di futureonly_flag

Nell'esempio seguente viene associata la regola rule_ssn al tipo di dati alias ssn. Poiché è stato specificato il flag futureonly, l'operazione non ha alcun effetto sulle colonne di tipo ssn esistenti.

USE master;
GO
EXEC sp_bindrule rule_ssn, 'ssn', 'futureonly'

D. Utilizzo di identificatori delimitati

Nell'esempio seguente viene illustrato l'utilizzo di identificatori delimitati nel parametro 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.