SQL Server http://blogs.ugidotnet.org/franx_blog/category/SQL Server.aspx SQL Server it-IT Francesco Geri Subtext Version 2.6.0.0 Eseguire lo Shrink del database di contenuto di WSS http://blogs.ugidotnet.org/franx_blog/archive/2008/12/04/94856.aspx <p>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)?</p> <p>Il problema è che da SQL Server Management Studio non ci si può connettere all'istanza di SQL Server de iWSS (almeno questo mi risulta).</p> <p>Allora si può ricorrere alla linea di comando.</p> <ul> <li>Aprire il prompt dei comandi</li> <li>Posizionarsi sulla cartella (SQL Server 2008): <br /> <br />&lt;drive&gt;:\Program Files\Microsoft SQL Server\90\Tools\Binn <br /></li> <li>eseguire il comando: <br /> <br />sqlcmd -S <em><font color="#0080c0">MY_SERVER\MICROSOFT##SSEE</font></em> -q "dbcc shrinkdatabase(<em><font color="#0080c0">MY_WSS_CONTENT_DB</font></em>)"</li> </ul> <p> </p> <p>Dove:</p> <p><font color="#0080c0"><em>MY_SERVER\MICROSOFT##SSEE</em></font><font color="#000000"> è l'istanza di SQL Server</font></p> <p><font color="#0080c0"><em>MY_WSS_CONTENT_DB</em> <font color="#000000">è il database di WSS</font></font></p> <p> </p> <p>Naturalmente ringrazio il collega <a title="Blog di Osvaldo" href="http://blogs.devleap.com/osvaldoaluigi/default.aspx" target="_blank">Osvaldo</a> che mi ha supportato nel determinare il comando sql da eseguire!</p><img src="http://blogs.ugidotnet.org/franx_blog/aggbug/94856.aspx" width="1" height="1" /> Francesco Geri http://blogs.ugidotnet.org/franx_blog/archive/2008/12/04/94856.aspx Thu, 04 Dec 2008 05:50:57 GMT http://blogs.ugidotnet.org/franx_blog/archive/2008/12/04/94856.aspx#feedback 1 http://blogs.ugidotnet.org/franx_blog/comments/commentRss/94856.aspx Aggiungere un campo non nullo e senza default ad una tabella di SQL Server http://blogs.ugidotnet.org/franx_blog/archive/2008/06/16/93049.aspx <p><strong><font color="#ff0000"><br /> </font></strong></p> <p><strong><font color="#ff0000">Problema</font></strong>: </p> <p>Abbiamo una tabella in un database SQL Server, vogliamo scrivere uno script che aggiunge un campo che sia non nullo e senza default.</p> <p> </p> <p><font color="#00d535"><strong>Svolgimento</strong></font><font color="#000000">: </font></p> <p>Il semplice script seguente...</p> <p><br /> </p> <!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green0\blue255;\red255\green255\blue255;\red0\green0\blue0;}??\fs22 \cf1 alter table \cf0 MappingProprieta\par ??\cf1 add\tab \cf0 SPSPropertyTitle \tab \cf1 varchar\cf0 (255) \cf1 not null\cf0 , \par ??} --> <div style="background: white none repeat scroll 0% 50%; font-size: 11pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: consolas;"> <p style="margin: 0px;"><span style="color: blue;">alter table </span>MiaTabella</p> <p style="margin: 0px;"><span style="color: blue;">add </span>MioCampo <span style="color: blue;">varchar</span>(255) <span style="color: blue;">not null</span>  </p> <p style="margin: 0px;"> </p> <p style="margin: 0px;"><font size="2" face="Trebuchet MS">...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.</font></p> <p style="margin: 0px;"><font size="2" face="Trebuchet MS">Per cui dovremmo scrivere il seguente script:</font></p> <br /> <p style="margin: 0px;"><font size="2" face="Trebuchet MS"></font></p> <p style="margin: 0px;"><span style="color: blue;">alter table </span>MiaTabella</p> <p style="margin: 0px;"><span style="color: blue;">add </span>MioCampo <span style="color: blue;">varchar</span>(255) <span style="color: blue;">not null default (<font color="#800000">''</font>)</span>  </p> <p style="margin: 0px;"> </p> <p style="margin: 0px;">In questo modo i vecchi record avranno come valore la stringa vuota e quindi lo script potrà essere eseguito. </p> <p style="margin: 0px;">Però a questo punto abbiamo bisogno di rimuovere il defualt.</p> <p style="margin: 0px;">La cosa non è banale: in SQL Server non potremo scrivere uno script del tipo ALTER TABLE per rimuove il default (lo potremmo fare con <a href="http://technet.microsoft.com/en-us/library/ms174123.aspx" target="_blank">SQL Server Compact Edition</a>). L'unico modo è quello di rimuovere il CONSTRAINT che definisce il default.</p> <p style="margin: 0px;">Ma come si chiama questo constraint? Quel nome viene creato da SQL Server e nel caso dello script sopra sarà del tipo: </p> <p style="margin: 0px;">DF__MiaTabella__MioCa__6E01572D</p> </div> <p>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:</p> <p> </p> <p><!-- {\rtf1\ansi\ansicpg\lang1024\noproof1252\uc1 \deff0{\fonttbl{\f0\fnil\fcharset0\fprq1 Consolas;}}{\colortbl;??\red0\green128\blue0;\red255\green255\blue255;\red0\green0\blue255;\red0\green0\blue0;\red163\green21\blue21;}??\fs22 \cf1 /* Aggiunge il campo SPSPropertyTitle con un default temporaneo */\par ??\cf3 alter table \cf0 MappingProprieta\par ??\cf3 add\tab \cf0 SPSPropertyTitle \tab \cf3 varchar\cf0 (255) \cf3 not null\cf0 , \par ?? \cf3 constraint \cf0 DF_MappingProprieta_SPSPropertyTitle \cf3 default \cf5 '' \cf3 for \cf0 SPSPropertyTitle\par ??go\par ??\par ??\par ??\cf1 /*- */\par ??/* Aggiornamento valori */\par ??/*- */\par ??\cf3 update \cf0 MappingProprieta \cf3 set \cf0 SPSPropertyTitle = SPSProperty\par ??go\par ??\par ??\par ??\cf1 /*- */\par ??/* Aggiornamento tabelle */\par ??/*- */\par ??\par ??/* Rimuove il default temporaneo */\par ??\cf3 alter table \cf0 MappingProprieta\par ??\cf3 drop constraint \cf0 DF_MappingProprieta_SPSPropertyTitle\par ??go} --></p> <div style="background: white none repeat scroll 0% 50%; font-size: 11pt; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; color: black; font-family: consolas;"> <p style="margin: 0px;"><span style="color: green;">/* Aggiunge il campo MioCampo ed il constraint </span></p> <p style="margin: 0px;"><span style="color: green;"><span style="color: green;">(DF_MiaTabella_MioCampo) </span></span><span style="color: green;">per </span><span style="color: green;">il default temporaneo */</span></p> <p style="margin: 0px;"><span style="color: blue;">alter table </span>MiaTabella</p> <p style="margin: 0px;"><span style="color: blue;">add </span>MioCampo <span style="color: blue;">varchar</span>(255) <span style="color: blue;">not null</span>, </p> <p style="margin: 0px;">    <span style="color: blue;">constraint </span>DF_MiaTabella_MioCampo <span style="color: blue;">default </span><span style="color: rgb(163, 21, 21);">'' </span><span style="color: blue;">for </span>MioCampo</p> <p style="margin: 0px;">go</p> <p style="margin: 0px;"> </p> <p style="margin: 0px;"><span style="color: green;">/* Rimuove il default temporaneo */</span></p> <p style="margin: 0px;"><span style="color: blue;">alter table </span>MiaTabella</p> <p style="margin: 0px;"><span style="color: blue;">drop constraint </span>DF_MiaTabella_MioCampo</p> <p style="margin: 0px;">go</p> </div><img src="http://blogs.ugidotnet.org/franx_blog/aggbug/93049.aspx" width="1" height="1" /> Francesco Geri http://blogs.ugidotnet.org/franx_blog/archive/2008/06/16/93049.aspx Mon, 16 Jun 2008 04:45:27 GMT http://blogs.ugidotnet.org/franx_blog/archive/2008/06/16/93049.aspx#feedback 2 http://blogs.ugidotnet.org/franx_blog/comments/commentRss/93049.aspx