Condividi tramite


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.