Specificare valori predefiniti per le colonne
si applica a: SQL Server 2016 (13.x) e versioni successive
database SQL di Azure
Istanza gestita di SQL di Azure
Azure Synapse Analytics
Analytics Platform System (PDW)
database SQL in Microsoft Fabric
È possibile usare SQL Server Management Studio (SSMS) per specificare un valore predefinito che verrà immesso nella colonna della tabella. È possibile impostare un valore predefinito usando Esplora oggetti o eseguendo Transact-SQL.
Se non si assegna un valore predefinito alla colonna e l'utente lascia la colonna vuota, si verificherà quanto segue:
Se è stata impostata l'opzione che consente l'immissione di valori Null, nella colonna verrà inserito il valore
NULL
.Se non si imposta l'opzione per consentire valori Null, la colonna rimane vuota, ma l'utente o l'applicazione non può inserire la riga finché non fornisce un valore per la colonna.
È possibile usare un vincolo predefinito per varie attività per garantire la coerenza dei dati a livello di database:
- Impostare il valore della riga per una colonna "attiva" o "abilitata" su
1
al momento dell'inserimento. - Impostare il valore della riga per un campo data sulla data corrente.
- Impostare il valore di riga per un campo su una funzione di sistema deterministica, ad esempio
DB_NAME()
.
Limiti
Prima di iniziare, tenere presenti le limitazioni e le restrizioni seguenti:
Se la voce nel campo Valore predefinito sostituisce un valore predefinito associato (visualizzato senza parentesi), verrà chiesto se separare il valore predefinito e sostituirlo con il nuovo valore.
Per immettere una stringa di testo, racchiudere il valore tra virgolette singole (
'
). Non usare virgolette doppie ("
), perché sono riservate agli identificatori tra virgolette.Per immettere un valore predefinito numerico immettere il numero senza virgolette.
Per specificare un oggetto o una funzione, immetterne il nome senza racchiuderlo tra virgolette.
In Azure Synapse Analytics è possibile usare solo costanti per un vincolo predefinito. Non è possibile usare un'espressione con un vincolo predefinito.
Autorizzazioni
Per le azioni descritte in questo articolo è necessaria l'autorizzazione ALTER
per la tabella.
Usare SQL Server Management Studio per specificare un valore predefinito
È possibile usare Esplora oggetti in SSMS per specificare un valore predefinito per una colonna della tabella. A tale scopo, effettuare i passaggi seguenti:
Connettiti alla tua istanza di SQL Server tramite SSMS.
In Esplora oggetti fare clic con il pulsante destro del mouse sulle colonne della tabella di cui modificare la scala e scegliere Progetta.
Selezionare la colonna per la quale si desidera specificare un valore predefinito.
Nella scheda Proprietà colonne , immettere il nuovo valore predefinito nella proprietà Valore predefinito dell'associazione .
Per specificare un valore predefinito numerico, immettere il numero desiderato. Per specificare un oggetto o una funzione, immetterne il nome. Per specificare un valore predefinito alfanumerico, immettere il valore racchiudendolo tra virgolette singole.
Nel menu File scegliere Salva <nome tabella>.
Usare Transact-SQL per specificare un’impostazione predefinita
Esistono vari modi per specificare un valore predefinito per una colonna usando inviare T-SQL. In ognuno degli esempi seguenti è possibile aprire una nuova query Transact-SQL con questi passaggi.
In Esplora oggetti connettersi a un'istanza del motore di database.
Sulla barra Standard selezionare Nuova query.
Copiare e incollare l'esempio seguente nella finestra della query e selezionare Esegui.
Usare un vincolo denominato
Quando si lavora con i progetti di database, è consigliabile creare vincoli con nomi. In caso contrario, al vincolo predefinito viene assegnato un nome generato dal sistema, che sarà diverso in ogni ambiente di SQL Server in cui vengono creati gli oggetti di database.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
Usare ALTER TABLE
È possibile aggiungere un vincolo denominato a una tabella esistente con ALTER TABLE
.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT
); -- Allows nulls.
GO
INSERT INTO dbo.doc_exz (column_a)
VALUES (7);
GO
ALTER TABLE dbo.doc_exz
ADD CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50 FOR column_b;
GO
Usare CREATE TABLE
È possibile creare una nuova tabella con vincoli predefiniti con CREATE TABLE
.
CREATE TABLE dbo.doc_exz (
column_a INT,
column_b INT CONSTRAINT DF_Doc_Exz_Column_B DEFAULT 50
);
Impostare una data di creazione
Nell'esempio seguente viene utilizzata la funzione di sistema sysdatetimeoffset()
per popolare il valore della riga della colonna dateinserted
con la data di creazione della riga.
CREATE TABLE dbo.test (
id INT identity(1, 1) NOT NULL CONSTRAINT PK_test PRIMARY KEY
,date_inserted DATETIMEOFFSET(2) NOT NULL CONSTRAINT DF_test_date_inserted DEFAULT(sysdatetimeoffset())
);
Un vincolo predefinito non cambia quando la riga viene aggiornata. Per aggiornare un valore ogni volta che viene modificata la riga, è consigliabile usare un trigger , una tabella temporale , una colonna calcolata o una rowversion stringa binaria. Prendere in considerazione anche l'inserimento di righe eseguendo stored procedure anziché inserire direttamente righe, in cui le stored procedure possono applicare la logica di business, i valori predefiniti e altre regole di coerenza dei dati.
Per rilevare righe che cambiano, prendere in considerazione Change Data Capture (CDC), Rilevamento modifiche, una tabella temporale o una tabella del libro mastro .