Francesco Geri

Il blog di Francesco Geri
posts - 94, comments - 165, trackbacks - 2

Aggiungere un campo non nullo e senza default ad una tabella di SQL Server


Problema:

Abbiamo una tabella in un database SQL Server, vogliamo scrivere uno script che aggiunge un campo che sia non nullo e senza default.

 

Svolgimento:

Il semplice script seguente...


alter table MiaTabella

add MioCampo varchar(255) not null 

 

...potrebbe non funzionare se la tabella ha già dei record. Infatti Una volta aggiunta la nuova colonna, che valore avrà per i record già presenti? Non potrà essere nulla, ma non è specificato un valore di default.

Per cui dovremmo scrivere il seguente script:


alter table MiaTabella

add MioCampo varchar(255) not null default ('') 

 

In questo modo i vecchi record avranno come valore la stringa vuota e quindi lo script potrà essere eseguito.

Però a questo punto abbiamo bisogno di rimuovere il defualt.

La cosa non è banale: in SQL Server non potremo scrivere uno script del tipo ALTER TABLE per rimuove il default (lo potremmo fare con SQL Server Compact Edition). L'unico modo è quello di rimuovere il CONSTRAINT che definisce il default.

Ma come si chiama questo constraint? Quel nome viene creato da SQL Server e nel caso dello script sopra sarà del tipo:

DF__MiaTabella__MioCa__6E01572D

La soluzione che ho trovato io fa uso di un diverso script con sui viene definito esplicitamente il nome del CONSTRAINT, dandomi quindi la possibilità di rimuoverlo in modo molto semplice:

 

/* Aggiunge il campo MioCampo ed il constraint

(DF_MiaTabella_MioCampo) per il default temporaneo */

alter table MiaTabella

add MioCampo varchar(255) not null,

    constraint DF_MiaTabella_MioCampo default '' for MioCampo

go

 

/* Rimuove il default temporaneo */

alter table MiaTabella

drop constraint DF_MiaTabella_MioCampo

go

Print | posted on lunedì 16 giugno 2008 06:45 | Filed Under [ Tips SQL Server ]

Powered by:
Powered By Subtext Powered By ASP.NET