<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Andrea Benedetti Blog</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 03:30:03 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Happy New Year :)</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/happy-new-year</link>
      <pubDate>Tue, 30 Dec 2014 09:00:40 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2014/12/30/happy-new-year/</guid>
      <description><![CDATA[USE MASTER GO ALTER DATABASE @anBenedetti SET OFFLINE WITH ROLLBACK IMMEDIATE GO #SQLServer...]]></description>
      <content:encoded><![CDATA[<blockquote lang="it" class="twitter-tweet">   <p>USE MASTER GO ALTER DATABASE <a href="https://twitter.com/anBenedetti">@anBenedetti</a> SET OFFLINE WITH ROLLBACK IMMEDIATE GO <a href="https://twitter.com/hashtag/SQLServer?src=hash">#SQLServer</a> <a href="https://twitter.com/hashtag/SQLFamily?src=hash">#SQLFamily</a> <a href="https://twitter.com/hashtag/HappyNewYear?src=hash">#HappyNewYear</a></p> — Andrea Benedetti (@anBenedetti) <a href="https://twitter.com/anBenedetti/status/549972009007214592">30 Dicembre 2014</a></blockquote> <script src="//platform.twitter.com/widgets.js" charset="utf-8"></script>]]></content:encoded>
    </item>
    <item>
      <title>Power Query: join on inequality operator</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/power-query-join-on-inequality-operator</link>
      <pubDate>Thu, 20 Nov 2014 15:36:35 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2014/11/20/power-query-join-on-inequality-operator/</guid>
      <description><![CDATA[In TSQL it’s so easy to create a JOIN with inequality operators like that:  SELECT * 
FROM...]]></description>
      <content:encoded><![CDATA[<p>In TSQL it’s so easy to create a JOIN with inequality operators like that:</p>  <pre class="code"><span style="color:blue;">SELECT </span><span style="color:gray;">* 
</span><span style="color:blue;">FROM </span>Table1
<span style="color:gray;">JOIN </span>Table2 <span style="color:blue;">ON
    </span>Table1<span style="color:gray;">.</span>code <span style="color:gray;">= </span>Table2<span style="color:gray;">.</span>code <span style="color:gray;">AND 
    (</span>Table1<span style="color:gray;">.</span>MESERIF_ST <span style="color:gray;">&gt;= </span>Table2<span style="color:gray;">.</span>Month_Start<span style="color:gray;">) AND 
    (</span>Table1<span style="color:gray;">.</span>MESERIF_ST <span style="color:gray;">&lt;= </span>Table2<span style="color:gray;">.</span>Month_End<span style="color:gray;">) 
</span><span style="color:blue;">GO
</span></pre>

<p>&#160;</p>

<p>But, right now, it’s a little bit difficult to do that on <strong>Power Query</strong>.</p>

<p>Simply because with the “<a href="https://support.office.com/en-za/article/Merge-queries-fd157620-5470-4c0f-b132-7ca2616d17f9">merge queries</a>” we can only choose the matching columns to create a merged table.</p>

<p>The related table contains all rows that match each row from a primary table based on a common column value.</p>

<p>&#160;</p>

<p>To solve the problem we need to use the<strong> advanced editor</strong> and change the M code.</p>

<p>Let’s try with a demo using two tables on SQL Server.</p>

<p>&#160;</p>

<p>This is the setup script:</p>

<pre class="code"><span style="color:blue;">SET NOCOUNT ON
USE </span>Test
<span style="color:blue;">GO

create table </span>Table1
<span style="color:gray;">(
</span>id <span style="color:blue;">int</span><span style="color:gray;">,
</span>code <span style="color:blue;">varchar</span><span style="color:gray;">(</span>10<span style="color:gray;">),
</span>MESERIF_ST <span style="color:blue;">date
</span><span style="color:gray;">)
</span><span style="color:blue;">GO

create table </span>Table2
<span style="color:gray;">(
</span>id <span style="color:blue;">int</span><span style="color:gray;">,
</span>code <span style="color:blue;">varchar</span><span style="color:gray;">(</span>10<span style="color:gray;">),
</span>Month_Start <span style="color:blue;">date</span><span style="color:gray;">,
</span>Month_End <span style="color:blue;">date
</span><span style="color:gray;">)
</span><span style="color:blue;">GO


insert </span>Table1 <span style="color:blue;">values </span><span style="color:gray;">(</span>1<span style="color:gray;">, </span><span style="color:red;">&#39;aaa&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140101&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">insert </span>Table1 <span style="color:blue;">values </span><span style="color:gray;">(</span>2<span style="color:gray;">, </span><span style="color:red;">&#39;bbb&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140111&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">insert </span>Table1 <span style="color:blue;">values </span><span style="color:gray;">(</span>3<span style="color:gray;">, </span><span style="color:red;">&#39;ccc&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140121&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">insert </span>Table1 <span style="color:blue;">values </span><span style="color:gray;">(</span>4<span style="color:gray;">, </span><span style="color:red;">&#39;ddd&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140131&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">GO


insert </span>Table2 <span style="color:blue;">values </span><span style="color:gray;">(</span>1<span style="color:gray;">, </span><span style="color:red;">&#39;aaa&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140105&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140211&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">insert </span>Table2 <span style="color:blue;">values </span><span style="color:gray;">(</span>2<span style="color:gray;">, </span><span style="color:red;">&#39;bbb&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140101&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140311&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">insert </span>Table2 <span style="color:blue;">values </span><span style="color:gray;">(</span>3<span style="color:gray;">, </span><span style="color:red;">&#39;ccc&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140111&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140411&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">insert </span>Table2 <span style="color:blue;">values </span><span style="color:gray;">(</span>4<span style="color:gray;">, </span><span style="color:red;">&#39;ddd&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140202&#39;</span><span style="color:gray;">,</span><span style="color:red;">&#39;20140511&#39;</span><span style="color:gray;">)
</span><span style="color:blue;">GO</span><span style="color:blue;">
<font color="#000000"></font></span></pre>

<p>Now, with Power Query I create two Workbook Queries:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image002_5C583CD1.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image002_5F00_5C583CD1.jpg"><img title="clip_image002" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="clip_image002" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image002_thumb_1DF509CF.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image002_5F00_thumb_5F00_1DF509CF.jpg" width="244" height="169" /></a></p>

<p>&#160;</p>

<p>I duplicate the first query to start editing and apply a merge on the equality column [code]:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image001_5B18C554.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image001_5F00_5B18C554.jpg"><img title="clip_image001" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image001_thumb_0E771962.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image001_5F00_thumb_5F00_0E771962.jpg" width="244" height="205" /></a></p>

<p>&#160;</p>

<p>Now I choose my columns:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image0024_27094763.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image0024_5F00_27094763.jpg"><img style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image0024_thumb_21BCF163.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image0024_5F00_thumb_5F00_21BCF163.jpg" width="244" height="123" alt=" " /></a></p>

<p>&#160;</p>

<p>And this is the result:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image0026_4DFC08F8.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image0026_5F00_4DFC08F8.jpg"><img style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image0026_thumb_33548E41.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image0026_5F00_thumb_5F00_33548E41.jpg" width="592" height="82" alt=" " /></a></p>





<p>&#160;</p>

<p>In the editor I can see the code of my instructions:</p>

<p><i>let</i></p>

<p><i>&#160;&#160;&#160; Source = Sql.Database(&quot;.\sql2012&quot;, &quot;test&quot;),</i></p>

<p><i>&#160;&#160;&#160; dbo_Table1 = Source{[Schema=&quot;dbo&quot;,Item=&quot;Table1&quot;]}[Data],</i></p>

<p><i>&#160;&#160;&#160; Merge = Table.NestedJoin(dbo_Table1,{&quot;abi&quot;},Table2,{&quot;abi&quot;},&quot;NewColumn&quot;),</i></p>

<p><i>&#160;&#160;&#160; #&quot;Expand NewColumn&quot; = Table.ExpandTableColumn(Merge, &quot;NewColumn&quot;, {&quot;id&quot;, &quot;abi&quot;, &quot;MESERIF_INIZIO&quot;, &quot;MESERIF_FINE&quot;}, {&quot;NewColumn.id&quot;, &quot;NewColumn.abi&quot;, &quot;NewColumn.MESERIF_INIZIO&quot;, &quot;NewColumn.MESERIF_FINE&quot;})</i></p>

<p><i>in</i></p>

<p><i>&#160;&#160;&#160; #&quot;Expand NewColumn&quot;</i></p>

<p>&#160;</p>

<p>I need to use a <strong>SelectRows</strong> to define the complete predicate of my query.</p>

<p>So I change the script (you can see in <font color="#ff0000">red</font> the statement changed):</p>

<p><i>let</i></p>

<p><i>&#160;&#160;&#160; Source = Sql.Database(&quot;.\sql2012&quot;, &quot;test&quot;),</i></p>

<p><i>&#160;&#160;&#160; dbo_Table1 = Source{[Schema=&quot;dbo&quot;,Item=&quot;Table1&quot;]}[Data],</i></p>

<p><i>&#160;&#160;&#160; Merge = Table.NestedJoin(dbo_Table1,{&quot;abi&quot;},Table2,{&quot;abi&quot;},&quot;NewColumn&quot;),</i></p>

<p><i>&#160;&#160;&#160; #&quot;Expand NewColumn&quot; = Table.ExpandTableColumn(Merge, &quot;NewColumn&quot;, {&quot;id&quot;, &quot;abi&quot;, &quot;MESERIF_INIZIO&quot;, &quot;MESERIF_FINE&quot;}, {&quot;NewColumn.id&quot;, &quot;NewColumn.abi&quot;, &quot;NewColumn.MESERIF_INIZIO&quot;, &quot;NewColumn.MESERIF_FINE&quot;})<font color="#ff0000">,</font></i></p>

<p><i><font color="#ff0000"></font></i></p>

<p><i><font color="#ff0000">&#160;&#160;&#160; BetweenFilter = Table.SelectRows(#&quot;Expand NewColumn&quot;, each ( ([MESERIF_ST] &gt;= [NewColumn.MESERIF_INIZIO]) and ([MESERIF_ST] &lt;= [NewColumn.MESERIF_FINE] ) ) )</font></i></p>

<p><i><font color="#ff0000">in</font></i></p>

<p><i><font color="#ff0000">&#160;&#160;&#160; BetweenFilter</font></i></p>

<p>&#160;</p>

<p>And this is the result:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image0028_445DDD86.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image0028_5F00_445DDD86.jpg"><img style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image0028_thumb_3C6B5C86.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image0028_5F00_thumb_5F00_3C6B5C86.jpg" width="583" height="59" alt=" " /></a></p>

<p>The same in TSQL:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image00210_6B532FCC.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image00210_5F00_6B532FCC.jpg"><img style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/clip_image00210_thumb_2EC05291.jpg" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/clip_5F00_image00210_5F00_thumb_5F00_2EC05291.jpg" width="347" height="78" alt=" " /></a></p>

<p>&#160;</p>

<p>Enjoy,</p>

<p>A.</p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server Restart time</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/sql-server-restart-time</link>
      <pubDate>Tue, 01 Jul 2014 05:28:47 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2014/07/01/sql-server-restart-time/</guid>
      <description><![CDATA[Trovo spesso l’esigenza di verificare quando un’istanza è stata riavviata (o startata).  SQL Server...]]></description>
      <content:encoded><![CDATA[<p>Trovo spesso l’esigenza di verificare quando un’istanza è stata riavviata (o startata).</p>  <p>SQL Server consente di recuperare questa informazione in diversi modi.</p>  <p>La cosa interessante è che ciascuno di essi non ritorna lo stesso medesimo istante perché ognuno riporta un particolare start di una specifica attività (in ordine temporale):</p>  <ul>   <li>start dell’istanza</li>    <li>start della prima attività interna (come fosse una sessione “0”)</li>    <li>start della traccia di default</li>    <li>start (creazione) del tempdb</li> </ul>  <p>&#160;</p>  <p>Queste le query:</p>  <p>&#160;</p>  <pre class="code"><span style="color:blue;">SELECT </span><span style="color:teal;">sqlserver_start_time </span><span style="color:blue;">as </span><span style="color:teal;">[Istante di start dell&#39;istanza]
</span><span style="color:blue;">FROM </span><span style="color:green;">sys</span><span style="color:gray;">.</span><span style="color:green;">dm_os_sys_info</span><span style="color:gray;">;

</span><span style="color:blue;">SELECT </span><span style="color:teal;">login_time </span><span style="color:blue;">as </span><span style="color:teal;">[Attività interna istanza]
</span><span style="color:blue;">FROM </span><span style="color:green;">sys</span><span style="color:gray;">.</span><span style="color:green;">dm_exec_sessions </span><span style="color:blue;">WHERE </span><span style="color:teal;">session_id </span><span style="color:gray;">= </span>1<span style="color:gray;">;

</span><span style="color:blue;">SELECT </span><span style="color:teal;">start_time </span><span style="color:blue;">as </span><span style="color:teal;">[Start default trace]
</span><span style="color:blue;">FROM </span><span style="color:green;">sys</span><span style="color:gray;">.</span><span style="color:green;">traces </span><span style="color:blue;">WHERE </span><span style="color:teal;">is_default </span><span style="color:gray;">= </span>1

<span style="color:blue;">SELECT </span><span style="color:teal;">create_date [Creazione tempdb]
</span><span style="color:blue;">FROM </span><span style="color:green;">sys</span><span style="color:gray;">.</span><span style="color:green;">databases </span><span style="color:blue;">WHERE </span><span style="color:teal;">name </span><span style="color:gray;">= </span><span style="color:red;">&#39;tempdb&#39;

</span></pre>



<p>Un esempio di risultato:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_02DD1813.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_02DD1813.png"><img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;margin:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_thumb_24C87A97.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_thumb_5F00_24C87A97.png" width="221" height="238" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>Di SQL Server, statistiche e piani di esecuzione</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/di-sql-server-statistiche-e-piani-di-esecuzione</link>
      <pubDate>Mon, 09 Jun 2014 04:04:46 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2014/06/09/di-sql-server-statistiche-e-piani-di-esecuzione/</guid>
      <description><![CDATA[SQL Server utilizza le statistiche per reagire in maniera intelligente alle istruzioni che riceve....]]></description>
      <content:encoded><![CDATA[<p>SQL Server utilizza le <strong>statistiche</strong> per reagire in maniera intelligente alle istruzioni che riceve.</p>  <p>Conoscendo il numero di righe, la densità delle pagine, gli indici disponibili, l’<strong>optimizer</strong> è in grado di ragionare in maniera più accurata circa la strada da intraprendere per rispondere a quanto gli viene chiesto.</p>  <p>E’ proprio grazie alle statistiche che SQL Server potrà decidere di evitare di utilizzare indici che&#160; “a prima vista” potrebbero sembrare perfetti per una certa istruzione.</p>  <p>&#160;</p>  <p>Di certo, conoscere come le statistiche funzionano è un ottimo aiuto per comprendere come funziona l’ottimizzatore del database engine.</p>  <p>Proviamo a fare un esempio.</p>  <p>&#160;</p>  <p>Costruiamo un database, semplice a piacere, con una tabella che andremo a popolare con 1.000.000 di righe.</p>  <p><strong>NOTA</strong>: il database non avrà né la creazione delle statistiche, né il loro aggiornamento, abilitata. Non voglio statistiche.</p>  <pre class="code"><span style="color:blue;"></span></pre>

<pre class="code"><span style="color:blue;">USE master</span><span style="color:gray;">;
</span><span style="color:blue;">GO

CREATE DATABASE </span><span style="color:green;">stats </span>CONTAINMENT <span style="color:gray;">= </span><span style="color:blue;">NONE 
ON PRIMARY
</span><span style="color:gray;">( 
    </span>NAME <span style="color:gray;">= </span><span style="color:red;">N&#39;stats&#39; </span><span style="color:gray;">, 
    </span><span style="color:blue;">FILENAME </span><span style="color:gray;">= </span><span style="color:red;">N&#39;C:\temp\stats.mdf&#39; </span><span style="color:gray;">, 
    </span>SIZE <span style="color:gray;">= </span>51200 KB <span style="color:gray;">, 
    </span>FILEGROWTH <span style="color:gray;">= </span>10<span style="color:gray;">%
)
</span><span style="color:magenta;">LOG </span><span style="color:blue;">ON
</span><span style="color:gray;">( 
    </span>NAME <span style="color:gray;">= </span><span style="color:red;">N&#39;stats_log&#39; </span><span style="color:gray;">, 
    </span><span style="color:blue;">FILENAME </span><span style="color:gray;">= </span><span style="color:red;">N&#39;C:\temp\stats_log.ldf&#39; </span><span style="color:gray;">, 
    </span>SIZE <span style="color:gray;">= </span>10240 KB <span style="color:gray;">, 
    </span>FILEGROWTH <span style="color:gray;">= </span>10<span style="color:gray;">%
);
</span><span style="color:blue;">GO
ALTER DATABASE </span><span style="color:green;">stats </span><span style="color:blue;">SET AUTO_SHRINK OFF</span><span style="color:gray;">; 
</span><span style="color:blue;">ALTER DATABASE </span><span style="color:green;">stats </span><span style="color:blue;">SET AUTO_CREATE_STATISTICS OFF</span><span style="color:gray;">;
</span><span style="color:blue;">ALTER DATABASE </span><span style="color:green;">stats </span><span style="color:blue;">SET AUTO_UPDATE_STATISTICS OFF</span><span style="color:gray;">; 
</span><span style="color:blue;">ALTER DATABASE </span><span style="color:green;">stats </span><span style="color:blue;">SET RECOVERY SIMPLE</span><span style="color:gray;">; 
</span><span style="color:blue;">ALTER DATABASE </span><span style="color:green;">stats </span><span style="color:blue;">SET MULTI_USER</span><span style="color:gray;">; 
</span><span style="color:blue;">ALTER DATABASE </span><span style="color:green;">stats </span><span style="color:blue;">SET PAGE_VERIFY </span><span style="color:magenta;">CHECKSUM</span><span style="color:gray;">;  
</span><span style="color:blue;">GO


USE </span>[stats]<span style="color:gray;">;
</span><span style="color:blue;">GO

</span><span style="color:green;">/* Create table for test */

</span><span style="color:blue;">CREATE TABLE </span>test
<span style="color:gray;">( 
    </span>n <span style="color:blue;">int PRIMARY KEY CLUSTERED </span><span style="color:gray;">, 
    </span>col1 <span style="color:blue;">varchar</span><span style="color:gray;">( </span>50 <span style="color:gray;">) , 
    </span>col2 <span style="color:blue;">varchar</span><span style="color:gray;">( </span>50 <span style="color:gray;">) , 
    </span>col3 <span style="color:blue;">varchar</span><span style="color:gray;">( </span>50 <span style="color:gray;">)
);
</span><span style="color:blue;">GO


</span><span style="color:green;">/* Insert 1.000.000 dummy rows */
</span><span style="color:blue;">WITH </span>L0
    <span style="color:blue;">AS </span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span>1 <span style="color:blue;">AS </span>c
         <span style="color:blue;">UNION </span><span style="color:gray;">ALL
         </span><span style="color:blue;">SELECT </span>1
       <span style="color:gray;">) , </span>L1
    <span style="color:blue;">AS </span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span>1 <span style="color:blue;">AS </span>c
           <span style="color:blue;">FROM </span>L0 <span style="color:blue;">AS </span>A <span style="color:gray;">CROSS JOIN </span>L0 <span style="color:blue;">AS </span>B
       <span style="color:gray;">) , </span>L2
    <span style="color:blue;">AS </span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span>1 <span style="color:blue;">AS </span>c
           <span style="color:blue;">FROM </span>L1 <span style="color:blue;">AS </span>A <span style="color:gray;">CROSS JOIN </span>L1 <span style="color:blue;">AS </span>B
       <span style="color:gray;">) , </span>L3
    <span style="color:blue;">AS </span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span>1 <span style="color:blue;">AS </span>c
           <span style="color:blue;">FROM </span>L2 <span style="color:blue;">AS </span>A <span style="color:gray;">CROSS JOIN </span>L2 <span style="color:blue;">AS </span>B
       <span style="color:gray;">) , </span>L4
    <span style="color:blue;">AS </span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span>1 <span style="color:blue;">AS </span>c
           <span style="color:blue;">FROM </span>L3 <span style="color:blue;">AS </span>A <span style="color:gray;">CROSS JOIN </span>L3 <span style="color:blue;">AS </span>B
       <span style="color:gray;">) , </span>L5
    <span style="color:blue;">AS </span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span>1 <span style="color:blue;">AS </span>c
           <span style="color:blue;">FROM </span>L4 <span style="color:blue;">AS </span>A <span style="color:gray;">CROSS JOIN </span>L4 <span style="color:blue;">AS </span>B
       <span style="color:gray;">) , </span>Nums
    <span style="color:blue;">AS </span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span><span style="color:magenta;">ROW_NUMBER</span><span style="color:gray;">()</span><span style="color:blue;">OVER</span><span style="color:gray;">( </span><span style="color:blue;">ORDER BY</span><span style="color:gray;">( </span><span style="color:blue;">SELECT </span><span style="color:gray;">NULL ) )</span><span style="color:blue;">AS </span>n
           <span style="color:blue;">FROM </span>L5
       <span style="color:gray;">)
    </span><span style="color:blue;">INSERT INTO </span>test
    <span style="color:blue;">SELECT TOP </span><span style="color:gray;">( </span>1000000 <span style="color:gray;">)</span>N <span style="color:gray;">, 
                </span><span style="color:magenta;">NEWID</span><span style="color:gray;">()</span><span style="color:blue;">AS </span>Col1 <span style="color:gray;">, 
                </span><span style="color:magenta;">NEWID</span><span style="color:gray;">()</span><span style="color:blue;">AS </span>Col2 <span style="color:gray;">, 
                </span><span style="color:magenta;">NEWID</span><span style="color:gray;">()</span><span style="color:blue;">AS </span>Col3
      <span style="color:blue;">FROM </span>Nums<span style="color:gray;">;
</span><span style="color:blue;">GO
</span></pre>

<p>&#160;</p>

<p>Sulla tabella appena creata e popolata, aggiungo una colonna sulla quale creo un indice (<strong>NOTA</strong>: l’indice lo sto creando <u>prima</u> di aggiornare il valore della colonna):</p>

<p><span style="color:blue;">ALTER TABLE </span>test 

  <br /><span style="color:blue;">ADD </span>colType <span style="color:blue;">char</span><span style="color:gray;">( </span>1 <span style="color:gray;">); 
    <br /></span><span style="color:blue;">GO</span><span style="color:blue;"></span></p>

<p><span style="color:blue;">
    <br />CREATE INDEX </span>ixColType <span style="color:blue;">ON </span>test<span style="color:gray;">( </span>colType <span style="color:gray;">); 
    <br /></span><span style="color:blue;">GO 
    <br /></span></p>

<p>A questo punto valorizzo la colonna in modo tale che il 50% delle righe abbia lo stesso valore (in sostanza voglio fare in modo che l’indice su questa colonna non sia selettivo e, quindi, NON sia utile).</p>

<pre class="code"><span style="color:magenta;">UPDATE </span>test
<span style="color:blue;">SET </span>colType <span style="color:gray;">= </span><span style="color:red;">&#39;Y&#39;
  </span><span style="color:blue;">WHERE </span>n <span style="color:gray;">% </span>2 <span style="color:gray;">= </span>0<span style="color:gray;">;
</span><span style="color:blue;">GO
</span></pre>

<p>&#160;</p>

<p>Questa la situazione sulla tabella:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_5E43CFD9.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_5E43CFD9.png"><img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_thumb_7C46FF2F.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_thumb_5F00_7C46FF2F.png" width="226" height="220" /></a></p>

<p>&#160;</p>

<p>&#160;</p>

<p>A questo punto, sulla mia colonna:</p>

<ol>
  <li>ho dei valori che non sono selettivi (500.000 righe sono valorizzate a “Y”) </li>

  <li>non ho statistiche che possano informare l’optimizer su come sono distribuiti i dati al suo interno </li>
</ol>

<p>&#160;</p>

<p>Eseguo una query utilizzando, come predicato, proprio la colonna sulla quale stiamo lavorando.</p>

<p>L’optimizer, trovando disponibile un indice che lavora proprio su questa colonna, viene preso in inganno supponendo di poter sfruttare questa struttura per rispondere in maniera efficiente.</p>

<p>Come si può vedere dal piano di esecuzione, in effetti, lo usa (mi verrebbe da dire “in buona fede”):</p>

<p>&#160;</p>

<pre class="code"><span style="color:blue;">SELECT </span>col1
  <span style="color:blue;">FROM </span>test
  <span style="color:blue;">WHERE </span>colType <span style="color:gray;">= </span><span style="color:red;">&#39;Y&#39;</span><span style="color:gray;">;
</span><span style="color:blue;">GO
</span></pre>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_1D5F1D2C.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_1D5F1D2C.png"><img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_thumb_173CF1F3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_thumb_5F00_173CF1F3.png" width="244" height="115" /></a></p>

<p>&#160;</p>

<p>Con risultati <strong>devastanti</strong> in termini di attività I/O:</p>

<p><em>(500000 row(s) affected) 
    <br />Table &#39;test&#39;. Scan count 1, logical reads 1531945</em></p>

<p>&#160;</p>

<p>Le statistiche dell’indice, se dessimo un’occhiata alle loro proprietà, sono sì state generate alla sua creazione, ma non sono popolate (né aggiornate)…</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_7-FC3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_72D00FC3.png"><img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_thumb_5C9F15D3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_thumb_5F00_5C9F15D3.png" width="244" height="135" /></a></p>

<p>&#160;</p>

<p>Eseguiamo un secondo test:</p>

<ol>
  <li>elimino l’indice </li>

  <li>lo ricreo (a questo punto, essendo la tabella popolata, le statistiche verranno generate sulla base dei dati presenti al momento) </li>

  <li>rieseguo la stessa query lanciata prima 
    <br /></li>
</ol>

<pre class="code"><span style="color:blue;">DROP INDEX </span>ixColType <span style="color:blue;">ON </span>dbo<span style="color:gray;">.</span>test<span style="color:gray;">;
</span><span style="color:blue;">GO
CREATE INDEX </span>ixColType <span style="color:blue;">ON </span>test
<span style="color:gray;">( </span>colType <span style="color:gray;">);
</span><span style="color:blue;">GO
</span></pre>

<p>&#160;</p>

<p>Rieseguo la query:</p>

<pre class="code"><span style="color:blue;">SELECT </span>col1
  <span style="color:blue;">FROM </span>test
  <span style="color:blue;">WHERE </span>colType <span style="color:gray;">= </span><span style="color:red;">&#39;Y&#39;</span><span style="color:gray;">;
</span><span style="color:blue;">GO
</span></pre>

<p>&#160;</p>

<p>In questa seconda esecuzione:</p>

<ul>
  <li>l’optimizer “vede” un indice che potrebbe fare al caso suo </li>

  <li>controlla le statistiche di distribuzione dei dati </li>

  <li>si rende conto che, se utilizzasse l’indice, non ne trarrebbe un vantaggio (tutt’altro…) </li>

  <li>decide di andare “dritto” sulla tabella </li>
</ul>

<p>&#160;</p>

<p>Il piano di esecuzione parla chiaro ed è ben diverso da prima:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_4D8D585B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_4D8D585B.png"><img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;margin:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/image_thumb_17AD84A3.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/image_5F00_thumb_5F00_17AD84A3.png" width="244" height="109" /></a></p>

<p>&#160;</p>

<p>Così come le attività di I/O:</p>

<p><em>(500000 row(s) affected) 
    <br />Table &#39;test&#39;. Scan count 1, logical reads 16191</em></p>]]></content:encoded>
    </item>
    <item>
      <title>Un altro anno di conferenze</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/un-altro-anno-di-conferenze</link>
      <pubDate>Mon, 12 May 2014 06:57:00 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2014/05/12/un-altro-anno-di-conferenze/</guid>
      <description><![CDATA[L&rsquo;anno delle conferenze non va di pari passo, almeno per me e per chi fa un mestiere simile al...]]></description>
      <content:encoded><![CDATA[<p>L&rsquo;anno delle conferenze non va di pari passo, almeno per me e per chi fa un mestiere simile al mio, con l&rsquo;anno solare.</p>
<p>Ormai prossimi all&rsquo;estate (se arriva ...) sono ormai arrivato alla chiusura della parte &ldquo;speaker&rdquo; del mio lavoro e allora provo a fare un bilancio di quanto fatto e di quanto (pochissimo) mi resta da fare.</p>
<p>&nbsp;</p>
<p>Ho sempre creduto nel valore delle conferenze tecniche, per due motivi principali:</p>
<ol>
<li><span style="text-decoration:underline;">condividere</span>&nbsp;conoscenza, sempre con l&rsquo;idea di portare su un palco quanto trovato nel mondo reale. Condivisione = creazione di valore</li>
<li><span style="text-decoration:underline;">ricevere</span>, da chi tutti i giorni lavora con la tecnologia, impressioni, critiche, suggerimenti, &hellip;</li>
</ol>
<p>Non mi sono mai piaciuti gli interventi &ldquo;<em>leggo un libro e te lo racconto</em>&rdquo;, oltre a questo ho sempre trovato entusiasmante quanto avviene dopo un intervento: le mille domande, lo scambio di opinioni e di esperienza, le discussioni su approcci&nbsp;&ndash; metodologie&nbsp;&ndash; strumenti,&nbsp;il dare un viso reale a persone&nbsp;che conosci solo virtualmente,&nbsp;il riuscire a tornare a casa sempre con qualcosa di nuovo (sei uno speaker e&nbsp;&ldquo;dai&rdquo;,&nbsp;ma ricevi a tua volta), il continuare il discorso iniziato anche dopo&hellip;</p>
<p>Anche quest&rsquo;anno non sono mancate le occasioni, non solo in Italia:</p>
<ul>
<li><strong>Microsoft Western Europe, Community Event, </strong><em>Amsterdam - 25 Settembre 2013</em></li>
</ul>
<ul>
<li style="list-style-type:none;">
<ul>
<li>Building Business Analytics Solutions with Parallel DataWarehouse</li>
</ul>
</li>
</ul>
<ul>
<li><strong>DigIT Your Future, Universit&agrave; degli Studi di Trento</strong>, <em>Trento - 3 / 7 Febbraio 2014</em></li>
</ul>
<ul>
<li style="list-style-type:none;">
<ul>
<li>Big Data</li>
</ul>
</li>
</ul>
<ul>
<li><strong>&nbsp;Community Days, </strong><em>Milano - 25, 26, 27 febbraio 2014</em></li>
</ul>
<ul>
<li style="list-style-type:none;">
<ul>
<li><a href="https://www.communitydays.it/events/2014/sql05/">SQL Server: miti da sfatare</a></li>
</ul>
</li>
</ul>
<ul>
<li><strong>SQL Server Conference, </strong><em>Milano - 11, 12 marzo 2014</em></li>
</ul>
<ul>
<li style="list-style-type:none;">
<ul>
<li><a href="https://www.sqlconference.it/events/2014/agenda.aspx#SQL310">Encryption, Privacy and Security in SQL Server &amp; Azure SQL Database</a></li>
</ul>
</li>
</ul>
<ul>
<li><strong>Nuvola Rosa, </strong><em>Roma - 22, 23, 24 Aprile 2014 </em></li>
</ul>
<ul>
<li style="list-style-type:none;">
<ul>
<li><a href="https://www.lanuvolarosa.it/techher.html">A World of data</a></li>
<li><a href="https://www.lanuvolarosa.it/techher.html">Big Data: Volume, Velocity, Variety, Veracity</a></li>
</ul>
</li>
</ul>
<ul>
<li><strong>.Net Campus, </strong><em>Roma - 10 maggio 2014</em></li>
</ul>
<ul>
<li style="list-style-type:none;">
<ul>
<li><a href="https://www.dotnetcampus.it/Sessions">Introduction to SQL Azure</a></li>
</ul>
</li>
</ul>
<p>Tra un mesetto chiudo con l&rsquo;ultimo appuntamento:</p>
<ul>
<li><strong>AICA</strong>, <em>Milano - 24 giugno 2014</em></li>
</ul>
<ul>
<li style="list-style-type:none;">
<ul>
<li>HDInsight, la soluzione Hadoop nel cloud</li>
</ul>
</li>
</ul>
<p>Mesi molto intensi ed&nbsp;eventi tutti molto belli e da ricordare. Occasioni in cui, ancora una volta, si ha la possibilit&agrave; di toccare con mano la qualit&agrave; e l&rsquo;eccellenza che abbiamo <span style="text-decoration:underline;">anche</span> nel nostro paese.</p>
<p>Un&nbsp;grazie ai colleghi ed agli&nbsp;amici con i quali riesco a passare un po&#39; di tempo solo in queste occasioni (di sicuro dimenticher&ograve; qualcuno): <a href="https://twitter.com/scoriani">Silvano Coriani</a>, <a href="https://twitter.com/matusa69">Andrea Uggetti</a>, <a href="https://twitter.com/francedit">Francesco Diaz</a>, <a href="https://twitter.com/igorpag">Igor Pagliai</a>,&nbsp;<a href="https://twitter.com/LucaSqlserver">Luca Ferrari</a>, <a href="https://twitter.com/mauridb">Davide Mauri</a>, <a href="https://twitter.com/glhotz">Gianluca Hotz</a>, <a href="https://twitter.com/marcorus">Marco Russo</a>, <a href="https://twitter.com/PaoloPia">Paolo Pialorsi</a>, <a href="https://twitter.com/robertobrunetti">Roberto Brunetti</a>, <a href="https://twitter.com/robi_cocco">Roberta Cocco</a>, <a href="https://twitter.com/andysal74">Andrea Saltarello</a>, <a href="https://twitter.com/dbochicchio">Daniele Bochicchio</a>, <a href="https://twitter.com/spaghettidba">Gianluca Sartori</a>, <a href="https://twitter.com/fdechirico">Francesco De Chirico</a>, <a href="https://twitter.com/FerrariAlberto">Alberto Ferrari</a>, <a href="https://twitter.com/marcoagnoli">Marco Agnoli</a>, <a href="https://twitter.com/fantadani">Danilo Lissoni</a>, <a href="https://twitter.com/_geniodelmale">Lorenzo Barbieri</a>,&nbsp;<a href="https://twitter.com/framauri7">Francesca Mauri</a>, <a href="https://twitter.com/AliceHeinzl">Alice Heinzl</a>, &hellip;</p>
<p>Al prossimo palco&hellip; ;-)</p>]]></content:encoded>
    </item>
    <item>
      <title>Merry (Power) Christmas :-)</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/merry-power-christmas</link>
      <pubDate>Fri, 20 Dec 2013 05:03:05 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2013/12/20/merry-power-christmas/</guid>
      <description><![CDATA[]]></description>
      <content:encoded><![CDATA[<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/merryPowerChristmas_7B3FEF7E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/merryPowerChristmas_5F00_7B3FEF7E.png"><img title="merryPowerChristmas" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="merryPowerChristmas" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/merryPowerChristmas_thumb_5A38430B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/merryPowerChristmas_5F00_thumb_5F00_5A38430B.png" width="513" height="396" /></a></p>]]></content:encoded>
    </item>
    <item>
      <title>E i DECIMAL con scala a 0 ?</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/e-i-decimal-con-scala-a-0</link>
      <pubDate>Wed, 13 Nov 2013 06:50:35 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2013/11/13/e-i-decimal-con-scala-a-0/</guid>
      <description><![CDATA[Inizio con una domanda, non me ne vogliate.  Chi di voi ha mai visto / creato colonne di tipo...]]></description>
      <content:encoded><![CDATA[<p>Inizio con una domanda, non me ne vogliate.</p>  <p><em>Chi di voi ha mai visto / creato colonne di tipo DECIMAL con scala uguale a 0?</em></p>  <p>&#160;</p>  <p>Intendo dire qualcosa come:</p>  <pre class="code"><span style="color: blue">CREATE TABLE </span><span style="color: teal">myTable
</span><span style="color: gray">(
    ...
    </span><span style="color: teal">myColumn </span><span style="color: blue">DECIMAL</span><span style="color: gray">( </span>3 <span style="color: gray">, </span>0 <span style="color: gray">) , 
    ...
);
</span></pre>


<p>&#160;</p>

<p><em>Chi di voi si è mai chiesto che senso ha creare colonne DECIMAL con scala uguale a 0?</em></p>

<p>Il senso è, naturalmente, quello di poter gestire numeri interi. Ok.</p>

<p>&#160;</p>

<p>Avevo già toccato l’argomento in un <a href="https://blogs.technet.com/b/andrea_benedetti_blog/archive/2013/05/30/dei-decimal-e-dei-bytes-regalati.aspx">altro post</a>, in questo vorrei tornare sull’argomento con un ragionamento più generale.</p>

<p>&#160;</p>

<p>Avendo in mente lo <a href="https://msdn.microsoft.com/en-us/library/ms187746.aspx">storage necessario</a> alla memorizzazione di dati DECIMAL a seconda della precisione definita, l’idea è quella di realizzare uno script che possa analizzare la dimensione (precisione) definita con scala = 0 per verificare la possibilità di modificarne il tipo (in un intero “naturale” come sono i TINYINT, SMALLINT, INT, BIGINT) in ottica di <strong>risparmio bytes</strong>.</p>

<p>&#160;</p>

<p>Intendo dire, che senso ha utilizzare un DECIMAL(9,0) quando sarebbe sufficiente utilizzare un INT (e quindi utilizzare 4 bytes rispetto ai 5 del DECIMAL)?</p>

<pre class="code"><span style="color: blue">DECLARE </span><span style="color: teal">@decimal </span><span style="color: blue">decimal</span><span style="color: gray">( </span>9 <span style="color: gray">, </span>0 <span style="color: gray">) = </span>999999999<span style="color: gray">;
</span><span style="color: blue">DECLARE </span><span style="color: teal">@int </span><span style="color: blue">int </span><span style="color: gray">= </span><span style="color: teal">@decimal</span><span style="color: gray">;
</span><span style="color: blue">SELECT
       </span><span style="color: teal">@int [Value]</span><span style="color: gray">, 
       </span><span style="color: magenta">DATALENGTH</span><span style="color: gray">( </span><span style="color: teal">@int </span><span style="color: gray">) </span><span style="color: teal">[INT Bytes]</span><span style="color: gray">, 
       </span><span style="color: magenta">DATALENGTH</span><span style="color: gray">( </span><span style="color: teal">@decimal </span><span style="color: gray">) </span><span style="color: teal">[DECIMAL Bytes]</span><span style="color: gray">;

</span></pre>


<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/6136.image_66B359A2.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/6136.image_5F00_66B359A2.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/8055.image_thumb_43F221E5.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/8055.image_5F00_thumb_5F00_43F221E5.png" width="321" height="92" /></a></p>

<p>&#160;</p>

<p>In sostanza, fino ad una precisione di 18 cifre potrei modificare il tipo per ottenerne un beneficio.</p>

<p>Questo perché, naturalmente, potrei utilizzare un BIGINT per memorizzare un numero (positivo o negativo) composto da 18 cifre uguali a 9 (il massimo valore gestibile con un DECIMAL(18,0)).</p>

<p>&#160;</p>

<p>Provando a schematizzare:</p>

<ul>
  <li>decimal(1), (2) : potrei usare TINYINT - con decimal 5 bytes, potrei risparmiare 4 bytes</li>

  <li>decimal(3) : potrei usare SMALLINT - con decimal 5 bytes, risparmio 3 bytes</li>

  <li>decimal(4), (5), (6), (7), (8), (9) : potrei usare INT - con decimal 5 bytes, risparmio 1 byte</li>

  <li>decimal(10), (11), (12), (13), (14), (15), (16), (17), (18) : potrei usare BIGINT - con decimal 9 bytes, risparmio 1 byte</li>
</ul>

<p>&#160;</p>

<p>Di seguito il risultato di quella che potrebbe essere l’analisi sulle tabelle di un nostro database:</p>

<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/8400.image_2E96FD2E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/8400.image_5F00_2E96FD2E.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/7875.image_thumb_2BF0D22E.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/7875.image_5F00_thumb_5F00_2BF0D22E.png" width="499" height="138" /></a></p>

<p>Questo lo script:</p>

<pre class="code"><span style="color: blue">SELECT 
    </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA</span><span style="color: gray">, </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME</span><span style="color: gray">, 
    </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME</span><span style="color: gray">, 
    </span><span style="color: red">'DECIMAL('</span><span style="color: gray">+ </span><span style="color: magenta">CAST</span><span style="color: gray">(</span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: blue">as varchar</span><span style="color: gray">(</span>2<span style="color: gray">)) + </span><span style="color: red">',0)' </span><span style="color: blue">as </span><span style="color: teal">[Currently Data Type]</span><span style="color: gray">,
    </span><span style="color: blue">case 
       when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">&lt;= </span>9 <span style="color: blue">then </span>5 
       <span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">&lt;= </span>19 <span style="color: blue">then </span>9
       <span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">&lt;= </span>28 <span style="color: blue">then </span>13
       <span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">&lt;= </span>38 <span style="color: blue">then </span>17
    <span style="color: blue">end as </span><span style="color: teal">[Used Bytes]</span><span style="color: gray">,
    </span><span style="color: blue">case 
       when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">between </span>1 <span style="color: gray">and </span>2 <span style="color: blue">then </span><span style="color: red">'TINYINT'
       </span><span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">= </span>3 <span style="color: blue">then </span><span style="color: red">'SMALLINT'
       </span><span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">between </span>4 <span style="color: gray">and </span>9 <span style="color: blue">then </span><span style="color: red">'INT'
       </span><span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">between </span>10 <span style="color: gray">and </span>18 <span style="color: blue">then </span><span style="color: red">'BIGINT'
       </span><span style="color: blue">else </span><span style="color: red">'-'
    </span><span style="color: blue">end as </span><span style="color: teal">[Proposed Data Type]</span><span style="color: gray">,
    </span><span style="color: blue">case 
       when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">&lt;= </span>2 <span style="color: blue">then </span>4
       <span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">= </span>3 <span style="color: blue">then </span>3
       <span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">&lt;= </span>9 <span style="color: blue">then </span>1
       <span style="color: blue">when </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: gray">&lt;= </span>18 <span style="color: blue">then </span>1
       <span style="color: blue">else </span>0
    <span style="color: blue">end as </span><span style="color: teal">[Saved Bytes per Column]
</span><span style="color: blue">FROM </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">COLUMNS  </span><span style="color: teal">C
</span><span style="color: gray">JOIN </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">tables </span><span style="color: teal">T </span><span style="color: blue">ON
    </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">= </span><span style="color: teal">T</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">and
    </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME </span><span style="color: gray">= </span><span style="color: teal">T</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME 
</span><span style="color: blue">WHERE
    </span><span style="color: teal">T</span><span style="color: gray">.</span><span style="color: teal">TABLE_TYPE </span><span style="color: gray">= </span><span style="color: red">'BASE TABLE' </span><span style="color: gray">AND 
    </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">DATA_TYPE </span><span style="color: gray">= </span><span style="color: red">'decimal' </span><span style="color: gray">AND 
    </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">NUMERIC_SCALE </span><span style="color: gray">= </span>0
<span style="color: blue">ORDER BY
    </span><span style="color: teal">T</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA</span><span style="color: gray">, </span><span style="color: teal">T</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME</span><span style="color: gray">, </span><span style="color: teal">C</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME
</span><span style="color: blue">GO
</span></pre>


<p>&#160;</p>

<p>Terminando i ragionamenti, credo che l’uso di un DECIMAL con scala = 0 sia utile <u>soltanto</u> nel momento in cui ho una di queste due necessità:</p>

<ul>
  <li>memorizzare valori maggiori di 9.223.372.036.854.775.807</li>

  <li>memorizzare valori minori di -9.223.372.036.854.775.808</li>
</ul>

<p>In sostanza gestire interi che non è possibile, per la loro dimensione, memorizzare con il tipo BIGINT.</p>

<p>&#160;</p>

<p><strong>Nota.</strong></p>

<p>Visto che abbiamo parlato di DECIMAL, ricordo che il formato di archiviazione <strong>vardecimal</strong> è deprecato:</p>

<p><em>Con la compressione dei dati di SQL Server 2012 vengono compressi sia i valori decimali sia gli altri tipi di dati. 
    <br />È consigliabile utilizzare la compressione dei dati anziché il formato di archiviazione vardecimal. </em></p>

<p>Per il dettaglio delle funzionalità dichiarate come deprecate con SQL Server 2012, si veda <a href="https://technet.microsoft.com/en-us/library/ms143729.aspx">qui</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server 2014: my TOP 5 favorite features</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/sql-server-2014-my-top-5-favorite-features</link>
      <pubDate>Mon, 11 Nov 2013 14:07:21 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2013/11/11/sql-server-2014-my-top-5-favorite-features/</guid>
      <description><![CDATA[Ogni volta che una nuova versione di SQL Server sta per essere rilasciata, mi diverto a fare la...]]></description>
      <content:encoded><![CDATA[<p>Ogni volta che una nuova versione di <strong>SQL Server</strong> sta per essere rilasciata, mi diverto a fare la classifica delle nuove caratteristiche che, per me, valgono da sole il prezzo del biglietto.</p>  <p>Da qualche giorno è disponibile la Community Technology Preview 2 (<a href="https://technet.microsoft.com/en-us/evalcenter/dn205290.aspx">CTP2</a>), ecco la mia lista:</p>  <ul>   <li><strong>In-Memory OLTP</strong></li>    <ul>     <li>Hekaton, developed in partnership with Microsoft Research, a new memory optimized OLTP database engine</li>   </ul>    <li><strong>IO Resource Governance</strong> </li>    <ul>     <li>You can use the new MIN_IOPS_PER_VOLUME and MAX_IOPS_PER_VOLUME settings to control the physical IOs issued for user threads for a given resource pool</li>   </ul>    <li><strong>Encrypted Backup</strong></li>    <ul>     <li>AES 128, AES 192, AES 256, 3DES</li>   </ul>    <li><strong>AlwaysON Secondaries on Azure</strong></li>    <ul>     <li>A new asynchronous replica for the availability group in Windows Azure end-to-end, from creating the Windows Azure virtual machine to configuring the availability group listener in the Windows Azure subnet</li>   </ul>    <li><strong>SELECT ... INTO</strong></li>    <ul>     <li>statement improved and can now operate in parallel</li>   </ul> </ul>  <p>&#160;</p>  <p>Se iniziate a mettere le mani sulla nuova versione, non dimenticatevi di scaricare l’aggiornamento dei <strong>SQL Server Data Tools</strong>. </p>  <p>Info <a href="https://blogs.msdn.com/b/ssdt/archive/2013/10/25/sql-server-data-tools-for-sql-server-2014-ctp2-is-available.aspx">qui</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Talking About IDENTITY Columns</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/talking-about-identity-columns</link>
      <pubDate>Mon, 11 Nov 2013 09:34:44 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2013/11/11/talking-about-identity-columns/</guid>
      <description><![CDATA[La proprietà IDENTITY viene spesso utilizzata per quelle tabelle che hanno la necessità di avere,...]]></description>
      <content:encoded><![CDATA[<p>La proprietà <a href="https://msdn.microsoft.com/en-us/library/ms186775.aspx">IDENTITY</a> viene spesso utilizzata per quelle tabelle che hanno la necessità di avere, per ogni riga, un valore univoco.</p> <p>Il database engine ci solleva, così, dall’onere di verificare ed attribuire un valore che non sia già stato utilizzato.</p> <p>Questa caratteristica può essere applicata solo su colonne (che siano <u>non nullabili</u>) di tipo:</p> <ul> <li>tinyint</li> <li>smallint</li> <li>int</li> <li>bigint</li> <li>decimal (con scala a 0)</li></ul> <p>Con altri tipi di dato sarebbe naturalmente impossibile definire questa proprietà:</p><pre class="code">Identity column 'idRecord' must be of data type int, bigint, smallint, tinyint, or decimal or numeric with a scale of 0, and constrained to be nonnullable.</pre><pre class="code">&nbsp;</pre>
<p>Ogni <strong>data type</strong>, è sempre bene ricordarsi, ha un numero finito di cifre disponibili.</p>
<p>Questo significa che è utile monitorare i valori utilizzati da queste colonne per evitare spiacevoli problemi (limite massimo raggiunto) che porterebbero ad errori simili a questo:</p><pre class="code">Arithmetic overflow error converting IDENTITY to data type int.
</pre>
<p>Naturalmente l’idea, quando modelliamo le tabelle, è quella di scegliere il tipo di dato più appropriato che, per i nostri ragionamenti, significa scegliere un tipo intero che sia in grado di memorizzare tutte le righe che dovrò gestire.</p>
<p>&nbsp;</p>
<p>L’idea potrebbe essere quindi quella di costruire una query che sia in grado di fornirci lo stato di ogni colonna impostata come IDENTITY.</p>
<p>Qualcosa come:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/8154.image_5B578657.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/8154.image_5F00_5B578657.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/4721.image_thumb_4A72E267.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/4721.image_5F00_thumb_5F00_4A72E267.png" width="690" height="82"></a></p>
<p>Questo lo script:</p><pre class="code"><span style="color: gray">;</span><span style="color: blue">WITH </span><span style="color: teal">identityRange </span><span style="color: blue">AS 
</span><span style="color: gray">(
    </span><span style="color: blue">SELECT
       </span><span style="color: red">'BIGINT' </span><span style="color: blue">AS </span><span style="color: teal">[name]</span><span style="color: gray">,
       </span>9223372036854775807 <span style="color: blue">AS </span><span style="color: teal">MaxValue</span><span style="color: gray">,
       -</span>9223372036854775808 <span style="color: blue">AS </span><span style="color: teal">MinValue
    </span><span style="color: blue">UNION
    SELECT
       </span><span style="color: red">'INT'</span><span style="color: gray">,
       </span>2147483647<span style="color: gray">,
       -</span>2147483648
    <span style="color: blue">UNION
    SELECT
       </span><span style="color: red">'SMALLINT'</span><span style="color: gray">,
       </span>32767<span style="color: gray">,
       -</span>32768
    <span style="color: blue">UNION
    SELECT
       </span><span style="color: red">'TINYINT'</span><span style="color: gray">,
       </span>255<span style="color: gray">,
       </span>0
    <span style="color: blue">UNION
    SELECT
       </span><span style="color: red">'DECIMAL'</span><span style="color: gray">,
       NULL,
       NULL
),
</span><span style="color: teal">identityBuffer </span><span style="color: blue">AS 
</span><span style="color: gray">(
    </span><span style="color: blue">SELECT
       </span><span style="color: magenta">QUOTENAME</span><span style="color: gray">(</span><span style="color: magenta">OBJECT_SCHEMA_NAME</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id</span><span style="color: gray">)) + </span><span style="color: red">'.' </span><span style="color: gray">+
       </span><span style="color: magenta">QUOTENAME</span><span style="color: gray">(</span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">name</span><span style="color: gray">) </span><span style="color: blue">AS </span><span style="color: teal">tableName</span><span style="color: gray">,
       </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: blue">AS </span><span style="color: teal">columnName</span><span style="color: gray">,
       </span><span style="color: blue">CASE WHEN </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">= </span><span style="color: red">'DECIMAL' </span><span style="color: blue">THEN </span><span style="color: gray">(</span><span style="color: red">'DECIMAL(' </span><span style="color: gray">+  
                (
                    </span><span style="color: blue">SELECT </span><span style="color: magenta">CAST</span><span style="color: gray">(</span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: blue">AS VARCHAR</span><span style="color: gray">(</span>2<span style="color: gray">)) </span><span style="color: blue">FROM </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">columns </span><span style="color: teal">I 
                    </span><span style="color: blue">WHERE 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">= </span><span style="color: magenta">OBJECT_SCHEMA_NAME</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id</span><span style="color: gray">) AND 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME </span><span style="color: gray">= </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">AND 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME </span><span style="color: gray">= </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">Name
                </span><span style="color: gray">)
        + </span><span style="color: red">')'</span><span style="color: gray">)
          </span><span style="color: blue">ELSE </span><span style="color: magenta">UPPER</span><span style="color: gray">(</span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name</span><span style="color: gray">) </span><span style="color: blue">END AS </span><span style="color: teal">dataType</span><span style="color: gray">,
       </span><span style="color: magenta">CAST</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">seed_value </span><span style="color: blue">AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">)) </span><span style="color: blue">AS </span><span style="color: teal">startingNumber</span><span style="color: gray">,
       </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">increment_value </span><span style="color: blue">as </span><span style="color: teal">incrementValue</span><span style="color: gray">,
       </span><span style="color: magenta">CAST</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">last_value </span><span style="color: blue">AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">)) </span><span style="color: blue">AS </span><span style="color: teal">lastValueUsed</span><span style="color: gray">,
       </span><span style="color: magenta">CAST</span><span style="color: gray">(
          </span><span style="color: blue">CASE WHEN </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">= </span><span style="color: red">'DECIMAL' </span><span style="color: blue">THEN 
             </span><span style="color: magenta">REPLICATE</span><span style="color: gray">(</span><span style="color: red">'9'</span><span style="color: gray">, 
                    (
                    </span><span style="color: blue">SELECT </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: blue">FROM </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">columns </span><span style="color: teal">I 
                    </span><span style="color: blue">WHERE 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">= </span><span style="color: magenta">OBJECT_SCHEMA_NAME</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id</span><span style="color: gray">) AND 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME </span><span style="color: gray">= </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">AND 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME </span><span style="color: gray">= </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">Name</span><span style="color: gray">)
                    )
          </span><span style="color: blue">ELSE </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">MaxValue </span><span style="color: blue">END AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">)) -
          </span><span style="color: magenta">CAST</span><span style="color: gray">(</span><span style="color: magenta">ISNULL</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">last_value</span><span style="color: gray">, </span>0<span style="color: gray">) </span><span style="color: blue">AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">)) </span><span style="color: blue">AS </span><span style="color: teal">remainingValues</span><span style="color: gray">,
       </span><span style="color: magenta">CAST</span><span style="color: gray">(</span><span style="color: blue">CASE
             WHEN </span><span style="color: teal">seed_value </span><span style="color: gray">&lt; </span>0
             <span style="color: blue">THEN 
             </span><span style="color: gray">(
                    </span><span style="color: magenta">CAST</span><span style="color: gray">(
                </span><span style="color: blue">CASE WHEN </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">= </span><span style="color: red">'DECIMAL' </span><span style="color: blue">THEN 
                    </span><span style="color: magenta">REPLICATE</span><span style="color: gray">(</span><span style="color: red">'9'</span><span style="color: gray">, 
                          (
                          </span><span style="color: blue">SELECT </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: blue">FROM </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">columns </span><span style="color: teal">I 
                          </span><span style="color: blue">WHERE 
                             </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">= </span><span style="color: magenta">OBJECT_SCHEMA_NAME</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id</span><span style="color: gray">) AND 
                             </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME </span><span style="color: gray">= </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">AND 
                             </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME </span><span style="color: gray">= </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">Name</span><span style="color: gray">)
                          )
                </span><span style="color: blue">ELSE </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">MaxValue </span><span style="color: blue">END AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">))
             ) - 
             (
                    </span><span style="color: magenta">CAST</span><span style="color: gray">(
                </span><span style="color: blue">CASE WHEN </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">= </span><span style="color: red">'DECIMAL' </span><span style="color: blue">THEN 
                    </span><span style="color: red">'-' </span><span style="color: gray">+ </span><span style="color: magenta">REPLICATE</span><span style="color: gray">(</span><span style="color: red">'9'</span><span style="color: gray">, 
                          (
                          </span><span style="color: blue">SELECT </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: blue">FROM </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">columns </span><span style="color: teal">I 
                          </span><span style="color: blue">WHERE 
                             </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">= </span><span style="color: magenta">OBJECT_SCHEMA_NAME</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id</span><span style="color: gray">) AND 
                             </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME </span><span style="color: gray">= </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">AND 
                             </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME </span><span style="color: gray">= </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">Name</span><span style="color: gray">)
                          )
                </span><span style="color: blue">ELSE </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">MinValue </span><span style="color: blue">END AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">))
             )
             </span><span style="color: blue">ELSE 
             </span><span style="color: gray">(
                    </span><span style="color: magenta">CAST</span><span style="color: gray">(
          </span><span style="color: blue">CASE WHEN </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">= </span><span style="color: red">'DECIMAL' </span><span style="color: blue">THEN 
             </span><span style="color: magenta">REPLICATE</span><span style="color: gray">(</span><span style="color: red">'9'</span><span style="color: gray">, 
                    (
                    </span><span style="color: blue">SELECT </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: blue">FROM </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">columns </span><span style="color: teal">I 
                    </span><span style="color: blue">WHERE 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">= </span><span style="color: magenta">OBJECT_SCHEMA_NAME</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id</span><span style="color: gray">) AND 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME </span><span style="color: gray">= </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">AND 
                       </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME </span><span style="color: gray">= </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">Name</span><span style="color: gray">)
                    )
          </span><span style="color: blue">ELSE </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">MaxValue </span><span style="color: blue">END AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">))
             )
          </span><span style="color: blue">END AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">)) </span><span style="color: blue">AS </span><span style="color: teal">availableRange</span><span style="color: gray">,
       (
          </span><span style="color: magenta">CAST</span><span style="color: gray">(
             </span><span style="color: blue">CASE WHEN </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">= </span><span style="color: red">'DECIMAL' </span><span style="color: blue">THEN 
                </span><span style="color: magenta">REPLICATE</span><span style="color: gray">(</span><span style="color: red">'9'</span><span style="color: gray">, 
                       (
                       </span><span style="color: blue">SELECT </span><span style="color: teal">NUMERIC_PRECISION </span><span style="color: blue">FROM </span><span style="color: green">INFORMATION_SCHEMA</span><span style="color: gray">.</span><span style="color: green">columns </span><span style="color: teal">I 
                       </span><span style="color: blue">WHERE 
                          </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_SCHEMA </span><span style="color: gray">= </span><span style="color: magenta">OBJECT_SCHEMA_NAME</span><span style="color: gray">(</span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id</span><span style="color: gray">) AND 
                          </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">TABLE_NAME </span><span style="color: gray">= </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">AND 
                          </span><span style="color: teal">I</span><span style="color: gray">.</span><span style="color: teal">COLUMN_NAME </span><span style="color: gray">= </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">Name</span><span style="color: gray">)
                       )
             </span><span style="color: blue">ELSE </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">MaxValue </span><span style="color: blue">END AS decimal</span><span style="color: gray">(</span>38<span style="color: gray">, </span>0<span style="color: gray">))
       ) </span><span style="color: blue">AS </span><span style="color: teal">maxValueUsable
    </span><span style="color: blue">FROM </span><span style="color: green">sys</span><span style="color: gray">.</span><span style="color: green">identity_columns </span><span style="color: teal">idCol 
    </span><span style="color: gray">JOIN </span><span style="color: green">sys</span><span style="color: gray">.</span><span style="color: green">types </span><span style="color: teal">T </span><span style="color: blue">ON </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: teal">system_type_id </span><span style="color: gray">= </span><span style="color: teal">T</span><span style="color: gray">.</span><span style="color: teal">system_type_id
    </span><span style="color: gray">JOIN </span><span style="color: green">sys</span><span style="color: gray">.</span><span style="color: green">objects </span><span style="color: teal">O </span><span style="color: blue">ON </span><span style="color: teal">idCol</span><span style="color: gray">.</span><span style="color: magenta">object_id </span><span style="color: gray">= </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: magenta">object_id
    </span><span style="color: gray">JOIN </span><span style="color: teal">identityRange IR </span><span style="color: blue">ON </span><span style="color: teal">T</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">= </span><span style="color: teal">IR</span><span style="color: gray">.</span><span style="color: teal">name
    </span><span style="color: blue">WHERE 
       </span><span style="color: teal">O</span><span style="color: gray">.</span><span style="color: teal">is_ms_shipped </span><span style="color: gray">= </span>0
<span style="color: gray">)
</span><span style="color: blue">SELECT
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">tableName </span><span style="color: blue">as </span><span style="color: teal">[Table]</span><span style="color: gray">,
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">columnName </span><span style="color: blue">as </span><span style="color: teal">[Column]</span><span style="color: gray">,
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">dataType </span><span style="color: blue">as </span><span style="color: teal">[Data Type]</span><span style="color: gray">,
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">startingNumber </span><span style="color: blue">as </span><span style="color: teal">[Starting Number]</span><span style="color: gray">,
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">incrementValue </span><span style="color: blue">as </span><span style="color: teal">[Increment Value]</span><span style="color: gray">,
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">lastValueUsed </span><span style="color: blue">as </span><span style="color: teal">[Last Value Used]</span><span style="color: gray">,
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">maxValueUsable </span><span style="color: blue">as </span><span style="color: teal">[Max Value Usable]</span><span style="color: gray">,
    </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">remainingValues </span><span style="color: blue">as </span><span style="color: teal">[Remaining Values]</span><span style="color: gray">,
    </span><span style="color: blue">CASE
        WHEN </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">startingNumber </span><span style="color: gray">&lt; </span>0
        <span style="color: blue">THEN </span><span style="color: gray">(-</span>1 <span style="color: gray">* </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">startingNumber </span><span style="color: gray">+ </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">lastValueUsed</span><span style="color: gray">) / </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">availableRange
        </span><span style="color: blue">ELSE </span><span style="color: gray">(</span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">lastValueUsed </span><span style="color: gray">* </span>1.0<span style="color: gray">) / </span><span style="color: teal">identityBuffer</span><span style="color: gray">.</span><span style="color: teal">availableRange
    </span><span style="color: blue">END AS </span><span style="color: teal">[% Identity Value Consumption]
</span><span style="color: blue">FROM
    </span><span style="color: teal">identityBuffer
</span><span style="color: blue">ORDER BY
    </span><span style="color: teal">[Table]</span><span style="color: gray">, </span><span style="color: teal">[Column]

</span></pre>
<p>Nota: il fatto che praticamente ogni editor definisca come numero di partenza il numero “1” non significa che questo sia (sempre) buono.</p>
<p>Partendo dall’estremo negativo (se esiste) raddoppiamo le possibilità (le righe).</p>]]></content:encoded>
    </item>
    <item>
      <title>Thinking about Data Compression</title>
      <link>https://docs.microsoft.com/archive/blogs/andrea_benedetti_blog/thinking-about-data-compression</link>
      <pubDate>Wed, 06 Nov 2013 08:46:08 GMT</pubDate>
      <dc:creator><![CDATA[Andrea_Benedetti]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.technet.microsoft.com/andrea_benedetti_blog/2013/11/06/thinking-about-data-compression/</guid>
      <description><![CDATA[Nell’ultimo post, qui, ho parlato di come poter comprimere i dati, tramite SQLCLR, per quelle...]]></description>
      <content:encoded><![CDATA[<p>Nell’ultimo post, <a href="https://blogs.technet.com/b/andrea_benedetti_blog/archive/2013/10/31/data-compression-data-pages-xml-amp-sqlclr.aspx">qui</a>, ho parlato di come poter comprimere i dati, tramite <strong>SQLCLR</strong>, per quelle colonne che contengono informazioni che non possono essere compresse con gli strumenti nativi che SQL Server, dalla versione 2008 nelle edizioni Enterprise o Datacenter, mette a disposizione.</p>  <p>In questo post condivido un semplice modo per poter capire / studiare come la compressione, a livello di <strong>ROW</strong> o di <strong>PAGE</strong>, potrebbe incidere sul nostro database.</p>  <p>L’idea è quella di ottenere una serie di informazioni che possano fornirci le dimensioni attuali e le dimensioni che andremmo ad avere.</p>  <p>&#160;</p>  <p>Qualcosa come:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/5353.image_76E5649B.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/5353.image_5F00_76E5649B.png"><img title="image" style="border-top: 0px; border-right: 0px; background-image: none; border-bottom: 0px; padding-top: 0px; padding-left: 0px; border-left: 0px; display: inline; padding-right: 0px" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/prod.evol.blogs.technet.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/00/95/66/metablogapi/6574.image_thumb_202C86CD.png" original-url="https://blogs.technet.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-95-66-metablogapi/6574.image_5F00_thumb_5F00_202C86CD.png" width="758" height="287" /></a></p>  <p>Questo lo script:</p>  <pre class="code"><span style="color: blue">SET NOCOUNT ON</span><span style="color: gray">;
</span><span style="color: blue">DECLARE </span><span style="color: teal">@option </span><span style="color: blue">varchar</span><span style="color: gray">( </span>10 <span style="color: gray">);
</span><span style="color: blue">SET </span><span style="color: teal">@option </span><span style="color: gray">= </span><span style="color: red">'Page'</span><span style="color: gray">;
</span><span style="color: green">/* SET @option = 'Row' */

</span><span style="color: blue">IF </span><span style="color: magenta">OBJECT_ID</span><span style="color: gray">( </span><span style="color: red">'tempdb..#indexDetails' </span><span style="color: gray">)IS NOT NULL
    </span><span style="color: blue">DROP TABLE </span><span style="color: teal">#indexDetails</span><span style="color: gray">;

</span><span style="color: blue">SELECT
       </span><span style="color: teal">c</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: blue">AS </span><span style="color: teal">schemaName </span><span style="color: gray">, 
       </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: blue">AS </span><span style="color: teal">objectName </span><span style="color: gray">, 
       </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: blue">AS </span><span style="color: teal">indexName </span><span style="color: gray">, 
       </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">indid </span><span style="color: gray">, 
       </span><span style="color: teal">dpages </span><span style="color: gray">, 
       </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">dpages </span><span style="color: gray">* </span>8 <span style="color: gray">/ </span>1024.0 <span style="color: gray">, </span>2 <span style="color: gray">))</span><span style="color: blue">AS   </span><span style="color: teal">dataPagesMB</span><span style="color: gray">, 
       </span><span style="color: teal">reserved </span><span style="color: gray">, 
       </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">reserved </span><span style="color: gray">* </span>8 <span style="color: gray">/ </span>1024.0 <span style="color: gray">, </span>2 <span style="color: gray">))</span><span style="color: blue">AS </span><span style="color: teal">reservedMB</span><span style="color: gray">, 
       </span><span style="color: teal">rowcnt 
</span><span style="color: blue">INTO </span><span style="color: teal">#indexDetails
  </span><span style="color: blue">FROM </span><span style="color: green">sys</span><span style="color: gray">.</span><span style="color: green">sysindexes </span><span style="color: blue">AS </span><span style="color: teal">a
       </span><span style="color: gray">INNER JOIN </span><span style="color: green">sysobjects </span><span style="color: blue">AS </span><span style="color: teal">b </span><span style="color: blue">ON </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">id </span><span style="color: gray">= </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: teal">id
       </span><span style="color: gray">INNER JOIN </span><span style="color: green">sys</span><span style="color: gray">.</span><span style="color: green">schemas </span><span style="color: blue">AS </span><span style="color: teal">c </span><span style="color: blue">ON </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: blue">uid </span><span style="color: gray">= </span><span style="color: teal">c</span><span style="color: gray">.</span><span style="color: magenta">schema_id
  </span><span style="color: blue">WHERE 
    </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: blue">type </span><span style="color: gray">= </span><span style="color: red">'U' </span><span style="color: gray">AND 
    (</span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">NOT LIKE </span><span style="color: red">'_WA_Sys%' </span><span style="color: gray">OR </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">IS NULL) AND 
    </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">dpages </span><span style="color: gray">* </span>8 <span style="color: gray">/ </span>1024.0 <span style="color: gray">, </span>2 <span style="color: gray">)) &gt;= </span>0
  <span style="color: blue">ORDER BY </span><span style="color: teal">dpages</span><span style="color: gray">;

</span><span style="color: blue">IF </span><span style="color: magenta">OBJECT_ID</span><span style="color: gray">( </span><span style="color: red">'tempdb..#error' </span><span style="color: gray">)IS NOT NULL
    </span><span style="color: blue">DROP TABLE </span><span style="color: teal">#error</span><span style="color: gray">;

</span><span style="color: blue">CREATE TABLE </span><span style="color: teal">#error
</span><span style="color: gray">(
    </span><span style="color: teal">error_desc </span><span style="color: blue">varchar</span><span style="color: gray">( </span>2000 <span style="color: gray">) , 
    </span><span style="color: teal">err_number </span><span style="color: blue">int </span><span style="color: gray">, 
    </span><span style="color: teal">err_severity </span><span style="color: blue">int </span><span style="color: gray">, 
    </span><span style="color: teal">err_state </span><span style="color: blue">int </span><span style="color: gray">, 
    </span><span style="color: teal">err_procedure </span><span style="color: blue">varchar</span><span style="color: gray">( </span>126 <span style="color: gray">) , 
    </span><span style="color: teal">err_line </span><span style="color: blue">int </span><span style="color: gray">, 
    </span><span style="color: teal">err_message </span><span style="color: blue">varchar</span><span style="color: gray">( </span>2048 <span style="color: gray">)
);

</span><span style="color: blue">IF </span><span style="color: magenta">OBJECT_ID</span><span style="color: gray">( </span><span style="color: red">'tempdb..#dataCompressionDetails' </span><span style="color: gray">)IS NOT NULL
        </span><span style="color: blue">DROP TABLE </span><span style="color: teal">#dataCompressionDetails</span><span style="color: gray">;

</span><span style="color: blue">CREATE TABLE </span><span style="color: teal">#dataCompressionDetails
</span><span style="color: gray">(
    </span><span style="color: magenta">object_name </span><span style="color: blue">sysname </span><span style="color: gray">, 
    </span><span style="color: magenta">schema_name </span><span style="color: blue">sysname </span><span style="color: gray">, 
    </span><span style="color: teal">index_id </span><span style="color: blue">int </span><span style="color: gray">, 
    </span><span style="color: teal">partition_number </span><span style="color: blue">int </span><span style="color: gray">, 
    </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: blue">bigint </span><span style="color: gray">, 
    </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: blue">bigint </span><span style="color: gray">, 
    </span><span style="color: teal">sample_size_with_current_compression_setting_KB </span><span style="color: blue">bigint </span><span style="color: gray">, 
    </span><span style="color: teal">sample_size_with_requested_compression_setting_KB </span><span style="color: blue">bigint 
</span><span style="color: gray">);

</span><span style="color: blue">DECLARE </span><span style="color: teal">@TSql </span><span style="color: blue">varchar</span><span style="color: gray">( </span>8000 <span style="color: gray">);
</span><span style="color: blue">DECLARE </span><span style="color: teal">myCursor </span><span style="color: blue">CURSOR
    FOR SELECT
               </span><span style="color: red">'BEGIN TRY INSERT INTO #dataCompressionDetails EXEC sp_estimate_data_compression_savings     @schema_name = ''' </span><span style="color: gray">+ </span><span style="color: teal">c</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">+ </span><span style="color: red">''',     
            @object_name = ''' </span><span style="color: gray">+ </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">+ </span><span style="color: red">''',     @index_id = ' </span><span style="color: gray">+ </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">varchar</span><span style="color: gray">( </span>10 <span style="color: gray">) , </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">indid </span><span style="color: gray">) + </span><span style="color: red">',     @partition_number = NULL,     
            @data_compression = ''' </span><span style="color: gray">+ </span><span style="color: teal">@option </span><span style="color: gray">+ </span><span style="color: red">''' ; END TRY BEGIN CATCH INSERT INTO #error SELECT    
            ''[' </span><span style="color: gray">+ </span><span style="color: teal">c</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">+ </span><span style="color: red">'].[' </span><span style="color: gray">+ </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">+ </span><span style="color: red">'] failed in compression eval. The minimum row size 
            plus internal overhead exceeds the maximum allowable table row size (8060 bytes).'' AS Error_Desc        ,
            ERROR_NUMBER() AS ErrorNumber        ,ERROR_SEVERITY() AS ErrorSeverity        ,ERROR_STATE() AS ErrorState        ,
            ERROR_PROCEDURE() AS ErrorProcedure        ,ERROR_LINE() AS ErrorLine        ,ERROR_MESSAGE() AS ErrorMessage;
            END CATCH;'
          </span><span style="color: blue">FROM </span><span style="color: green">sys</span><span style="color: gray">.</span><span style="color: green">sysindexes </span><span style="color: blue">AS </span><span style="color: teal">a
               </span><span style="color: gray">INNER JOIN </span><span style="color: green">sysobjects </span><span style="color: blue">AS </span><span style="color: teal">b </span><span style="color: blue">ON </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">id </span><span style="color: gray">= </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: teal">id
               </span><span style="color: gray">INNER JOIN </span><span style="color: green">sys</span><span style="color: gray">.</span><span style="color: green">schemas </span><span style="color: blue">AS </span><span style="color: teal">c </span><span style="color: blue">ON </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: blue">uid </span><span style="color: gray">= </span><span style="color: teal">c</span><span style="color: gray">.</span><span style="color: magenta">schema_id
          </span><span style="color: blue">WHERE 
          </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: blue">type </span><span style="color: gray">= </span><span style="color: red">'U' </span><span style="color: gray">AND 
          (</span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">NOT LIKE </span><span style="color: red">'_WA_Sys%' </span><span style="color: gray">OR </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">name </span><span style="color: gray">IS NULL) AND 
          </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">dpages </span><span style="color: gray">* </span>8 <span style="color: gray">/ </span>1024.0 <span style="color: gray">, </span>2 <span style="color: gray">)) &gt;= </span>0
          <span style="color: blue">ORDER BY
                   </span><span style="color: teal">dpages</span><span style="color: gray">; 
</span><span style="color: blue">OPEN </span><span style="color: teal">myCursor</span><span style="color: gray">;
</span><span style="color: blue">FETCH NEXT FROM </span><span style="color: teal">myCursor </span><span style="color: blue">INTO </span><span style="color: teal">@TSql</span><span style="color: gray">;
</span><span style="color: blue">WHILE </span><span style="color: magenta">@@FETCH_STATUS </span><span style="color: gray">= </span>0
    <span style="color: blue">BEGIN
        EXEC </span><span style="color: gray">( </span><span style="color: teal">@TSql </span><span style="color: gray">);
        </span><span style="color: blue">FETCH NEXT FROM </span><span style="color: teal">myCursor </span><span style="color: blue">INTO </span><span style="color: teal">@TSql</span><span style="color: gray">;
    </span><span style="color: blue">END</span><span style="color: gray">;
</span><span style="color: blue">CLOSE </span><span style="color: teal">myCursor</span><span style="color: gray">;
</span><span style="color: blue">DEALLOCATE </span><span style="color: teal">myCursor</span><span style="color: gray">;


</span><span style="color: green">/* Total saving */
</span><span style="color: blue">SELECT
       </span><span style="color: magenta">cast</span><span style="color: gray">(</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">) / </span>1024.0  <span style="color: blue">as decimal</span><span style="color: gray">(</span>20<span style="color: gray">,</span>2<span style="color: gray">)) </span><span style="color: blue">AS                                                      </span><span style="color: teal">[Original size MB] </span><span style="color: gray">, 
      </span><span style="color: magenta">cast</span><span style="color: gray">(</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">) / </span>1024.0 <span style="color: gray">/ </span>1024.0  <span style="color: blue">as decimal</span><span style="color: gray">(</span>20<span style="color: gray">,</span>2<span style="color: gray">)) </span><span style="color: blue">AS                                        </span><span style="color: teal">[Original size GB] </span><span style="color: gray">, 
       </span><span style="color: magenta">cast</span><span style="color: gray">(</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">) / </span>1024.0  <span style="color: blue">as decimal</span><span style="color: gray">(</span>20<span style="color: gray">,</span>2<span style="color: gray">)) </span><span style="color: blue">AS                                                    </span><span style="color: teal">[Compression size MB] </span><span style="color: gray">, 
      </span><span style="color: magenta">cast</span><span style="color: gray">(</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">) / </span>1024.0 <span style="color: gray">/ </span>1024.0  <span style="color: blue">as decimal</span><span style="color: gray">(</span>20<span style="color: gray">,</span>2<span style="color: gray">)) </span><span style="color: blue">AS                                           </span><span style="color: teal">[Compression size GB] </span><span style="color: gray">,
       </span><span style="color: magenta">cast</span><span style="color: gray">(</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">- </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">) / </span>1024.0 <span style="color: blue">as decimal</span><span style="color: gray">(</span>20<span style="color: gray">,</span>2<span style="color: gray">)) </span><span style="color: blue">AS          </span><span style="color: teal">[Total Saving MB] </span><span style="color: gray">, 
       </span><span style="color: magenta">cast</span><span style="color: gray">(</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">- </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">) / </span>1024.0 <span style="color: gray">/ </span>1024.0  <span style="color: blue">as decimal</span><span style="color: gray">(</span>20<span style="color: gray">,</span>2<span style="color: gray">)) </span><span style="color: blue">AS </span><span style="color: teal">[Total Saving GB]
</span><span style="color: blue">FROM </span><span style="color: teal">#dataCompressionDetails</span><span style="color: gray">;

</span><span style="color: green">/* Summary */
</span><span style="color: blue">SELECT
       </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">schemaName </span><span style="color: gray">+ </span><span style="color: red">'.' </span><span style="color: gray">+ </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">objectName </span><span style="color: blue">AS                                                                                          </span><span style="color: teal">[Table] </span><span style="color: gray">, 
       </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">indexName </span><span style="color: blue">AS                                                                                                                </span><span style="color: teal">[Index] </span><span style="color: gray">, 
       </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: blue">AS                                                                                   </span><span style="color: teal">[Size current KB] </span><span style="color: gray">, 
       </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: blue">AS                                                                                 </span><span style="color: teal">[Size compression KB] </span><span style="color: gray">, 
       </span><span style="color: teal">Compression_rate </span><span style="color: gray">= </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">* </span>1.0 <span style="color: gray">/ </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">, </span>2 <span style="color: gray">)) , 
       </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">- </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: blue">AS                                      </span><span style="color: teal">[Data Compression Saving KB] </span><span style="color: gray">, 
       </span><span style="color: magenta">CAST</span><span style="color: gray">((</span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">- </span><span style="color: teal">size_with_requested_compression_setting_KB</span><span style="color: gray">) / </span>1024.0 <span style="color: blue">AS numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">))</span><span style="color: blue">AS </span><span style="color: teal">[Data Compression Saving MB]</span><span style="color: gray">,
      </span><span style="color: magenta">CAST</span><span style="color: gray">((</span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">- </span><span style="color: teal">size_with_requested_compression_setting_KB</span><span style="color: gray">) / </span>1024.0 <span style="color: gray">/ </span>1024.0 <span style="color: blue">AS numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">))</span><span style="color: blue">AS </span><span style="color: teal">[Data Compression Saving GB]
  </span><span style="color: blue">FROM </span><span style="color: teal">#indexDetails </span><span style="color: blue">AS </span><span style="color: teal">a
       </span><span style="color: gray">INNER JOIN </span><span style="color: teal">#dataCompressionDetails </span><span style="color: blue">AS </span><span style="color: teal">b </span><span style="color: blue">ON </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">objectName </span><span style="color: magenta">COLLATE </span><span style="color: teal">Latin1_General_CI_AS </span><span style="color: gray">= </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: magenta">object_name COLLATE </span><span style="color: teal">Latin1_General_CI_AS
                                    </span><span style="color: gray">AND </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">indid </span><span style="color: gray">= </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: teal">index_id
  </span><span style="color: blue">WHERE </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">* </span>1.0 <span style="color: gray">/ </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">, </span>2 <span style="color: gray">)) &lt;= </span>1
    <span style="color: gray">AND </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">&gt; </span>0
    <span style="color: gray">AND </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">* </span>1.0 <span style="color: gray">/ </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">, </span>2 <span style="color: gray">)) &lt; </span>1
  <span style="color: blue">ORDER BY
           </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">- </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: blue">DESC</span><span style="color: gray">;

</span><span style="color: green">/* Total */
</span><span style="color: blue">SELECT
       </span><span style="color: teal">schemaName </span><span style="color: gray">+ </span><span style="color: red">'.' </span><span style="color: gray">+ </span><span style="color: teal">objectName </span><span style="color: blue">AS                                                                             </span><span style="color: teal">[Table] </span><span style="color: gray">, 
       </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_current_KB </span><span style="color: gray">)</span><span style="color: blue">AS                                                                                     </span><span style="color: teal">[size current KB] </span><span style="color: gray">, 
       </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_compression_KB </span><span style="color: gray">)</span><span style="color: blue">AS                                                                                 </span><span style="color: teal">[Size compression KB] </span><span style="color: gray">, 
       </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_compression_KB </span><span style="color: gray">) * </span>1.0 <span style="color: gray">/ </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_current_KB </span><span style="color: gray">) * </span>1.0 <span style="color: gray">, </span>2 <span style="color: gray">))</span><span style="color: blue">AS </span><span style="color: teal">[Compression rate] </span><span style="color: gray">, 
       </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_current_KB </span><span style="color: gray">) - </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_compression_KB </span><span style="color: gray">)</span><span style="color: blue">AS                                                        </span><span style="color: teal">[DataCompression saving KB] </span><span style="color: gray">, 
       </span><span style="color: magenta">CAST</span><span style="color: gray">((</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_current_KB </span><span style="color: gray">) - </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_compression_KB </span><span style="color: gray">)) / </span>1024.0 <span style="color: blue">AS decimal</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">))</span><span style="color: blue">AS                  </span><span style="color: teal">[DataCompression saving MB]</span><span style="color: gray">,
      </span><span style="color: magenta">CAST</span><span style="color: gray">((</span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_current_KB </span><span style="color: gray">) - </span><span style="color: magenta">SUM</span><span style="color: gray">( </span><span style="color: teal">size_compression_KB </span><span style="color: gray">)) / </span>1024.0 <span style="color: gray">/ </span>1024.0 <span style="color: blue">AS decimal</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">))</span><span style="color: blue">AS         </span><span style="color: teal">[DataCompression saving GB]
  </span><span style="color: blue">FROM</span><span style="color: gray">( 
        </span><span style="color: blue">SELECT
               </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">schemaName </span><span style="color: gray">, 
               </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">objectName </span><span style="color: gray">, 
               </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">indexName </span><span style="color: gray">, 
               </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: blue">AS                                              </span><span style="color: teal">size_current_KB </span><span style="color: gray">, 
               </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: blue">AS                                            </span><span style="color: teal">size_compression_KB </span><span style="color: gray">, 
               </span><span style="color: teal">Compression_rate </span><span style="color: gray">= </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">* </span>1.0 <span style="color: gray">/ </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">, </span>2 <span style="color: gray">)) , 
               </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">- </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: blue">AS </span><span style="color: teal">DataCompression_Saving_KB
          </span><span style="color: blue">FROM </span><span style="color: teal">#indexDetails </span><span style="color: blue">AS </span><span style="color: teal">a
               </span><span style="color: gray">INNER JOIN </span><span style="color: teal">#dataCompressionDetails </span><span style="color: blue">AS </span><span style="color: teal">b </span><span style="color: blue">ON </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">objectName </span><span style="color: magenta">COLLATE </span><span style="color: teal">Latin1_General_CI_AS </span><span style="color: gray">= </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: magenta">object_name COLLATE </span><span style="color: teal">Latin1_General_CI_AS
                                            </span><span style="color: gray">AND </span><span style="color: teal">a</span><span style="color: gray">.</span><span style="color: teal">indid </span><span style="color: gray">= </span><span style="color: teal">b</span><span style="color: gray">.</span><span style="color: teal">index_id
          </span><span style="color: blue">WHERE </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">* </span>1.0 <span style="color: gray">/ </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">, </span>2 <span style="color: gray">)) &lt;= </span>1
            <span style="color: gray">AND </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">&gt; </span>0
            <span style="color: gray">AND </span><span style="color: magenta">CONVERT</span><span style="color: gray">( </span><span style="color: blue">numeric</span><span style="color: gray">( </span>20 <span style="color: gray">, </span>2 <span style="color: gray">) , </span><span style="color: magenta">ROUND</span><span style="color: gray">( </span><span style="color: teal">size_with_requested_compression_setting_KB </span><span style="color: gray">* </span>1.0 <span style="color: gray">/ </span><span style="color: teal">size_with_current_compression_setting_KB </span><span style="color: gray">, </span>2 <span style="color: gray">)) &lt; </span>1 <span style="color: gray">)</span><span style="color: blue">AS </span><span style="color: teal">a
  </span><span style="color: blue">GROUP BY
           </span><span style="color: teal">schemaName </span><span style="color: gray">, 
           </span><span style="color: teal">objectName</span><span style="color: gray">;

</span><span style="color: green">/* No compression */
</span><span style="color: blue">SELECT </span><span style="color: gray">* </span><span style="color: blue">FROM </span><span style="color: teal">#error</span><span style="color: gray">;

</span></pre>]]></content:encoded>
    </item>
  </channel>
</rss>