<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.ugiss.org/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Il blog di Andrea Benedetti</title><link>http://community.ugiss.org/blogs/abenedetti/default.aspx</link><description>Father, Runner, Climber, Senior Consultant @ Microsoft</description><dc:language>it</dc:language><generator>CommunityServer 2007 SP2 (Debug Build: 20611.960)</generator><item><title>SchemaBinding e tempo perso</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/31/schemabinding-e-tempo-perso.aspx</link><pubDate>Tue, 31 Jan 2012 14:03:15 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8856</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8856</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/31/schemabinding-e-tempo-perso.aspx#comments</comments><description>&lt;p&gt;E un bel giorno alcuni report smisero di funzionare…&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Faccio un passo indietro, ma lo scenario appena descritto è già molto chiaro.&lt;/p&gt;  &lt;p&gt;Reports che accedono ad un db, lo interrogano andando direttamente sulle tabelle e ne presentano i dati.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Cosa succede se viene modificato il nome di una colonna utilizzata dal report?&lt;/p&gt;  &lt;p&gt;Il report smette di funzionare, of course.&lt;/p&gt;  &lt;p&gt;Ok, la domanda: abbiamo modo di dichiarare l’esistenza di una &lt;strong&gt;dipendenza&lt;/strong&gt; di una certa struttura dati (ad esempio una tabella) rispetto a qualche altro oggetto (ad esempio un report)?&lt;/p&gt;  &lt;p&gt;Si, utilizzando delle viste che, grazie all’opzione SCHEMABINDING, possano informare SQL Server di controllare ogni azione che verrà fatta sulle strutture fisiche sottostanti.&lt;/p&gt;  &lt;p&gt;In questo modo, se la modifica invalida la vista, l’operazione di alter (o di drop) table fallisce (ed i nostri report continuano a funzionare).&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8856" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/tips/default.aspx">tips</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/modellazione/default.aspx">modellazione</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/dipendenze/default.aspx">dipendenze</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/schemabinding/default.aspx">schemabinding</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/viste/default.aspx">viste</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/schema/default.aspx">schema</category></item><item><title>Righe duplicate, righe univoche e Physloc</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/16/righe-duplicate-righe-univoche-e-physloc.aspx</link><pubDate>Mon, 16 Jan 2012 17:08:32 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8812</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8812</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/16/righe-duplicate-righe-univoche-e-physloc.aspx#comments</comments><description>&lt;p&gt;Chi si è trovato, almeno una volta, di fronte a tabelle modellate male? ( quante mani alzate … :-) )&lt;/p&gt;  &lt;p&gt;Ad esempio, di fronte a tabelle con righe duplicate, qualcosa come (un esempio stupido):&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;USE &lt;/span&gt;tempdb&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

CREATE TABLE &lt;/span&gt;test&lt;span style="color:gray;"&gt;(
             &lt;/span&gt;col1 &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;3 &lt;span style="color:gray;"&gt;) , 
             &lt;/span&gt;col2 &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;3 &lt;span style="color:gray;"&gt;));
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

INSERT INTO &lt;/span&gt;test
&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;aaa&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;bbb&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;) , 
      ( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;aaa&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;bbb&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;) , 
      ( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;aaa&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;bbb&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

SELECT
       &lt;/span&gt;&lt;span style="color:gray;"&gt;*
  &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;test&lt;span style="color:gray;"&gt;; 
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_4C9C8963.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_7774ED75.png" width="146" height="104" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Come posso cancellare le righe che sono duplicate?&lt;/p&gt;

&lt;p&gt;Direttamente, apparentemente, non posso…&lt;/p&gt;

&lt;p&gt;Cosa intendo? Intendo dire che, per poter recuperare univocamente ciascuna riga, ho la necessità di “costruire” qualcosa che mi renda identificabile ciascuna tupla dalle altre.&lt;/p&gt;

&lt;p&gt;Potrei usare la funzione &lt;strong&gt;ROW_NUMBER&lt;/strong&gt;, ad esempio:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
       &lt;/span&gt;&lt;span style="color:magenta;"&gt;ROW_NUMBER&lt;/span&gt;&lt;span style="color:gray;"&gt;( )
       &lt;/span&gt;&lt;span style="color:blue;"&gt;OVER&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;col1 &lt;span style="color:blue;"&gt;DESC &lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;rowNum &lt;span style="color:gray;"&gt;, 
       *
&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;test&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_05473371.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_373ED3FB.png" width="178" height="97" /&gt;&lt;/a&gt;

&lt;p&gt;Oppure, prendendo spunto da &lt;a href="http://community.ugiss.org/blogs/abenedetti/archive/2012/01/16/datapage-physical-storage-location-e-fn-physlocformatter.aspx" target="_blank"&gt;qui&lt;/a&gt;, potrei usare la colonna virtuale [Physloc] in questo modo:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
       &lt;/span&gt;&lt;span style="color:gray;"&gt;%%&lt;/span&gt;Physloc&lt;span style="color:gray;"&gt;%% &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;Physloc &lt;span style="color:gray;"&gt;, 
       &lt;/span&gt;col1 &lt;span style="color:gray;"&gt;, 
       &lt;/span&gt;col2
  &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;test&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_451119F6.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_24F60D39.png" width="244" height="112" /&gt;&lt;/a&gt;





&lt;p&gt;In questo modo, quindi, ottenendo il binary( 8 ) che rappresenta il &lt;strong&gt;PageID&lt;/strong&gt; (primi 4 bytes), &lt;strong&gt;FileID&lt;/strong&gt; (2 bytes) e &lt;strong&gt;Slot&lt;/strong&gt; (2 bytes) ho sicuramente un’informazione univoca per ciascuna riga.&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8812" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/row_5F00_number/default.aspx">row_number</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/Physloc/default.aspx">Physloc</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/fileid/default.aspx">fileid</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/slot/default.aspx">slot</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/pageid/default.aspx">pageid</category></item><item><title>Datapage, physical storage location e fn_PhysLocFormatter</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/16/datapage-physical-storage-location-e-fn-physlocformatter.aspx</link><pubDate>Mon, 16 Jan 2012 09:10:24 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8808</guid><dc:creator>abenedetti</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8808</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/16/datapage-physical-storage-location-e-fn-physlocformatter.aspx#comments</comments><description>&lt;p&gt;In alcuni casi potrebbe essere utile conoscere la posizione fisica delle nostre righe.&lt;/p&gt;  &lt;p&gt;In sostanza poter conoscere quale sia il “contenitore” che mantiene al suo interno la nostra informazione, le &lt;strong&gt;datapages &lt;/strong&gt;che contengono i dati.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;USE &lt;/span&gt;tempdb&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

CREATE TABLE &lt;/span&gt;anagrafica&lt;span style="color:gray;"&gt;(
             &lt;/span&gt;idAnagrafica &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;, 
             &lt;/span&gt;cognome &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;35 &lt;span style="color:gray;"&gt;) , 
             &lt;/span&gt;nome &lt;span style="color:blue;"&gt;varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;35 &lt;span style="color:gray;"&gt;));
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

INSERT INTO &lt;/span&gt;anagrafica
&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;1 &lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;aaa&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;bbb&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;) , 
      ( &lt;/span&gt;2 &lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;ccc&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;ddd&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;) , 
      ( &lt;/span&gt;3 &lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;eee&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;fff&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

SELECT
       &lt;/span&gt;&lt;span style="color:gray;"&gt;*
  &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;anagrafica&lt;span style="color:gray;"&gt;; 
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_02E6132D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_1B75B07D.png" width="231" height="123" /&gt;&lt;/a&gt;

&lt;p&gt;A questo punto mettiamo il naso dentro le strutture che abbiamo creato:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT
      &lt;/span&gt;&lt;span style="color:gray;"&gt;%%&lt;/span&gt;Physloc&lt;span style="color:gray;"&gt;%% &lt;/span&gt;&lt;span style="color:blue;"&gt;as &lt;/span&gt;Physloc&lt;span style="color:gray;"&gt;,
       &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;fn_PhysLocFormatter&lt;span style="color:gray;"&gt;( %%&lt;/span&gt;Physloc&lt;span style="color:gray;"&gt;%% )&lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;SysStorageLocation &lt;span style="color:gray;"&gt;, 
       &lt;/span&gt;idAnagrafica&lt;span style="color:gray;"&gt;, &lt;/span&gt;cognome&lt;span style="color:gray;"&gt;, &lt;/span&gt;nome
  &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;anagrafica&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_70311975.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_3B248A45.png" width="244" height="65" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;La “pseudo” colonna [Physloc] ci permette di vedere l’indirizzo univoco di ciascuna riga.&lt;/p&gt;

&lt;p&gt;Grazie alla funzione (non documentata) &lt;strong&gt;fn_PhysLocFormatter&lt;/strong&gt; possiamo formattare questo indirizzo in modo da visualizzare l’indirizzo fisico della riga.&lt;/p&gt;

&lt;p&gt;Il risultato viene esposto come:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;file num&lt;/li&gt;

  &lt;li&gt;datapage&lt;/li&gt;

  &lt;li&gt;slot&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Una volta che otteniamo queste info, possiamo vedere le nostre pagine grazie al comando &lt;strong&gt;DBCC PAGE&lt;/strong&gt; passando:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;dbname / dbid&lt;/li&gt;

  &lt;li&gt;file num&lt;/li&gt;

  &lt;li&gt;page num&lt;/li&gt;

  &lt;li&gt;livello di informazioni che vogliamo (printopt)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Dove il “livello di informazioni” può essere:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;0 = header &lt;/li&gt;

  &lt;li&gt;1 = header and hex dump for rows &lt;/li&gt;

  &lt;li&gt;2 = header and the page dump &lt;/li&gt;

  &lt;li&gt;3 = header and detail row information&lt;/li&gt;
&lt;/ul&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;DBCC &lt;/span&gt;TRACEON&lt;span style="color:gray;"&gt;( &lt;/span&gt;3604 &lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;DBCC &lt;/span&gt;PAGE&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;TempDB&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,&lt;/span&gt;1&lt;span style="color:gray;"&gt;,&lt;/span&gt;114&lt;span style="color:gray;"&gt;,&lt;/span&gt;2&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;DBCC &lt;/span&gt;TRACEOFF&lt;span style="color:gray;"&gt;( &lt;/span&gt;3604 &lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_48F6D040.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_13EA4110.png" width="244" height="173" /&gt;&lt;/a&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8808" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/data+pages/default.aspx">data pages</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/fn_5F00_PhysLocFormatter/default.aspx">fn_PhysLocFormatter</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/internals/default.aspx">internals</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/dbcc+page/default.aspx">dbcc page</category></item><item><title>SQL Server Consolidation Guidance</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/10/sql-server-consolidation-guidance.aspx</link><pubDate>Tue, 10 Jan 2012 18:23:26 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8800</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8800</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/10/sql-server-consolidation-guidance.aspx#comments</comments><description>&lt;p&gt;Giusto per non perdere il link giusto, un withepaper molto interessante :-)&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SQL Server Consolidation Guidance&lt;/strong&gt;: &lt;a href="http://msdn.microsoft.com/en-us/library/ee819082.aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;“&lt;em&gt;The goal of this white paper is to provide a framework for choosing among virtualization, multi-database, and multi-instance consolidation strategies for SQL Server Database Engine OLTP applications.&lt;/em&gt;”&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8800" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/withepaper/default.aspx">withepaper</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/consolidation/default.aspx">consolidation</category></item><item><title>SQL Server 2012 Filetable e Fulltext</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/09/sql-server-2012-filetable-e-fulltext.aspx</link><pubDate>Mon, 09 Jan 2012 15:42:25 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8797</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8797</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/09/sql-server-2012-filetable-e-fulltext.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;SQL Server 2012&lt;/strong&gt; aggiunge, alla funzionalità di &lt;a href="http://technet.microsoft.com/en-us/library/bb933993.aspx" target="_blank"&gt;FILESTREAM&lt;/a&gt; (tempo fa ne avevo parlato &lt;a href="http://community.ugiss.org/blogs/abenedetti/archive/2008/01/29/sql-2008-filestream.aspx" target="_blank"&gt;qui&lt;/a&gt;), la possibilità di interagire direttamente con le API di Windows, quindi consente ad un’applicazione di copiare dei files (e/o folder) in un path e lasciare al database engine tutta la sua gestione.&lt;/p&gt;  &lt;p&gt;Diciamo che è il pezzo che mancava… :-)&lt;/p&gt;  &lt;p&gt;Le cose interessanti, poi, sono diverse. Ne cito, per iniziare, due:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;costruire dei trigger che intercettino copie di file “non voluti” e quindi intervenire “al volo”&lt;/li&gt;    &lt;li&gt;gestire un catalogo fulltext e, quindi, indicizzare il contenuto dei files copiati e gestiti&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Vediamo come fare…&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;/*
Enable and Configure FILESTREAM
http://msdn.microsoft.com/en-us/library/cc645923(v=sql.110).aspx

EXEC sp_configure Filestream_Access_level , 2;
RECONFIGURE;
GO
*/

&lt;/span&gt;&lt;span style="color:blue;"&gt;USE MASTER&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

IF &lt;/span&gt;&lt;span style="color:magenta;"&gt;DB_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;FileTableDB&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;)IS NOT NULL
    &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN
        DROP DATABASE &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDB&lt;/span&gt;&lt;span style="color:gray;"&gt;;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

&lt;/span&gt;&lt;span style="color:green;"&gt;/*
Creazione del database
con FILESTREAM
*/
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE DATABASE &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDB &lt;/span&gt;&lt;span style="color:blue;"&gt;ON PRIMARY
&lt;/span&gt;&lt;span style="color:gray;"&gt;( 
    &lt;/span&gt;&lt;span style="color:teal;"&gt;NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDB &lt;/span&gt;&lt;span style="color:gray;"&gt;, 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;C:\SQL2012\db\FileTableDb\FileTableDB_Data.mdf&amp;#39; 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;) , 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;FILEGROUP &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDBFS &lt;/span&gt;&lt;span style="color:magenta;"&gt;CONTAINS 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FILESTREAM
        &lt;/span&gt;&lt;span style="color:gray;"&gt;( 
            &lt;/span&gt;&lt;span style="color:teal;"&gt;NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDBFS &lt;/span&gt;&lt;span style="color:gray;"&gt;, 
            &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;C:\SQL2012\db\FileTableDb\FileTableDbFileStream&amp;#39;
        &lt;/span&gt;&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:magenta;"&gt;LOG &lt;/span&gt;&lt;span style="color:blue;"&gt;ON
    &lt;/span&gt;&lt;span style="color:gray;"&gt;( 
        &lt;/span&gt;&lt;span style="color:teal;"&gt;NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDBLog &lt;/span&gt;&lt;span style="color:gray;"&gt;, 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;FILENAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;C:\SQL2012\db\FileTableDb\FileTableDB_Log.ldf&amp;#39; 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO


&lt;/span&gt;&lt;span style="color:green;"&gt;/*
Specifico il livello di accesso non transazionale a livello di database
Questo per poter ottenere un file handle senza la necessità di una transazione
*/
&lt;/span&gt;&lt;span style="color:blue;"&gt;ALTER DATABASE &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDB 
    &lt;/span&gt;&lt;span style="color:blue;"&gt;SET FILESTREAM 
    &lt;/span&gt;&lt;span style="color:gray;"&gt;( 
    &lt;/span&gt;&lt;span style="color:teal;"&gt;NON_TRANSACTED_ACCESS &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:blue;"&gt;FULL&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;DIRECTORY_NAME &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N&amp;#39;FileTableDbFileStream&amp;#39;
    &lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

&lt;/span&gt;&lt;span style="color:green;"&gt;/*
Passo al database utente
*/
&lt;/span&gt;&lt;span style="color:blue;"&gt;USE &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTableDB&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

&lt;/span&gt;&lt;span style="color:green;"&gt;/*
Creo una tabella FileTable
*/
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;&lt;span style="color:teal;"&gt;tblFileTableTest &lt;/span&gt;&lt;span style="color:blue;"&gt;AS FileTable
WITH
&lt;/span&gt;&lt;span style="color:gray;"&gt;(
        &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTable_Directory &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;tblFileTableTest&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;,
        &lt;/span&gt;&lt;span style="color:teal;"&gt;FileTable_Collate_Filename &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:teal;"&gt;database_default
&lt;/span&gt;&lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

&lt;/span&gt;&lt;span style="color:green;"&gt;/*
A questo punto posso aprire una share di rete composta come:
\\nomeMacchina\nomeistanza\directoryName\fileTableDirectory

Quindi, nel mio caso, posso aprire:
\\Abalien\sql2012\FileTableDbFileStream\tblFileTableTest
*/

/* Ecco come posso recuperare il path alla document library: */
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta;"&gt;FileTableRootPath&lt;/span&gt;&lt;span style="color:gray;"&gt;() &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;FileTablePath&amp;#39; 
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_411DA32F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_00E789B5.png" width="244" height="84" /&gt;&lt;/a&gt;&lt;/pre&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;/*
vedo la tabella (vuota)
*/
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;*
  &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:teal;"&gt;tblFileTableTest&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO


&lt;/span&gt;&lt;span style="color:green;"&gt;/*
Aggiungo un trigger alla tabella perchè, per ipotesi,
voglio interrompere operazioni di copia se contenenti file TXT
*/
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE TRIGGER &lt;/span&gt;&lt;span style="color:teal;"&gt;dbo&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;ControlFileTXT &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:teal;"&gt;tblFileTableTest
    &lt;/span&gt;&lt;span style="color:blue;"&gt;FOR INSERT &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:magenta;"&gt;UPDATE
&lt;/span&gt;&lt;span style="color:blue;"&gt;AS
IF &lt;/span&gt;&lt;span style="color:gray;"&gt;EXISTS( &lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;1
             &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:teal;"&gt;inserted
             &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:teal;"&gt;inserted&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;file_type &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;txt&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN
        ROLLBACK&lt;/span&gt;&lt;span style="color:gray;"&gt;;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;A questo punto posso fare drag &amp;amp; drop di files all’interno del mio folder e ritrovarli in tabella:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_79C84D3C.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_59AD407F.png" width="244" height="116" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Oppure posso provare a copiare dei TXT e ricevere un errore di copia:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_007B56C0.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_27496D00.png" width="244" height="187" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Fatto questo abilitiamo l’indicizzazione FULLTEXT sul nostro database e sulla nostra tabella:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;/* Abilitiamo catalogo e indicizzazione FULLTEXT */
&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE FULLTEXT CATALOG &lt;/span&gt;&lt;span style="color:teal;"&gt;filetableCat&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

CREATE UNIQUE INDEX &lt;/span&gt;&lt;span style="color:teal;"&gt;ui_document &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:teal;"&gt;tblFileTableTest&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:teal;"&gt;stream_id &lt;/span&gt;&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO

CREATE FULLTEXT INDEX ON &lt;/span&gt;&lt;span style="color:teal;"&gt;tblFileTableTest
&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:teal;"&gt;file_stream &lt;/span&gt;&lt;span style="color:blue;"&gt;TYPE COLUMN &lt;/span&gt;&lt;span style="color:teal;"&gt;name &lt;/span&gt;&lt;span style="color:blue;"&gt;LANGUAGE &lt;/span&gt;1033 &lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;KEY INDEX &lt;/span&gt;&lt;span style="color:teal;"&gt;ui_document &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:teal;"&gt;filetableCat &lt;/span&gt;&lt;span style="color:blue;"&gt;WITH CHANGE_TRACKING AUTO&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO


&lt;/span&gt;&lt;span style="color:green;"&gt;/* Vediamo lo stato di indicizzazione */
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT CASE &lt;/span&gt;&lt;span style="color:magenta;"&gt;FULLTEXTCATALOGPROPERTY&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;filetableCat&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Populatestatus&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;)
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;0 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Idle&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Full population in progress &amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;2 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Paused&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;3 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Throttled&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;4 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Recovering&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;5 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Shutdown&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;6 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Incremental population in progress&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;7 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Building index&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;8 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Disk is full. Paused.&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;9 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Change tracking&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;END AS &lt;/span&gt;&lt;span style="color:teal;"&gt;populateStatus &lt;/span&gt;&lt;span style="color:gray;"&gt;, 
       &lt;/span&gt;&lt;span style="color:blue;"&gt;CASE &lt;/span&gt;&lt;span style="color:magenta;"&gt;FULLTEXTCATALOGPROPERTY&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;filetableCat&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;AccentSensitivity&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;)
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;0 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Accent insensitive&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;WHEN &lt;/span&gt;1 &lt;span style="color:blue;"&gt;THEN &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Accent sensitive&amp;#39;
       &lt;/span&gt;&lt;span style="color:blue;"&gt;END AS &lt;/span&gt;&lt;span style="color:teal;"&gt;AccentSensitivity &lt;/span&gt;&lt;span style="color:gray;"&gt;, 
       &lt;/span&gt;&lt;span style="color:magenta;"&gt;FULLTEXTCATALOGPROPERTY&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;filetableCat&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;ItemCount&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;ItemCount&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attenzione&lt;/strong&gt;: ricordiamoci che NON tutti i tipi di file sono immediatamente indicizzabili (per alcuni, come il PDF, serve installare il suo iFilter)&lt;/p&gt;

&lt;p&gt;Per vedere le estensioni conosciute:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:green;"&gt;sys&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:green;"&gt;fulltext_document_types&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;/pre&gt;




&lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_202A3088.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_71D0AADA.png" width="244" height="99" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Una volta copiati files nella nostra tabella filetable possiamo farne una ricerca testuale con una query come:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:green;"&gt;/* Test di ricerca */
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:teal;"&gt;@SearchWord &lt;/span&gt;&lt;span style="color:blue;"&gt;nvarchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;300 &lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;&lt;span style="color:teal;"&gt;@SearchWord &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;&amp;quot;enabling end users&amp;quot;&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;;

&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:teal;"&gt;name
  &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:teal;"&gt;dbo&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;tblFileTableTest FT 
  &lt;/span&gt;&lt;span style="color:gray;"&gt;JOIN &lt;/span&gt;&lt;span style="color:blue;"&gt;CONTAINSTABLE
    &lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:teal;"&gt;dbo&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;tblFileTableTest &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;file_stream &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:teal;"&gt;@SearchWord &lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;&lt;span style="color:teal;"&gt;T 
        &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:teal;"&gt;FT&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;stream_id &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:teal;"&gt;T&lt;/span&gt;&lt;span style="color:gray;"&gt;.&lt;/span&gt;&lt;span style="color:teal;"&gt;[key]&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;GO
&lt;/span&gt;&lt;/pre&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8797" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/fulltext/default.aspx">fulltext</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/sql+server+2012/default.aspx">sql server 2012</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/filetable/default.aspx">filetable</category></item><item><title>Upgrade Assistant for SQL Server 2012</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/09/upgrade-assistant-for-sql-server-2012.aspx</link><pubDate>Mon, 09 Jan 2012 12:42:35 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8795</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8795</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/09/upgrade-assistant-for-sql-server-2012.aspx#comments</comments><description>&lt;p&gt;E’ disponibile in download &lt;a href="http://www.scalabilityexperts.com/tools/index.html" target="_blank"&gt;qui&lt;/a&gt; il nuovo Upgrade Assistant per &lt;strong&gt;SQL Server 2012&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;La pagina wiki del tool &lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/sql-server-upgrade-assistant-tool-for-denali.aspx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8795" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/upgrade/default.aspx">upgrade</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/sql+server+2012/default.aspx">sql server 2012</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/upgrade+assistant/default.aspx">upgrade assistant</category></item><item><title>Database mail e dimensione query result</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/08/database-mail-e-dimensione-query-result.aspx</link><pubDate>Sun, 08 Jan 2012 14:41:13 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8791</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8791</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2012/01/08/database-mail-e-dimensione-query-result.aspx#comments</comments><description>&lt;p&gt;Facendo un pò di manutenzione su alcuni job dei nostri server, trovo questo errore su uno di essi:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Executed as user: XXXXXXXXXXXXXx. File attachment or query results size exceeds allowable value of 1000000 bytes. [SQLSTATE 42000] (Error 22050).&amp;#160; The step failed.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Il job in questione effettua una semplice query ed invia, via mail, il suo risultato.&lt;/p&gt;  &lt;p&gt;Qualcosa come questo:&lt;/p&gt; &lt;em&gt;EXEC msdb.dbo.sp_send_dbmail   &lt;br /&gt;@profile_name = &amp;#39;XXXXXXXXXXXXxx&amp;#39;,    &lt;br /&gt;@recipients = &amp;#39;XXXXXXXXXXXXX&amp;#39;,    &lt;br /&gt;@query = &amp;#39;use myDatabase; SELECT … ‘,    &lt;br /&gt;@subject = &amp;#39;…..&amp;#39;,    &lt;br /&gt;@query_result_no_padding =0;&lt;/em&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Evidentemente (il messaggio è chiaro) il resultset è cresciuto a tal punto da eccedere la dimensione massima spedibile.&lt;/p&gt;  &lt;p&gt;Come risolvo? &lt;/p&gt;  &lt;p&gt;Apro la configurazione della mail (sul nodo “Management del SSMS, “Database Mail”, tasto dx, “Configure Database Mail”), “next” sulla prima videata, e poi “view or change system parameters”:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_65F61C56.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_7DAD53BC.png" width="244" height="177" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Quindi modifico il valore a mia descrizione:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_115A3D51.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_54C23EB3.png" width="244" height="193" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8791" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/manutenzione/default.aspx">manutenzione</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/jobs/default.aspx">jobs</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/tips/default.aspx">tips</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/agent/default.aspx">agent</category></item><item><title>SQL Server 2012, GEOMETRY, circonferenze</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2011/12/21/sql-server-2012-geometry-circonferenze.aspx</link><pubDate>Wed, 21 Dec 2011 16:37:41 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8756</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8756</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2011/12/21/sql-server-2012-geometry-circonferenze.aspx#comments</comments><description>&lt;p&gt;Chi ha avuto la necessità di lavorare con il tipo GEOMETRY in SQL Server 2008 potrebbe aver avuto la necessità di utilizzare delle forme circolari.&lt;/p&gt;  &lt;p&gt;Un paio di metodi per costruire cerchi:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@g &lt;span style="color:blue;"&gt;geometry&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@g &lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Point(10 5)&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;@g&lt;span style="color:gray;"&gt;.&lt;/span&gt;STBuffer&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;);&lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_7470C3EC.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_5A9C8DBD.png" width="244" height="219" /&gt;&lt;/a&gt;

&lt;p&gt;Oppure:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@p &lt;span style="color:blue;"&gt;AS float &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;360&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@count &lt;span style="color:blue;"&gt;AS int &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;0&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@tmpTable &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;geo &lt;span style="color:blue;"&gt;geometry &lt;/span&gt;&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@count &lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;@p&lt;span style="color:gray;"&gt;)
    &lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN
        INSERT INTO &lt;/span&gt;@tmpTable
        &lt;span style="color:blue;"&gt;SELECT geometry&lt;/span&gt;&lt;span style="color:gray;"&gt;::&lt;/span&gt;STGeomFromText&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;POINT(&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;SIN&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:magenta;"&gt;RADIANS&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@count &lt;span style="color:blue;"&gt;AS float&lt;/span&gt;&lt;span style="color:gray;"&gt;) / &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@p &lt;span style="color:blue;"&gt;AS float&lt;/span&gt;&lt;span style="color:gray;"&gt;) * &lt;/span&gt;@p &lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:magenta;"&gt;COS&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:magenta;"&gt;RADIANS&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@count &lt;span style="color:blue;"&gt;AS float&lt;/span&gt;&lt;span style="color:gray;"&gt;) / &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@p &lt;span style="color:blue;"&gt;AS float&lt;/span&gt;&lt;span style="color:gray;"&gt;) * &lt;/span&gt;@p &lt;span style="color:gray;"&gt;))&lt;/span&gt;&lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;)&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;4326 &lt;span style="color:gray;"&gt;)&lt;/span&gt;&lt;span style="color:blue;"&gt;AS &lt;/span&gt;Posn&lt;span style="color:gray;"&gt;;
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@count &lt;span style="color:gray;"&gt;= &lt;/span&gt;@count &lt;span style="color:gray;"&gt;+ &lt;/span&gt;1&lt;span style="color:gray;"&gt;;
    &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;geo
  &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;@tmpTable&lt;span style="color:gray;"&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_52A4EB5B.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_31B178B4.png" width="244" height="237" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SQL Server 2012&lt;/strong&gt; introduce il tipo (subtype) “curva”, evidentemente utile anche per costruire circonferenze:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;declare &lt;/span&gt;&lt;span style="color:teal;"&gt;@g &lt;/span&gt;&lt;span style="color:blue;"&gt;geometry &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;CIRCULARSTRING(0 2, 2 0, 4 2, 2 4, 0 2)&amp;#39;
&lt;/span&gt;&lt;span style="color:blue;"&gt;select &lt;/span&gt;&lt;span style="color:teal;"&gt;@g
&lt;/span&gt;&lt;/pre&gt;


&lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_6264805F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_7A87EABA.png" width="244" height="228" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lascio, di seguito, anche il link per scaricare il whitepaper “New Spatial Features in SQL Server Code-Named &amp;quot;Denali&amp;quot;: &lt;a href="http://download.microsoft.com/download/D/2/0/D20E1C5F-72EA-4505-9F26-FEF9550EFD44/SQLServer_Denali_Spatial.docx" target="_blank"&gt;qui&lt;/a&gt;.&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8756" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/spatial/default.aspx">spatial</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/geometry/default.aspx">geometry</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/sql+server+2012/default.aspx">sql server 2012</category></item><item><title>Merry SQL Christmas</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2011/12/19/merry-sql-christmas.aspx</link><pubDate>Mon, 19 Dec 2011 17:04:00 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:8751</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=8751</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2011/12/19/merry-sql-christmas.aspx#comments</comments><description>&lt;p&gt;Quasi, quasi,&amp;#160; mi spavento a vedere il numero di mesi che è trascorso dall’ultimo mio post… &lt;img class="wlEmoticon wlEmoticon-sadsmile" alt="Triste" src="http://community.ugiss.org/blogs/abenedetti/wlEmoticon-sadsmile_1A714F49.png" /&gt;&lt;/p&gt;  &lt;p&gt;E quanta acqua (o quanto SQL…) è passata sotto i ponti…&lt;/p&gt;  &lt;p&gt;Allora, quale migliore motivo per ripartire alla grande, con buoni propositi di scrittura, con un post di auguri (o di “SQL Auguri”)?&lt;/p&gt;  &lt;p&gt;Prendiamo il tipo GEOMETRY e… Merry Christmas a tutti voi!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/SqlChristmas_135212D1.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SqlChristmas" border="0" alt="SqlChristmas" src="http://community.ugiss.org/blogs/abenedetti/SqlChristmas_thumb_5E4583A0.png" width="244" height="132" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Giusto per giocare dietro le quinte (se vi piace un albero con un livello minore di rami vi basta cambiare una variabile) … un pò di TSQL:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:green;"&gt;/*
    
********************
Happy SQL Christmas!
********************

Andrea Benedetti, SQL Server MVP

Twitter: @anbenedetti
Mail: abenedetti@absistemi.it
*/

&lt;/span&gt;&lt;span style="color:blue;"&gt;SET NOCOUNT ON&lt;/span&gt;&lt;span style="color:gray;"&gt;;

&lt;/span&gt;&lt;span style="color:green;"&gt;/* please choose the level of the tree... :-) */
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@level &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;10&lt;span style="color:gray;"&gt;;


&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@i &lt;span style="color:blue;"&gt;tinyint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;1&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@Offset &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;10&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@x1 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;100&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@y1 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;100&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@x2 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;150&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@y2 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;100&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@x3 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;125&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@y3 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;115&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@x4 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;100&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@y4 &lt;span style="color:blue;"&gt;smallint &lt;/span&gt;&lt;span style="color:gray;"&gt;= &lt;/span&gt;100&lt;span style="color:gray;"&gt;;

&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@Tree &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;Id &lt;span style="color:blue;"&gt;tinyint IDENTITY&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;1 &lt;span style="color:gray;"&gt;, &lt;/span&gt;1&lt;span style="color:gray;"&gt;) , 
                       &lt;/span&gt;Triangle &lt;span style="color:blue;"&gt;geometry &lt;/span&gt;&lt;span style="color:gray;"&gt;);
&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;@Palline &lt;span style="color:blue;"&gt;TABLE&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;Id &lt;span style="color:blue;"&gt;tinyint IDENTITY&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;1 &lt;span style="color:gray;"&gt;, &lt;/span&gt;1&lt;span style="color:gray;"&gt;) , 
                        &lt;/span&gt;Ball &lt;span style="color:blue;"&gt;geometry &lt;/span&gt;&lt;span style="color:gray;"&gt;); 

&lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE &lt;/span&gt;@i &lt;span style="color:gray;"&gt;&amp;lt;= &lt;/span&gt;@level
    &lt;span style="color:blue;"&gt;BEGIN

        INSERT INTO &lt;/span&gt;@Tree&lt;span style="color:gray;"&gt;( &lt;/span&gt;Triangle &lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:blue;"&gt;geometry&lt;/span&gt;&lt;span style="color:gray;"&gt;::&lt;/span&gt;STGeomFromText&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;POLYGON ((&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x2 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y2 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x3 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y3 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x4 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y4 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;))&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;0 &lt;span style="color:gray;"&gt;));

        &lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;@Palline&lt;span style="color:gray;"&gt;( &lt;/span&gt;Ball &lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:blue;"&gt;geometry&lt;/span&gt;&lt;span style="color:gray;"&gt;::&lt;/span&gt;STGeomFromText&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;POINT(&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;)&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;0 &lt;span style="color:gray;"&gt;));
        &lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;@Palline&lt;span style="color:gray;"&gt;( &lt;/span&gt;Ball &lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:blue;"&gt;geometry&lt;/span&gt;&lt;span style="color:gray;"&gt;::&lt;/span&gt;STGeomFromText&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;POINT(&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x2 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y2 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;)&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;0 &lt;span style="color:gray;"&gt;));
        &lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;@Palline&lt;span style="color:gray;"&gt;( &lt;/span&gt;Ball &lt;span style="color:gray;"&gt;)
        &lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:blue;"&gt;geometry&lt;/span&gt;&lt;span style="color:gray;"&gt;::&lt;/span&gt;STGeomFromText&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;POINT(&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x3 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y3 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;)&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;0 &lt;span style="color:gray;"&gt;));


        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@x1&lt;span style="color:gray;"&gt;-=&lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@x2&lt;span style="color:gray;"&gt;+=&lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@x4&lt;span style="color:gray;"&gt;-=&lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;

        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@y1&lt;span style="color:gray;"&gt;-=&lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@y2&lt;span style="color:gray;"&gt;-=&lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@y3&lt;span style="color:gray;"&gt;-=&lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@y4&lt;span style="color:gray;"&gt;-=&lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;

        &lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@i&lt;span style="color:gray;"&gt;+=&lt;/span&gt;1&lt;span style="color:gray;"&gt;;

    &lt;/span&gt;&lt;span style="color:blue;"&gt;END&lt;/span&gt;&lt;span style="color:gray;"&gt;;

&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@x1 &lt;span style="color:gray;"&gt;= &lt;/span&gt;@x3 &lt;span style="color:gray;"&gt;- &lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@x2 &lt;span style="color:gray;"&gt;= &lt;/span&gt;@x3 &lt;span style="color:gray;"&gt;+ &lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@x3 &lt;span style="color:gray;"&gt;= &lt;/span&gt;@x3 &lt;span style="color:gray;"&gt;+ &lt;/span&gt;@Offset&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;@x4 &lt;span style="color:gray;"&gt;= &lt;/span&gt;@x2&lt;span style="color:gray;"&gt;;


&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;@Tree&lt;span style="color:gray;"&gt;( &lt;/span&gt;Triangle &lt;span style="color:gray;"&gt;)
&lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:blue;"&gt;geometry&lt;/span&gt;&lt;span style="color:gray;"&gt;::&lt;/span&gt;STGeomFromText&lt;span style="color:gray;"&gt;( &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;POLYGON ((&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x2 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y2 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x2 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y3 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y3 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;,&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@x1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39; &amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:magenta;"&gt;CAST&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;@y1 &lt;span style="color:blue;"&gt;AS varchar&lt;/span&gt;&lt;span style="color:gray;"&gt;( &lt;/span&gt;5 &lt;span style="color:gray;"&gt;)) + &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;))&amp;#39; &lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;0 &lt;span style="color:gray;"&gt;));

&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:red;"&gt;&amp;#39;Happy SQL Christmas !!!&amp;#39;&lt;/span&gt;&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;Triangle
  &lt;span style="color:blue;"&gt;FROM &lt;/span&gt;@Tree
&lt;span style="color:blue;"&gt;UNION &lt;/span&gt;&lt;span style="color:gray;"&gt;ALL
&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;Ball&lt;span style="color:gray;"&gt;.&lt;/span&gt;STBuffer&lt;span style="color:gray;"&gt;( &lt;/span&gt;3 &lt;span style="color:gray;"&gt;)
  &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;@Palline&lt;span style="color:gray;"&gt;;
&lt;/span&gt;&lt;/pre&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=8751" width="1" height="1"&gt;</description></item><item><title>[SQL Conference] Self Service Reporting with SSRS 2008 R2</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2010/04/18/sql-conference-self-service-reporting-with-ssrs-2008-r2.aspx</link><pubDate>Sun, 18 Apr 2010 19:47:42 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:7299</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=7299</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2010/04/18/sql-conference-self-service-reporting-with-ssrs-2008-r2.aspx#comments</comments><description>&lt;p&gt;Ho appena terminato le demo per la &lt;a href="http://www.sqlconference.it/sessions.aspx#s28"&gt;sessione&lt;/a&gt; Reporting della &lt;a href="http://www.sqlconference.it"&gt;SQL Conference&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Appena in tempo :-)&lt;/p&gt;  &lt;p&gt;Sono soddisfatto, credo di riuscire a far vedere un pò di fuochi d’artificio:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;pubblicazione / condivisione di report parts&lt;/li&gt;    &lt;li&gt;utilizzo di shared datasets&lt;/li&gt;    &lt;li&gt;nuove visualizzazioni grafiche: &lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;sparklines&lt;/li&gt;      &lt;li&gt;maps e dati geografici&lt;/li&gt;   &lt;/ul&gt;    &lt;li&gt;join di datasets&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=7299" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/reporting+services/default.aspx">reporting services</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/sql+server+2008+r2/default.aspx">sql server 2008 r2</category></item><item><title>WCP: è andata</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/27/wcp-232-andata.aspx</link><pubDate>Fri, 27 Nov 2009 09:17:03 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:6818</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=6818</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/27/wcp-232-andata.aspx#comments</comments><description>&lt;p&gt;Si è concluso ieri l’ormai classico appuntamento annuale di WPC.&lt;/p&gt;  &lt;p&gt;Personalmente la migliore WPC a cui abbia mai partecipato: molto emozionante e ricca di sorprese!&lt;/p&gt;  &lt;p&gt;Per me: indimenticabile.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Ottime le sessioni, ottimi i feedback, ottima l’aria che si respirava!&lt;/p&gt;  &lt;p&gt;Ringrazio i partecipanti, lo staff e tutta l’organizzazione per l’immenso lavoro svolto.&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=6818" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/wpc/default.aspx">wpc</category></item><item><title>WPC 2009, si parte</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/23/wpc-2009-si-parte.aspx</link><pubDate>Mon, 23 Nov 2009 11:59:00 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:6799</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=6799</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/23/wpc-2009-si-parte.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://techdays-wpc.it/"&gt;WPC&lt;/a&gt;, come tutti gli anni, è arrivata.    &lt;br /&gt;Domani, 24 Novembre, si apriranno i cancelli della più grande conferenza ICT italiana sulle tecnologie &lt;strong&gt;Microsoft&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;Come al solito saremo al gran completo insieme a &lt;a href="http://community.ugiss.org/blogs/dmauri/"&gt;Davide&lt;/a&gt; e &lt;a href="http://community.ugiss.org/blogs/ghotz/"&gt;Gianluca&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Ecco di cosa parlerò: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Come scrivere T-SQL efficiente ed evitare i problemi più comuni&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;La sessione, che è un pò l&amp;#39;antipasto del nostro corso &amp;quot;&lt;a href="http://learning.solidq.com/it/CourseDetail.aspx?IdCourse=445"&gt;SQL Server Development Best Practices&lt;/a&gt;&amp;quot;, cercherà di far luce su alcuni aspetti basilari per sviluppare applicazioni migliori e più performanti. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Nella seconda sessione giocherò con i Reporting Services:   &lt;br /&gt;&lt;strong&gt;Dieci buoni motivi per utilizzare al massimo Microsoft SQL Server 2008 Reporting Services&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Questa è la lista che mi sono fatto e di cui discuteremo: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Datasources&lt;/li&gt;    &lt;li&gt;Integration&lt;/li&gt;    &lt;li&gt;Extensible platform&lt;/li&gt;    &lt;li&gt;User eXperience&lt;/li&gt;    &lt;li&gt;Data region&lt;/li&gt;    &lt;li&gt;SQL Server 2008 Features&lt;/li&gt;    &lt;li&gt;Performance, scalability. From Express to Enterprise&lt;/li&gt;    &lt;li&gt;Configuration, logging&lt;/li&gt;    &lt;li&gt;Report Builder: self service reporting solution&lt;/li&gt;    &lt;li&gt;RS without RS &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Se qualcuno passasse dalla conferenza... si faccia riconoscere!&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=6799" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/reporting+services/default.aspx">reporting services</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/TSQL/default.aspx">TSQL</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/wpc/default.aspx">wpc</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/reportin/default.aspx">reportin</category></item><item><title>BIDS Helper</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/20/bids-helper.aspx</link><pubDate>Thu, 19 Nov 2009 23:03:11 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:6780</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=6780</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/20/bids-helper.aspx#comments</comments><description>&lt;p&gt;Non ricordavo questo link.&lt;/p&gt;  &lt;p&gt;Lo segno a beneficio di tutti :-)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;A Visual Studio.Net add-in with features that extend and enhance the functionality of the SQL Server 2005 and SQL Server 2008 BI Development Studio (BIDS).&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;Qui: &lt;a href="http://www.codeplex.com/bidshelper"&gt;http://www.codeplex.com/bidshelper&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=6780" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/visual+studio+2008/default.aspx">visual studio 2008</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/visual+studio/default.aspx">visual studio</category></item><item><title>Filestream Best Practice</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/08/filestream-best-practice.aspx</link><pubDate>Sun, 08 Nov 2009 21:18:50 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:6745</guid><dc:creator>abenedetti</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=6745</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2009/11/08/filestream-best-practice.aspx#comments</comments><description>&lt;p&gt;Chi segue questo blog saprà che, ormai da mesi, &lt;a href="http://www.omniadoc.it"&gt;stiamo lavorando&lt;/a&gt; pesantemente con il FILESTREAM di SQL Server 2008.&lt;/p&gt;  &lt;p&gt;Lo scopo di questo post è raccogliere e mettere in ordine alcune &lt;strong&gt;best practices&lt;/strong&gt; il cui scopo è solo e soltanto quello di massimizzare le performance:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;se utilizziamo diversi filegroup per oggetti FILESTREAM: dischi separati&lt;/li&gt;    &lt;li&gt;ragionare attentamente sull’utilizzo di volumi compressi (carico CPU)&lt;/li&gt;    &lt;li&gt;deframmentare periodicamente i dischi&lt;/li&gt;    &lt;li&gt;utilizzare un corretto RAID a seconda dell’utilizzo dell’applicazione (read / write intensive)&lt;/li&gt; &lt;/ul&gt;  &lt;ul&gt;   &lt;li&gt;disabilitare i nomi 8.3 su NTFS&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;questa opzione crea, per il file, un secondo nome. Solo per retro-compatibilità con applicazioni 16-bit&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_1A273A1A.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_18E2A13B.png" width="385" height="106" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;il comando richiede privilegi amministrativi&lt;/li&gt;    &lt;li&gt;il comando disabilita la generazione dei nomi su &lt;strong&gt;tutti&lt;/strong&gt; i volumi NTFS della macchina&lt;/li&gt;    &lt;li&gt;effettuare un restart della macchina&lt;/li&gt; &lt;/ol&gt;  &lt;ul&gt;   &lt;li&gt;disabilitare “last access time tracking” su NTFS&lt;/li&gt;    &lt;ul&gt;     &lt;li&gt;probabilmente è un’informazione che non ci serve&lt;/li&gt;   &lt;/ul&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/image_25704E57.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://community.ugiss.org/blogs/abenedetti/image_thumb_11E2EEB6.png" width="413" height="103" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;NB:&lt;/strong&gt;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;effettuare un restart della macchina&lt;/li&gt; &lt;/ol&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=6745" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/performance/default.aspx">performance</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/filestream/default.aspx">filestream</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/best+practices/default.aspx">best practices</category></item><item><title>RS 2005, toolbar, reportserver, file axd e problemi di render</title><link>http://community.ugiss.org/blogs/abenedetti/archive/2009/07/30/rs-2005-toolbar-reportserver-file-axd-e-problemi-di-render.aspx</link><pubDate>Thu, 30 Jul 2009 15:25:51 GMT</pubDate><guid isPermaLink="false">696bf4df-f0eb-4942-9326-ff40615b13e5:6518</guid><dc:creator>abenedetti</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://community.ugiss.org/blogs/abenedetti/rsscomments.aspx?PostID=6518</wfw:commentRss><comments>http://community.ugiss.org/blogs/abenedetti/archive/2009/07/30/rs-2005-toolbar-reportserver-file-axd-e-problemi-di-render.aspx#comments</comments><description>&lt;p&gt;Come direbbe un mio amico, un comportamento &lt;strong&gt;inquietante&lt;/strong&gt; mi ha rovinato quasi un’intera giornata…&lt;/p&gt;  &lt;p&gt;Scenario: macchina SQL Server 2005 SP2 con Reporting Services acceduti via URL.&lt;/p&gt;  &lt;p&gt;I report si vedono perfettamente dal &lt;strong&gt;Report Manager&lt;/strong&gt; (&lt;a title="http://srvsql/Reports" href="http://srvsql/Reports"&gt;http://srvsql/Reports&lt;/a&gt;) ma non dal &lt;strong&gt;Report Server&lt;/strong&gt; (&lt;a title="http://srvsql/Reportserver" href="http://srvsql/Reportserver"&gt;http://srvsql/Reportserver&lt;/a&gt;)&lt;/p&gt;  &lt;p&gt;Questo quello che si ottiene:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/rs1_60F3F470.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="rs1" border="0" alt="rs1" src="http://community.ugiss.org/blogs/abenedetti/rs1_thumb_5104AFAC.png" width="322" height="70" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La toolbar &lt;strong&gt;non&lt;/strong&gt; viene renderizzata ed il report &lt;strong&gt;non&lt;/strong&gt; viene caricato / visualizzato (il report viene invece elaborato correttamente se viene specificato sulla URL il parametro &lt;strong&gt;rc:toolbar=false&lt;/strong&gt;).&lt;/p&gt;  &lt;p&gt;Oltre a questo decine di errori javascript, come questi:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Error: &amp;#39;RSClientController&amp;#39; is undefined&lt;/li&gt;    &lt;li&gt;Error: &amp;#39;ReportViewerHoverButton&amp;#39; is undefined&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;La macchina è un Win 2003 Srv R2 e quindi non si tratta del “noto” problema di IIS7:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/webtopics/archive/2009/02/10/report-viewer-toolbar-does-not-render-properly-on-iis-7-0.aspx"&gt;Report Viewer Toolbar does not render properly on IIS 7.0&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;La soluzione, dopo diversi deliri, è stata la seguente:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;1. accedere ad IIS ed entrare nelle &lt;strong&gt;proprietà&lt;/strong&gt; dell’applicazione &lt;strong&gt;ReportServer&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/rs0_16A939CB.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="rs0" border="0" alt="rs0" src="http://community.ugiss.org/blogs/abenedetti/rs0_thumb_5CB9F6DE.png" width="242" height="58" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;2. accedere alla sua configurazione&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/rs3_3B5A5142.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="rs3" border="0" alt="rs3" src="http://community.ugiss.org/blogs/abenedetti/rs3_thumb_2119E81E.png" width="315" height="115" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;3. verificare la “wildcard application maps” per il filto ISAPI &lt;strong&gt;aspnet_isapi.dll&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/rs4_4A41805C.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="rs4" border="0" alt="rs4" src="http://community.ugiss.org/blogs/abenedetti/rs4_thumb_30011738.png" width="307" height="133" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;4. deselezionare (perchè era selezionato!) il checkbox “&lt;em&gt;verify that file exists&lt;/em&gt;”&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.ugiss.org/blogs/abenedetti/rs2_15547B1F.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="rs2" border="0" alt="rs2" src="http://community.ugiss.org/blogs/abenedetti/rs2_thumb_1B2F1EB8.png" width="301" height="94" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Ok, tutto regolare!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Perchè questo flag deve essere disabilitato?&lt;/p&gt;  &lt;p&gt;Perchè le richieste che arrivano ad IIS sono (basta aprire il sorgente HTML di un report) anche di questo tipo:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;&amp;lt;script src=&amp;quot;/ReportServer/Reserved.ReportViewerWebControl.axd?…&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Questo file &lt;strong&gt;axd&lt;/strong&gt;, in realtà,&amp;#160; non esiste ma viene trattato dai binari del report server :-)&lt;/p&gt;  &lt;p&gt;La toolbar, infatti, non esiste fisicamente da nessuna parte, ma si trova all’interno del compilato dell’applicazione.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Mi resta solo una domanda (per cui ora non ho risposta): chi / cosa aveva selezionato il checkbox incriminato?!?!&lt;/p&gt;&lt;img src="http://community.ugiss.org/aggbug.aspx?PostID=6518" width="1" height="1"&gt;</description><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/report+viewer/default.aspx">report viewer</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/reporting+services/default.aspx">reporting services</category><category domain="http://community.ugiss.org/blogs/abenedetti/archive/tags/report+server/default.aspx">report server</category></item></channel></rss>
