Come aggiungere una colonna con valore predefinito a una tabella esistente in SQL Server

In SQL server, per aggiungere una colonna con valore predefinito a una tabella esistente, utilizzare la tabella ALTER Nome colonna ADD con vincolo NULL/NOT NULL con valore DEFAULT.

Per aggiungere una colonna con valore predefinito a una tabella esistente si può utilizzare la seguente sintassi di query sql server.

ALTER TABLE {TABLENAME} 
ADD {COLUMNNAME} {TYPE} {NULL|NOT NULL} 
CONSTRAINT {CONSTRAINT_NAME} DEFAULT {DEFAULT_VALUE}
WITH VALUES

Vediamo un esempio per capire meglio.

Aggiunta di una colonna non annullabile con valore predefinito per i record esistenti

Consideriamo una tabella Employee in SQL server e se vogliamo aggiungere la colonna salario minimo con il valore predefinito 1000USD, utilizziamo la seguente query.

ALTER TABLE Employee
ADD MINIMUM_WAGE int NOT NULL DEFAULT(1000)
GO

La query di cui sopra aggiungerà una nuova colonna MINIMUM_WAGE nella tabella Employee e riempirà la colonna nelle righe esistenti con il valore predefinito, cioè 1000.

Poiché abbiamo aggiunto il vincolo NOT NULL.

Se non si aggiunge il vincolo NOT NULL, tutte le righe esistenti saranno NULL e il valore DEFAULT fornito non avrà alcun impatto.

ALTER TABLE Employee
ADD MINIMUM_WAGE int DEFAULT(1000)
GO

Tutti i valori della colonna MINIMUM_WAGE saranno NULL.

È necessario aggiungere il valore DEFAULT se si aggiunge il vincolo NOT NULL se la tabella non è vuota.

Per esempio, se la tabella Employee non è vuota e si aggiunge una nuova colonna con il vincolo NOT NULL, viene generato un errore.

ALTER TABLE Employee
ADD MINIMUM_WAGE int NOT NULL
GO

La query sql server di cui sopra genera il seguente errore durante l’aggiunta di una nuova colonna alla tabella esistente.

ALTER TABLE only allows columns to be added that can contain nulls, or have a DEFAULT definition specified, or the column being added is an identity or timestamp column, or alternatively if none of the previous conditions are satisfied the table must be empty to allow addition of this column. Column 'MINIMUM_WAGE' cannot be added to non-empty table 'Employee' because it does not satisfy these conditions.

Se la tabella Employee è vuota.

La query sql server di cui sopra aggiungerà una nuova colonna senza alcun problema.

Aggiunta di una colonna Nullable con valore predefinito per i record esistenti

Se si desidera aggiungere una colonna nullable con valore predefinito per i record esistenti, è necessario utilizzare WITH VALUES nell’istruzione sql.

ALTER TABLE Employee
ADD MINIMUM_WAGE INT
CONSTRAINT Minimum_Pay DEFAULT 1000 WITH VALUES

La query precedente aggiungerà una colonna nullable alla tabella sql server con il valore predefinito per i record esistenti.

In questo tutorial abbiamo imparato ad aggiungere una colonna sia nullable che non nullable alla tabella sql server con il valore predefinito per tutti i record esistenti.