<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>SQL Server</title>
        <link>http://blogs.ugidotnet.org/franx_blog/category/SQL Server.aspx</link>
        <description>SQL Server</description>
        <language>it-IT</language>
        <copyright>Francesco Geri</copyright>
        <generator>Subtext Version 2.6.0.0</generator>
        <item>
            <title>Eseguire lo Shrink del database di contenuto di WSS</title>
            <link>http://blogs.ugidotnet.org/franx_blog/archive/2008/12/04/94856.aspx</link>
            <description>Come fare ad eseguire lo shrink del database di contenuto di WSS, quando WSS utilizza l'istanza di Sql Server propria (quella che crea il setup di WSS)?  Il problema è che da SQL Server Management Studio non ci si può connettere all'istanza di SQL Server de iWSS (almeno questo mi risulta).  Allora si può ricorrere alla linea di comando.     Aprire il prompt dei comandi    Posizionarsi sulla cartella (SQL Server 2008):           &amp;lt;drive&amp;gt;:\Program Files\Microsoft SQL Server\90\Tools\Binn          eseguire il comando:           sqlcmd -S MY_SERVER\MICROSOFT##SSEE -q "dbcc shrinkdatabase(MY_WSS_CONTENT_DB)"      Dove:  MY_SERVER\MICROSOFT##SSEE è l'istanza di SQL Server  MY_WSS_CONTENT_DB è il database di WSS     Naturalmente ringrazio il collega Osvaldo che mi ha supportato nel determinare il comando sql da eseguire!&lt;img src="http://blogs.ugidotnet.org/franx_blog/aggbug/94856.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Francesco Geri</dc:creator>
            <guid>http://blogs.ugidotnet.org/franx_blog/archive/2008/12/04/94856.aspx</guid>
            <pubDate>Thu, 04 Dec 2008 05:50:57 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/franx_blog/archive/2008/12/04/94856.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/franx_blog/comments/commentRss/94856.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Aggiungere un campo non nullo e senza default ad una tabella di SQL Server</title>
            <link>http://blogs.ugidotnet.org/franx_blog/archive/2008/06/16/93049.aspx</link>
            <description>

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
&lt;img src="http://blogs.ugidotnet.org/franx_blog/aggbug/93049.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Francesco Geri</dc:creator>
            <guid>http://blogs.ugidotnet.org/franx_blog/archive/2008/06/16/93049.aspx</guid>
            <pubDate>Mon, 16 Jun 2008 04:45:27 GMT</pubDate>
            <comments>http://blogs.ugidotnet.org/franx_blog/archive/2008/06/16/93049.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://blogs.ugidotnet.org/franx_blog/comments/commentRss/93049.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>