Francesco Geri

Il blog di Francesco Geri
posts - 56, comments - 57, trackbacks - 2

My Links

News



Anch'io metto nel mio blog cose che scrivo così, tanto per fare, tanto per condividere miei appunti, senza prendermi la briga di garantirne l'infallibilità, né l'assoluta correttezza, senza pretese e con grande umilté.

Quanti mi hanno visto dal 25/10/2007:
...dettagli

Che libro leggo in questo periodo?*

L'Affittacamere - Valerio Varesi
* L'immagine è presa da IBS (http://www.ibs.it), spero non me ne vogliano...

Archives

Post Categories

Altre

Blogs

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 3.45 | Filed Under [ Tips SQL Server ]

Feedback

No comments posted yet.

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 6 and 4 and type the answer here:

Powered by: