sp_bindefault (Transact-SQL)

Si applica a: SQL Server database SQL di Azure Istanza gestita di SQL di Azure

Associa un valore predefinito 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. È consigliabile creare definizioni predefinite usando invece la parola chiave DEFAULT delle istruzioni ALTER TABLE o CREATE TABLE .

Convenzioni relative alla sintassi Transact-SQL

Sintassi

sp_bindefault
    [ @defname = ] N'defname'
    , [ @objname = ] N'objname'
    [ , [ @futureonly = ] 'futureonly' ]
[ ; ]

Argomenti

[ @defname = ] N'defname'

Nome dell'impostazione predefinita creata da CREATE DEFAULT. @defname è nvarchar(776), senza impostazione predefinita.

[ @objname = ] N'objname'

Nome della tabella e della colonna o del tipo di dati alias a cui deve essere associato il valore predefinito. @objname è nvarchar(776), senza impostazione predefinita. @objname non può essere definito con tipi varchar(max), nvarchar(max), varbinary(max), xml o CLR definiti dall'utente.

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; e se la risoluzione non riesce, viene risolta come tipo di dati alias. Per impostazione predefinita, le colonne esistenti del tipo di dati alias ereditano @defname, a meno che un valore predefinito non sia associato direttamente alla colonna. Non è possibile associare un valore predefinito a una colonna di tipo text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp o CLR definita dall'utente, una colonna con la IDENTITY proprietà , una colonna calcolata o una colonna che ha già un DEFAULT vincolo.

@objname può contenere parentesi quadre ([ e ]) come identificatori delimitati. Per altre informazioni, vedere Identificatori di database.

[ @futureonly = ] 'futureonly'

Utilizzato solo quando si associa un valore predefinito a un tipo di dati alias. @futureonly è varchar(15), con il valore predefinito NULL. Quando questo parametro è impostato su futureonly, le colonne esistenti di quel tipo di dati non possono ereditare il nuovo valore predefinito. Questo parametro non viene mai utilizzato per l'associazione di un valore predefinito a una colonna. Se @futureonly è NULL, il nuovo valore predefinito è associato a tutte le colonne del tipo di dati alias che attualmente non hanno valori predefiniti o che usano il valore predefinito esistente del tipo di dati alias.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

È possibile usare sp_bindefault per associare un nuovo valore predefinito a una colonna, anche se è preferibile usare il DEFAULT vincolo oppure a un tipo di dati alias senza associare un valore predefinito esistente. Il valore predefinito esistente viene ignorato. Non è possibile associare un valore predefinito a un tipo di dati di sistema di SQL Server o a un tipo CLR definito dall'utente. Se l'impostazione predefinita non è compatibile con la colonna a cui è stata associata, il motore di database di SQL Server restituisce un messaggio di errore quando tenta di inserire il valore predefinito, non quando lo si associa.

Le colonne esistenti del tipo di dati alias ereditano il nuovo valore predefinito, a meno che un valore predefinito non sia associato direttamente o che venga specificato in futuro come futureonly. Le nuove colonne del tipo di dati alias ereditano sempre il valore predefinito.

Quando si associa un valore predefinito a una colonna, le informazioni correlate vengono aggiunte alla vista del sys.columns catalogo. Quando si associa un valore predefinito a un tipo di dati alias, le informazioni correlate vengono aggiunte alla vista del sys.types catalogo.

Autorizzazioni

L'utente deve essere proprietario della tabella o essere membro del ruolo predefinito del server sysadmin oppure il db_owner e db_ddladmin ruoli predefiniti del database.

Esempi

R. Associare un valore predefinito a una colonna

Un nome today predefinito viene definito nel database corrente tramite CREATE DEFAULT. Nell'esempio seguente viene associato il valore predefinito alla HireDate colonna della Employee tabella. Ogni volta che viene aggiunta una riga alla tabella e ai Employee dati per la HireDate colonna non viene fornita, la colonna ottiene il valore dell'oggetto predefinito today.

USE master;
GO

EXEC sp_bindefault 'today', 'HumanResources.Employee.HireDate';

B. Associare un valore predefinito a un tipo di dati alias

Il valore predefinito def_ssn e il tipo di dati alias ssn esistono già. Nell'esempio seguente il valore predefinito def_ssn viene associato a ssn. Il valore predefinito viene ereditato da tutte le colonne a cui è stato assegnato il tipo di dati alias ssn in fase di creazione della tabella. Le colonne esistenti di tipo ssn ereditano anche il valore predefinito def_ssn, a meno che non futureonly venga specificato per il valore @futureonly oppure che la colonna abbia un limite predefinito direttamente a esso. Le impostazioni predefinite associate alle colonne hanno sempre la precedenza sui valori predefiniti associati ai tipi di dati.

USE master;
GO

EXEC sp_bindefault 'def_ssn', 'ssn';

C. Usare l'opzione futureonly

Nell'esempio seguente il valore predefinito def_ssn viene associato 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_bindefault 'def_ssn', 'ssn', 'futureonly';

D. Usare identificatori delimitati

Nell'esempio seguente viene illustrato l'uso di identificatori delimitati, [t.1], in @objname.

USE master;
GO

CREATE TABLE [t.1] (c1 int);
-- Notice the period as part of the table name.
EXEC sp_bindefault 'default1', '[t.1].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.