sp_bindrule (Transact-SQL)

Si applica a: sìSQL Server (tutte le versioni supportate) Sìdatabase SQL di Azure

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

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.Inalternativa, usare vincoli UNIQUE e CHECK. I vincoli CHECK vengono creati usando la parola chiave CHECK delle istruzioni CREATE TABLE o ALTER TABLE.

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

Sintassi

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

Argomenti

[ @rulename = ] 'rule' Nome di una regola creata dall'istruzione CREATE RULE. rule è di tipo nvarchar(776), senza alcun valore predefinito.

[ @objname = ] 'object_name' Tabella e colonna o tipo di dati alias a cui deve essere associata la regola. 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.

object_name è di tipo nvarchar(776) senza alcun valore predefinito. Se object_name è un nome in una parte, viene risolto come 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 la regola a meno che una regola non sia stata associata direttamente alla colonna.

Nota

object_name può contenere le parentesi quadre [ e ] come caratteri di identificatore delimitati. Per altre informazioni, vedere Identificatori del 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' Viene utilizzato solo quando si associa una regola a un tipo di dati alias. future_only_flag è varchar(15) con il valore predefinito NULL. Questo parametro, se impostato su futureonly, impedisce alle colonne esistenti di un tipo di dati alias di ereditare la nuova regola. Se futureonly_flag è NULL, la nuova regola viene associata a tutte le colonne del tipo di dati alias che attualmente non dispongono di alcuna regola o che utilizzano la regola esistente del tipo di dati alias.

Valori del codice restituito

0 (operazione completata) o 1 (operazione non riuscita)

Commenti

È possibile associare una nuova regola a una colonna (sebbene sia preferibile usare un vincolo CHECK) o a un tipo di dati alias con sp_bindrule senza annullare l'associazione di 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 per i caratteri a una colonna con tipo di dati numeric, anche se tale operazione INSERT non è valida.

Le colonne esistenti del tipo di dati alias ereditano la nuova regola, a meno futureonly_flag non venga specificato come 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 specifico alla colonna usando sp_bindrule.

Quando si associa una regola a una colonna, le informazioni correlate vengono aggiunte alla tabella sys.columns. 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

R. 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. Anche le colonne esistenti di tipo ereditano la regola, a meno che non venga specificato futureonly per futureonly_flag o non vi sia ssn rule_ssn associata direttamente una ssn 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 object_name parametro .

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.  

Vedere anche

Stored procedure di sistema (Transact-SQL)
motore di database Stored procedure (Transact-SQL)
CREATE RULE (Transact-SQL)
DROP RULE (Transact-SQL)
sp_unbindrule (Transact-SQL)
Stored procedure di sistema (Transact-SQL)