sp_bindrule (Transact-SQL)
Si applica a: SQL Server Database SQL di Azure
Associa una regola a una colonna o a un tipo di dati alias.
Importante
Questa funzionalità verrà rimossa nelle versioni future di SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. Usare invece vincoli Unique e check. I vincoli CHECK vengono creati usando la parola chiave CHECK delle istruzioni CREATE TABLE o ALTER TABLE .
Convenzioni relative alla sintassi Transact-SQL
Sintassi
sp_bindrule
[ @rulename = ] N'rulename'
, [ @objname = ] N'objname'
[ , [ @futureonly = ] 'futureonly' ]
[ ; ]
Argomenti
[ @rulename = ] N'rulename'
Nome di una regola creata dall'istruzione CREATE RULE
. @rulename è nvarchar(776), senza impostazione predefinita.
[ @objname = ] N'objname'
Tabella e colonna oppure il tipo di dati alias a cui deve essere associata la regola. @objname è nvarchar(776), senza impostazione predefinita.
Una regola non può essere associata a una colonna text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, CLR definita dall'utente o timestamp . Una regola non può essere associata a una colonna calcolata.
@objname è nvarchar(776) senza impostazione predefinita. Se @objname è un nome in una sola parte, viene risolto come tipo di dati alias. Se si tratta di un nome in due o tre parti, viene prima risolto come tabella e colonna; se la risoluzione non riesce, viene risolta come tipo di dati alias. Per impostazione predefinita, le colonne esistenti del tipo di dati alias ereditano @rulename a meno che una regola non sia associata direttamente alla colonna.
@objname può contenere i caratteri parentesi quadre ([
e ]
) come caratteri identificatori delimitati. Per altre informazioni, vedere Identificatori di database.
Le regole create nelle espressioni che usano tipi di dati alias possono essere associate a colonne o tipi di dati alias, ma non possono essere compilate quando viene fatto riferimento. Evitare di utilizzare le regole create nei tipi di dati alias.
[ @futureonly = ] 'futureonly'
Utilizzato solo quando si associa una regola a un tipo di dati alias. @futureonly è 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 è NULL
, la nuova regola viene associata a qualsiasi colonna del tipo di dati alias che attualmente non dispone di alcuna regola o che utilizza la regola esistente del tipo di dati alias.
Valori del codice restituito
0
(esito positivo) o 1
(errore).
Osservazioni:
È possibile associare una nuova regola a una colonna (anche se è preferibile usare un CHECK
vincolo) o a un tipo di dati alias con sp_bindrule
senza scollegare una regola esistente. La regola precedente verrà infatti ignorata. Se una regola è associata a una colonna con un vincolo esistente CHECK
, vengono valutate tutte le restrizioni. Non è possibile associare una regola a un tipo di dati di SQL Server.
La regola viene applicata quando viene tentata un'istruzione INSERT
, non all'associazione. È possibile associare una regola di caratteri a una colonna di tipo dati numerico , anche se tale INSERT
operazione non è valida.
Le colonne esistenti del tipo di dati alias ereditano la nuova regola, a meno che non venga specificata @futureonly come futureonly
. Le nuove colonne definite con il tipo di dati alias ereditano sempre la regola. Tuttavia, se la ALTER COLUMN
clausola di un'istruzione ALTER TABLE
modifica il tipo di dati di una colonna in 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 specificamente alla colonna tramite sp_bindrule
.
Quando si associa una regola a una colonna, le informazioni correlate vengono aggiunte alla sys.columns
tabella. Quando si associa una regola a un tipo di dati alias, le informazioni correlate vengono aggiunte alla sys.types
tabella.
Autorizzazioni
Per associare una regola a una colonna di tabella, è necessario disporre ALTER
dell'autorizzazione per la tabella. CONTROL
L'autorizzazione per il tipo di dati alias o ALTER
l'autorizzazione per lo schema a cui appartiene il tipo è necessaria per associare una regola a un tipo di dati alias.
Esempi
R. Associare una regola a una colonna
Supponendo che nel database corrente venga creata una regola denominata today
usando l'istruzione , nell'esempio CREATE RULE
seguente la regola viene associata alla HireDate
colonna della Employee
tabella. 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. Associare 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 rule_ssn
regola. Le colonne esistenti di tipo ssn
ereditano anche la rule_ssn
regola, a meno che non venga specificata in futuro per @futureonly o ssn
che sia associata direttamente una regola. Le regole associate alle colonne hanno sempre la precedenza sui valori predefiniti associati ai tipi di dati.
USE master;
GO
EXEC sp_bindrule 'rule_ssn', 'ssn';
C. Usare l'opzione futureonly
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. Usare identificatori delimitati
Nell'esempio seguente viene illustrato l'uso di identificatori delimitati nel parametro @objname .
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.