sp_bindefault (Transact-SQL)

Associa un valore predefinito 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. In alternativa è consigliabile creare definizioni predefinite tramite la parola chiave DEFAULT delle istruzioni ALTER TABLE o CREATE TABLE. Per ulteriori informazioni, vedere Creazione e modifica delle definizioni DEFAULT.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_bindefault [ @defname = ] 'default' , 
    [ @objname = ] 'object_name' 
    [ , [ @futureonly = ] 'futureonly_flag' ] 

Argomenti

  • [ @defname= ] 'default'
    Nome del valore predefinito creato tramite CREATE DEFAULT. default è di tipo nvarchar(776) e non prevede alcun valore predefinito.

  • [ @objname= ] 'object_name'
    Nome della tabella e della colonna o del tipo di dati alias a cui associare il valore predefinito. object_name è di tipo nvarchar(776) e non prevede alcun valore predefinito. Non è possibile definire object_name con i tipi varchar(max), nvarchar(max), varbinary(max), xml o con i tipi CLR definiti dall'utente.

    Se object_name è un nome costituito 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 il valore specificato nell'argomento default, a meno che un altro valore predefinito non sia stato associato direttamente alla colonna. Un valore predefinito non può essere associato a una colonna di tipo text, ntext, image, varchar(max), nvarchar(max), varbinary(max), xml, timestamp, a una colonna di tipo CLR definito dall'utente, una colonna con la proprietà IDENTITY, una colonna calcolata, oppure una colonna che include già un vincolo DEFAULT.

    [!NOTA]

    object_name può contenere parentesi quadre [] come identificatori delimitati. Per ulteriori informazioni, vedere Identificatori delimitati (Motore di database).

  • [ @futureonly= ] 'futureonly_flag'
    Utilizzato solo quando si associa un valore predefinito a un tipo di dati alias. futureonly_flag è di tipo varchar(15) e prevede NULL come valore predefinito. Quando questo parametro è impostato su futureonly, le colonne esistenti del tipo di dati specificato non ereditano il nuovo valore predefinito. Questo parametro non viene mai utilizzato per l'associazione di un valore predefinito a una colonna. Se futureonly_flag è NULL, il nuovo valore predefinito viene associato a tutte le colonne del tipo di dati alias prive di valore predefinito o che utilizzano il valore predefinito esistente del tipo di dati alias.

Valori restituiti

0 (esito positivo) o 1 (esito negativo)

Osservazioni

È possibile associare un nuovo valore predefinito a una colonna (sebbene sia preferibile utilizzare il vincolo DEFAULT) oppure a un tipo di dati alias tramite sp_bindefault senza disassociare 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 il valore predefinito non è compatibile con la colonna a cui è stato associato, Motore di database di SQL Server restituisce un messaggio di errore quando si tenta di inserire il valore predefinito, non in fase di associazione.

Le colonne esistenti del tipo di dati alias ereditano il nuovo valore predefinito, tranne nei casi in cui è già stato associato direttamente un valore predefinito oppure quando per futureonly_flag è specificato il flag 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 corrispondenti vengono aggiunte alla vista del catalogo sys.columns. Quando si associa un valore predefinito a un tipo di dati alias, le informazioni corrispondenti vengono aggiunte alla vista del catalogo sys.types.

Autorizzazioni

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

Esempi

A. Associazione di un valore predefinito a una colonna

Il valore predefinito today è stato definito nel database corrente tramite l'istruzione CREATE DEFAULT, in questo esempio tale valore viene associato alla colonna HireDate della tabella Employee. Quando si aggiunge una riga alla tabella Employee senza specificare dati nella colonna HireDate la colonna include il valore predefinito today.

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

B. Associazione di 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 inoltre il valore predefinito def_ssn, tranne nei casi in cui per il valore futureonly_flag è specificato il flag futureonly oppure quando alla colonna è stato associato direttamente un valore predefinito. I valori predefiniti associati alle colonne sono sempre prioritari rispetto a quelli associati ai tipi di dati.

USE master;
GO
EXEC sp_bindefault 'def_ssn', 'ssn';

C. Utilizzo di futureonly_flag

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. Utilizzo di identificatori delimitati

Nell'esempio seguente viene illustrato come utilizzare gli identificatori delimitati, [t.1], in object_name.

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.