CREATE DEFAULT (Transact-SQL)
Crea un oggetto denominato valore predefinito. Quando è associato a una colonna o a un tipo di dati alias, un valore predefinito specifica il valore che verrà inserito nella colonna a cui è associato l'oggetto (o in tutte le colonne nel caso di un tipo di dati alias) se durante un inserimento non viene specificato in modo esplicito alcun valore.
Importante |
---|
Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. In alternativa, utilizzare definizioni di valori predefiniti create con la parola chiave DEFAULT dell'istruzione ALTER TABLE o CREATE TABLE. |
Convenzioni della sintassi Transact-SQL
Sintassi
CREATE DEFAULT [ schema_name . ] default_name
AS constant_expression [ ; ]
Argomenti
schema_name
Nome dello schema a cui appartiene il valore predefinito.default_name
Nome del valore predefinito. I nomi dei valori predefiniti devono essere conformi alle regole per gli identificatori. Il nome del proprietario del valore predefinito è facoltativo.constant_expression
Espressione che include solo valori costanti (non può includere i nomi di colonne o di altri oggetti di database). È possibile utilizzare qualsiasi costante, funzione predefinita o espressione matematica, ad eccezione di quelle contenenti tipi di dati alias. Non è consentito l'utilizzo di funzioni definite dall'utente. Racchiudere le costanti per valori di carattere e data tra virgolette singole ('). Le costanti per valori di valuta, integer e a virgola mobile non richiedono le virgolette. I dati binari devono essere preceduti da 0x, mentre i dati di valuta devono essere preceduti dal simbolo di valuta. Il valore predefinito deve essere compatibile con il tipo di dati della colonna.
Osservazioni
È possibile creare un nome di valore predefinito solo nel database corrente. I nomi di valore predefinito in un database devono essere univoci per ogni schema. Quando si crea un valore predefinito, è possibile associarlo a una colonna o a un tipo di dati alias tramite la procedura sp_bindefault.
Se un valore predefinito non è compatibile con la colonna a cui è associato, SQL Server genera un messaggio di errore in corrispondenza dei tentativi di inserimento del valore predefinito. Non è possibile, ad esempio, utilizzare N/D come valore predefinito per una colonna numeric.
Se la lunghezza del valore predefinito è eccessiva per la colonna a cui è associato, il valore viene troncato.
Le istruzioni CREATE PROCEDURE non possono essere utilizzate in combinazione con altre istruzioni Transact-SQL in un singolo batch.
È necessario eliminare un valore predefinito prima di crearne un altro con lo stesso nome. Inoltre, prima di eliminare il valore predefinito, è necessario disassociarlo tramite la procedura sp_unbindefault.
Se a una colonna sono associati un valore predefinito e una regola, il valore predefinito non deve violare la regola. Un valore predefinito in conflitto con una regola non viene mai inserito e SQL Server genera un messaggio di errore in corrispondenza di ogni tentativo di immissione del valore predefinito.
Quando è associato a una colonna, un valore predefinito viene inserito nei casi seguenti:
Non è già stato inserito un valore in modo esplicito.
Con l'istruzione INSERT è stata specificata la parola chiave DEFAULT VALUES o DEFAULT per l'inserimento di valori predefiniti.
Se in fase di creazione di una colonna viene specificata la parola chiave NOT NULL e non viene creato alcun valore predefinito, quando un utente non immette una voce nella colonna viene generato un messaggio di errore. Nella tabella seguente vengono descritte le relazioni tra l'esistenza di un valore predefinito e la definizione di una colonna come NULL o NOT NULL. Le voci nella tabella indicano i risultati ottenuti.
Definizione di colonna |
Nessuna voce, nessun valore predefinito |
Nessuna voce, valore predefinito |
Voce NULL, nessun valore predefinito |
Voce NULL, valore predefinito |
---|---|---|---|---|
NULL |
NULL |
predefinito |
NULL |
NULL |
NOT NULL |
Error |
predefinito |
error |
error |
Per rinominare un valore predefinito, utilizzare sp_rename. Per ottenere un report relativo a un valore predefinito, utilizzare sp_help.
Autorizzazioni
Per eseguire CREATE DEFAULT, un utente deve disporre come minimo dell'autorizzazione CREATE DEFAULT nel database corrente e dell'autorizzazione ALTER per lo schema in cui viene creato il valore predefinito.
Esempi
A.Creazione di un semplice valore predefinito costituito da una stringa di caratteri
Nell'esempio seguente viene creato un valore predefinito costituito dalla stringa di caratteri unknown.
USE AdventureWorks2012;
GO
CREATE DEFAULT phonedflt AS 'unknown';
B.Associazione di un valore predefinito
Nell'esempio seguente viene associato il valore predefinito creato nell'esempio A. Il valore predefinito viene utilizzato solo se non vengono specificate voci per la colonna Phone della tabella Contact. Si noti che omettere una voce è diverso da specificare esplicitamente NULL in un'istruzione INSERT.
Dato che il valore predefinito phonedflt non esiste, l'istruzione Transact-SQL seguente ha esito negativo. Questo esempio viene utilizzato solo a scopo illustrativo.
USE AdventureWorks2012;
GO
sp_bindefault 'phonedflt', 'Person.PersonPhone.PhoneNumber';