﻿<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#">
  <channel>
    <title>Angelos Petropoulos' WebLog</title>
    <description>Thoughts occasionally worth reading</description>
    <link>http://angelicnas/blog/</link>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>BlogEngine.Net Syndication Generator 1.0.0.0 (http://dotnetblogengine.net/)</generator>
    <language>en-GB</language>
    <blogChannel:blogRoll>http://angelicnas/blog/opml.axd</blogChannel:blogRoll>
    <blogChannel:blink>http://www.dotnetblogengine.net/syndication.axd?format=rss</blogChannel:blink>
    <dc:creator>Angelos Petropoulos</dc:creator>
    <dc:title>Angelos Petropoulos' WebLog</dc:title>
    <geo:lat>0.000000</geo:lat>
    <geo:long>0.000000</geo:long>
    <item>
      <title>Get a decimal that is not padded with zeros in SQL Server 2005</title>
      <description>&lt;p&gt;
In SQL when you convert anything to a decimal you have to provide the number of decimal places as part of the conversation. For example
&lt;/p&gt;
&lt;p&gt;
DECLARE @NumberAsString VARCHAR(20)&lt;br /&gt;
SET @NumberAsString = &amp;#39;1038.93801&amp;#39;
&lt;/p&gt;
&lt;p&gt;
DECLARE @NumberAsDecimal DECIMAL(28.10)&lt;br /&gt;
SET @NumberAsDecimal = CONVERT(DECIMAL(28,10), @NumberAsString)
&lt;/p&gt;
&lt;p&gt;
If you execute SELECT @NumberAsDecimal what you get back is &amp;#39;1038.9380100000&amp;#39;. The reason why the result is padded with zeros is because the number of decimal places specified during the conversion is 10. Such a result can look very ugly in reports.
&lt;/p&gt;
&lt;p&gt;
In SQL server 2005 there is no easy way to get rid of extra zeros. The fastest and simplest way I know is the following
&lt;/p&gt;
&lt;p&gt;
CREATE FUNCTION GetNonPaddedDecimal&lt;br /&gt;
(&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; @number Decimal(38,10)&lt;br /&gt;
)&lt;br /&gt;
RETURNS VARCHAR(max)&lt;br /&gt;
AS BEGIN&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RETURN REPLACE(RTRIM(REPLACE(REPLACE(RTRIM(REPLACE(@number, &amp;#39;0&amp;#39;, &amp;#39; &amp;#39;)), &amp;#39; &amp;#39;, &amp;#39;0&amp;#39;), &amp;#39;.&amp;#39;, &amp;#39; &amp;#39;)), &amp;#39; &amp;#39;, &amp;#39;.&amp;#39;) &amp;nbsp;&lt;br /&gt;
END&lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;
Thanks to Ashar for coming up with it 
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx&amp;amp;title=Get a decimal that is not padded with zeros in SQL Server 2005" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx&amp;amp;title=Get a decimal that is not padded with zeros in SQL Server 2005" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx&amp;amp;title=Get a decimal that is not padded with zeros in SQL Server 2005" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=293d9fff-16e8-486c-83dd-bf68b31de2e0</guid>
      <pubDate>Wed, 26 Nov 2008 16:14:00 +0100</pubDate>
      <category>Code</category>
      <category>SQL</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=293d9fff-16e8-486c-83dd-bf68b31de2e0</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=293d9fff-16e8-486c-83dd-bf68b31de2e0</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/Get-a-decimal-that-is-not-padded-with-zeros-in-SQL-Server-2005.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=293d9fff-16e8-486c-83dd-bf68b31de2e0</wfw:commentRss>
    </item>
    <item>
      <title>(Interfaces &amp;&amp; DI == Design.Good) does not always return true</title>
      <description>&lt;p&gt;
I have previously stated my &lt;a href="http://angelicnas/blog/blog/post/More-things-to-consider-about-the-new-C-feature2c-Extension-Methods.aspx" target="_blank" title="More things to consider about the new C# feature, Extension Methods"&gt;reservations regarding Extensions methods&lt;/a&gt;, however &lt;a href="http://www.elilopian.com/2008/04/29/understanding-mock-objects-better-design/" target="_blank" title="Understanding Mock Objects - Better Design "&gt;this Eli Lopian&amp;#39;s post&lt;/a&gt; still makes a good read. 
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx&amp;amp;title=(Interfaces &amp;&amp; DI == Design.Good) does not always return true" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx&amp;amp;title=(Interfaces &amp;&amp; DI == Design.Good) does not always return true" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx&amp;amp;title=(Interfaces &amp;&amp; DI == Design.Good) does not always return true" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=e3f567d7-1b1f-439b-af6e-e8f6f7ddf3a4</guid>
      <pubDate>Wed, 30 Apr 2008 09:38:00 +0100</pubDate>
      <category>General</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=e3f567d7-1b1f-439b-af6e-e8f6f7ddf3a4</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=e3f567d7-1b1f-439b-af6e-e8f6f7ddf3a4</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/(Interfaces--DI-3d3d-DesignGood)-does-not-always-return-true.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=e3f567d7-1b1f-439b-af6e-e8f6f7ddf3a4</wfw:commentRss>
    </item>
    <item>
      <title>WinXP SP3 available in MSDN</title>
      <description>&lt;p&gt;
Those of you who have an MSDN subscription should be able to get WinXP SP3 by navigating to the &amp;quot;Top Subscriber Downloads&amp;quot; part of the MSDN home page (scroll at the bottom). 
&lt;/p&gt;
&lt;p&gt;
The link is labelled Windows XP Service Pack 3 (x86) - CD (English) 
&lt;/p&gt;
&lt;p&gt;
Update: It&amp;#39;s worth noting that if for some reason you don&amp;#39;t want Windows Update to install WinXP SP3 automatically, &lt;a href="http://www.lockergnome.com/blade/2008/04/16/windows-xp-sp3-is-coming-block-it-if-you-want/" target="_blank" title="Windows XP SP3 Is Coming - Block It If You Want"&gt;you can block it&lt;/a&gt;.
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx&amp;amp;title=WinXP SP3 available in MSDN" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx&amp;amp;title=WinXP SP3 available in MSDN" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx&amp;amp;title=WinXP SP3 available in MSDN" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=e862e521-e059-47d4-99c5-79ddb407622c</guid>
      <pubDate>Thu, 24 Apr 2008 13:24:00 +0100</pubDate>
      <category>General</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=e862e521-e059-47d4-99c5-79ddb407622c</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=e862e521-e059-47d4-99c5-79ddb407622c</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/WinXP-SP3-available-in-MSDN.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=e862e521-e059-47d4-99c5-79ddb407622c</wfw:commentRss>
    </item>
    <item>
      <title>A more straightforward Microsoft Unity quickstart</title>
      <description>&lt;p&gt;
I recently downloaded and started playing with Unity, trying to see if it fits our project&amp;#39;s needs. You can &lt;a href="http://msdn2.microsoft.com/en-us/library/cc468366.aspx" target="_blank" title="Microsoft Unity Application Block"&gt;grab the installer&lt;/a&gt; from CodePlex, which also includes a couple of quickstarts. 
&lt;/p&gt;
&lt;p&gt;
Personally I found the bundled quickstarts too advanced and complicated&amp;nbsp;for someone that hasn&amp;#39;t used IoC frameworks before. In my opinion they try to demonstrate too much functionality at once. In any case, I decided to create a small project that would put Unity to use and I thought I&amp;#39;d share it here, as others may find it useful. 
&lt;/p&gt;
&lt;p&gt;
Enjoy 
&lt;/p&gt;
&lt;p&gt;
&lt;a rel="enclosure" href="http://angelicnas/blog/file.axd?file=Simple+Unity+Quickstart.zip"&gt;Simple Unity Quickstart.zip (23.13 kb)&lt;/a&gt; 
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx&amp;amp;title=A more straightforward Microsoft Unity quickstart" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx&amp;amp;title=A more straightforward Microsoft Unity quickstart" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx&amp;amp;title=A more straightforward Microsoft Unity quickstart" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=1fd1201f-0b64-4351-bf6b-4b3fe9bbd1a6</guid>
      <pubDate>Tue, 22 Apr 2008 14:54:00 +0100</pubDate>
      <category>Code</category>
      <category>Demo</category>
      <category>Patterns</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=1fd1201f-0b64-4351-bf6b-4b3fe9bbd1a6</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=1fd1201f-0b64-4351-bf6b-4b3fe9bbd1a6</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/A-more-straightforward-Microsoft-Unity-quickstart.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=1fd1201f-0b64-4351-bf6b-4b3fe9bbd1a6</wfw:commentRss>
    </item>
    <item>
      <title>ThreadPool - More threads per CPU, more memory consumed ... possible gotcha!</title>
      <description>&lt;p&gt;
So you know how the actual CLR hasn&amp;#39;t changed since .NET 2.0? &lt;a href="http://www.danielmoth.com/Blog/2007/06/net-framework-35.html" target="_blank" title=".NET Framework 3.5"&gt;That is not entirely true (i.e. the one for Vista is a different build number)&lt;/a&gt;, especially when you consider the .NET 3.5 release. The cut a long story short, &lt;a href="http://www.topxml.com/rbnews/WSCF/WCF/re-68509_Microsoft--NET-Framework-2-0-Service-Pack-1-and-How-to-Detect-It.aspx" target="_blank"&gt;Microsoft has taken the opportunity to include a service pack for the .NET CLR 2.0&lt;/a&gt;, which is a great thing as we are getting fixes for some annoying bugs.
&lt;/p&gt;
&lt;p&gt;
One of the changes in SP1 of the CLR is the increase of the max number of threads per CPU that the .NET ThreadPool supports. It used to be 25 per CPU and the number has now increased to 250. &lt;a href="http://www.dotnetconsult.co.uk/weblog2/PermaLink,guid,29363d7e-79c1-432b-8ec1-5583ec5e9aa3.aspx" target="_blank" title="ThreadPool default change"&gt;Richard Blewett points out how this could be a potential gotcha&lt;/a&gt; as more threads means more memory consumed and ... well read the post! It&amp;#39;s something not very likely to happen, but definitely worth knowing about. Plus, he talks about what brought this change, which is always interesting to know.
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx&amp;amp;title=ThreadPool - More threads per CPU, more memory consumed ... possible gotcha!" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx&amp;amp;title=ThreadPool - More threads per CPU, more memory consumed ... possible gotcha!" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx&amp;amp;title=ThreadPool - More threads per CPU, more memory consumed ... possible gotcha!" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=48370081-5eae-4360-b8bb-2a45bf50c312</guid>
      <pubDate>Mon, 03 Dec 2007 10:46:00 +0100</pubDate>
      <category>General</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=48370081-5eae-4360-b8bb-2a45bf50c312</pingback:target>
      <slash:comments>1</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=48370081-5eae-4360-b8bb-2a45bf50c312</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/ThreadPool---More-threads-per-CPU2c-more-memory-consumed--possible-gotcha!.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=48370081-5eae-4360-b8bb-2a45bf50c312</wfw:commentRss>
    </item>
    <item>
      <title>Using XML as a datatype in SQL Server 2005</title>
      <description>&lt;p&gt;
There are many articles and posts out there that describe the XML capabilities of SQL Server 2005. Some of the top links are
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.developer.com/db/article.php/3531196" target="_blank" title="The Fundamentals of the SQL Server 2005 XML Datatype"&gt;The Fundamentals of the SQL Server 2005 XML Datatype&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://technet.microsoft.com/en-us/library/ms345117.aspx" target="_blank" title="XML Support in Microsoft SQL Server 2005"&gt;XML Support in Microsoft SQL Server 2005&lt;br /&gt;
&lt;/a&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms345122.aspx" target="_blank" title="Introduction to XQuery in SQL Server 2005"&gt;Introduction to XQuery in SQL Server 2005&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blogs.msdn.com/denisruc/" target="_blank" title="Denis Ruckebusch's blog "&gt;Denis Ruckebusch&amp;#39;s blog&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
The only problem is that you need to work rather hard to put all of this information together before you can get a decent working example. I went through this excercise myself, so I thought it would be worth posting it here. The example is simple, I want to store an XML in one of my columns and I want the XML to be typed (i.e. to adhere to a schema). The first step is to define the schema for the XML file and to import it into SQL Server 2005.
&lt;/p&gt;
&lt;p&gt;
The schema defines the following structure
&lt;/p&gt;
&lt;p&gt;
Order&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; OrderItem&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Price&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Quantity&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Importing the schema into SQL server is pretty simple, just use following T-SQL statement&lt;br /&gt;
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;CREATE XML SCHEMA COLLECTION [dbo].[OrderCollection] AS &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;#39;&lt;span class="kwrd"&gt;&amp;lt;?&lt;/span&gt;&lt;span class="html"&gt;xml&lt;/span&gt; &lt;span class="attr"&gt;version&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;1.0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;encoding&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;utf-8&amp;quot;&lt;/span&gt;?&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:schema&lt;/span&gt; &lt;span class="attr"&gt;xmlns:xsd&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;http://www.w3.org/2001/XMLSchema&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;  &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Order&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:complexContent&lt;/span&gt; &lt;span class="attr"&gt;mixed&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:restriction&lt;/span&gt; &lt;span class="attr"&gt;base&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xsd:anyType&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;maxOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;unbounded&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;OrderItem&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:complexContent&lt;/span&gt; &lt;span class="attr"&gt;mixed&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:restriction&lt;/span&gt; &lt;span class="attr"&gt;base&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xsd:anyType&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:sequence&lt;/span&gt; &lt;span class="attr"&gt;minOccurs&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Name&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:simpleContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:extension&lt;/span&gt; &lt;span class="attr"&gt;base&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xsd:string&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:simpleContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Price&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:simpleContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:extension&lt;/span&gt; &lt;span class="attr"&gt;base&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xsd:decimal&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:simpleContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt; &lt;span class="attr"&gt;name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;Quantity&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:simpleContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;xsd:extension&lt;/span&gt; &lt;span class="attr"&gt;base&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;xsd:integer&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:simpleContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:restriction&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:complexContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:sequence&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:restriction&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:complexContent&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:complexType&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;xsd:schema&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&amp;#39;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
Using SQL Server Management Studio you can confirm that the XML Schema is now available to be used by navigating to the &amp;quot;Types&amp;quot; node as shown below&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://angelicnas/blog/image.axd?picture=schema_in_sql.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;br /&gt;
It is now possible to create a table and define one of its columns to be of the datatype XML and to ensure that the XML inserted into the column is validated against the schema we just added using the following T-SQL statement
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;TABLE&lt;/span&gt; [dbo].[&lt;span class="kwrd"&gt;Order&lt;/span&gt;](&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ID] [bigint] &lt;span class="kwrd"&gt;IDENTITY&lt;/span&gt;(1,1) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[CustomerID] [bigint] &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span class="kwrd"&gt;Value&lt;/span&gt;] [xml](DOCUMENT [dbo].[OrderCollection]) &lt;span class="kwrd"&gt;NOT&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
Inserting a record into the new table is still exactly the same as before, with the only difference now that one of the parameters will be an XML document
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;INSERT&lt;/span&gt; &lt;span class="kwrd"&gt;INTO&lt;/span&gt; [&lt;span class="kwrd"&gt;Order&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[CustomerID],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span class="kwrd"&gt;Value&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;VALUES&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1625,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="str"&gt;&amp;#39;&amp;lt;Order&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;OrderItem&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Name&amp;gt;Chair&amp;lt;/Name&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Price&amp;gt;12.99&amp;lt;/Price&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Quantity&amp;gt;4&amp;lt;/Quantity&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/OrderItem&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;OrderItem&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Name&amp;gt;Table&amp;lt;/Name&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Price&amp;gt;44.99&amp;lt;/Price&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Quantity&amp;gt;1&amp;lt;/Quantity&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/OrderItem&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/Order&amp;gt;&amp;#39;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
Now comes the interesting part. Of course you can now select this record within your application code and manipulate the XML using the standard libraries, but what if you want to access this information within SQL Server (perhaps through an ordinary stored procedure). Another possibility is that you would like to perform some reporting on the data that is stored within the XML document.
&lt;/p&gt;
&lt;p&gt;
The following T-SQL will turn the XML file into tabular format, with columns for each element that contains a value (i.e. the elements&amp;nbsp; &amp;quot;Name&amp;quot;, &amp;quot;Price&amp;quot; and &amp;quot;Quantity&amp;quot;) and a new row for each instance of the element &amp;quot;OrderItem&amp;quot;.
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="rem"&gt;-- Declare a variable of type XML&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;DECLARE&lt;/span&gt; @xml XML&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="rem"&gt;-- Assign the value of the XML document&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="rem"&gt;-- we want to manipulate to the variable @xml&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@xml = [&lt;span class="kwrd"&gt;Value&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[&lt;span class="kwrd"&gt;Order&lt;/span&gt;]&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = 1&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="rem"&gt;-- Present the data in tabular format&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="rem"&gt;-- Select the element &amp;quot;Name&amp;quot; and convert its value to a VARCHAR(100)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OrderItemFragment.Details.query(&lt;span class="str"&gt;&amp;#39;Name&amp;#39;&lt;/span&gt;).&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, &lt;span class="str"&gt;&amp;#39;VARCHAR(100)&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [Name],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="rem"&gt;-- Select the element &amp;quot;Price&amp;quot; and conver its value to DECIMAL(28,2)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OrderItemFragment.Details.query(&lt;span class="str"&gt;&amp;#39;Price&amp;#39;&lt;/span&gt;).&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, &lt;span class="str"&gt;&amp;#39;DECIMAL(28,2)&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [Price],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="rem"&gt;-- Select the element &amp;quot;Quantity&amp;quot; and convert its value to INTEGER&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OrderItemFragment.Details.query(&lt;span class="str"&gt;&amp;#39;Quantity&amp;#39;&lt;/span&gt;).&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, &lt;span class="str"&gt;&amp;#39;INTEGER&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [Quantity]&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="rem"&gt;-- Split the XML document into individual pieces, one for each&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="rem"&gt;-- instance of the element &amp;quot;OrderItemFragment&amp;quot;. Name the tabular result&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="rem"&gt;-- &amp;quot;OrderItem&amp;quot; and give its single column the name &amp;quot;Details&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@xml.nodes(&lt;span class="str"&gt;&amp;#39;/Order/OrderItem&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; OrderItemFragment([Details])&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
The code is not really that complicated, but there are some rules. 
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;The function &amp;quot;.nodes()&amp;quot; used to split the XML file into fragments cannot be performed on value of the datatype XML. &lt;strike&gt;The reason I am selecting the XML file that I want to manipulate into a local variable first is to work around this limitation. I tried long and hard, but I could not get &amp;quot;Order.Value.nodes()&amp;quot; to work&lt;/strike&gt;. (see &amp;quot;Update 29/11/2007&amp;quot;)&lt;br /&gt;
	&lt;/li&gt;
	&lt;li&gt;The output of the function &amp;quot;.nodes()&amp;quot; is tabular and has to be named and its columns have to be specified.&lt;/li&gt;
	&lt;li&gt;The output of the function &amp;quot;.nodes()&amp;quot; can &lt;strong&gt;only&lt;/strong&gt; be accessed through SQL XML functions such as &amp;quot;.value()&amp;quot;, &amp;quot;.query()&amp;quot;, &amp;quot;.count()&amp;quot;, etc.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br /&gt;
The line &amp;quot;@xml.nodes(&amp;#39;/Order/OrderItem&amp;#39;)&amp;quot; navigates through the XML document by first finding the element &amp;quot;Order&amp;quot; and then the element &amp;quot;OrderItem&amp;quot;. Every time it comes across this relationship of elements (i.e. &amp;quot;Order&amp;quot; is parent and &amp;quot;OrderItem&amp;quot; is child) it seperate it from the rest of the document and returns an XML fragment that is the contents of the &amp;quot;OrderItem&amp;quot; element it has identified. The result of the XQuery statement is the collection of these XML fragments.
&lt;/p&gt;
&lt;p&gt;
The line &amp;quot;OrderItemFragment.Details.query(&amp;#39;Name&amp;#39;).value(&amp;#39;.&amp;#39;, &amp;#39;VARCHAR(100)&amp;#39;) AS [Name]&amp;quot; uses the &amp;quot;.query()&amp;quot; function to find the element called &amp;quot;Name&amp;quot;. It then uses the function &amp;quot;.value()&amp;quot; to retrieve the identified element&amp;#39;s value and convert it to a SQL datatype.
&lt;/p&gt;
&lt;p&gt;
The result are exactly what you would expect a T-SQL statement to return&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://angelicnas/blog/image.axd?picture=result.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;
Update 29/11/2007:&lt;/strong&gt; There had to be a way and sure enough I found it. You can use the &amp;quot;.nodes()&amp;quot; function on an XML columns straight in the &amp;quot;FROM&amp;quot; part of the statement rather than having to user a variable. The previous SQL statement is equivalent to this one
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OrderItemFragment.Details.query(&lt;span class="str"&gt;&amp;#39;Name&amp;#39;&lt;/span&gt;).&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, &lt;span class="str"&gt;&amp;#39;VARCHAR(100)&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [Name],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OrderItemFragment.Details.query(&lt;span class="str"&gt;&amp;#39;Price&amp;#39;&lt;/span&gt;).&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, &lt;span class="str"&gt;&amp;#39;DECIMAL(28,2)&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [Price],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;OrderItemFragment.Details.query(&lt;span class="str"&gt;&amp;#39;Quantity&amp;#39;&lt;/span&gt;).&lt;span class="kwrd"&gt;value&lt;/span&gt;(&lt;span class="str"&gt;&amp;#39;.&amp;#39;&lt;/span&gt;, &lt;span class="str"&gt;&amp;#39;INTEGER&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; [Quantity]&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Order] &lt;span class="kwrd"&gt;CROSS APPLY &lt;/span&gt;&lt;/span&gt;[Value]&lt;span&gt;.nodes(&lt;span class="str"&gt;&amp;#39;/Order/OrderItem&amp;#39;&lt;/span&gt;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; OrderItemFragment([Details])&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID = 1&lt;/span&gt;
&lt;/div&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx&amp;amp;title=Using XML as a datatype in SQL Server 2005" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx&amp;amp;title=Using XML as a datatype in SQL Server 2005" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx&amp;amp;title=Using XML as a datatype in SQL Server 2005" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=32e034b2-a2f9-422e-852b-a7a387d8ae0b</guid>
      <pubDate>Wed, 28 Nov 2007 22:14:00 +0100</pubDate>
      <category>SQL</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=32e034b2-a2f9-422e-852b-a7a387d8ae0b</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=32e034b2-a2f9-422e-852b-a7a387d8ae0b</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/Using-XML-as-a-datatype-in-SQL-Server-2005.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=32e034b2-a2f9-422e-852b-a7a387d8ae0b</wfw:commentRss>
    </item>
    <item>
      <title>Persisting .NET DateTime</title>
      <description>&lt;p&gt;
&lt;a href="http://angelicnas/blog/blog/post/Persisting-NET-DateTime-in-SQL-Server-2000.aspx" target="_blank"&gt;In a previous post&lt;/a&gt; I pointed out how .NET&amp;#39;s DateTime and SQL Server&amp;#39;s DateTime have different percisions and comparing two instances of what was originally the same value could result in a mismatch. I also provided a solution that uses a BIGINT field in SQL Server to store the value as ticks and a user defined function to convert them to SQL&amp;#39;s DateTime and back.
&lt;/p&gt;
&lt;p&gt;
The problem with that solution is the extra processing that is required for performing the simple task of saving and loading a date and time value. This becomes an issue when dealing with a large amount of data, such as in the case of rendering of a historical report for example. There is an alternative that eleviates the need for any extra processing when saving and loading the value, but its a compromise.
&lt;/p&gt;
&lt;p&gt;
The difference in percission is minor (only at the millisecond level). Looking at the situation pragmatically, in most scenarios it doesn&amp;#39;t really matter. We rarely deal with time down to the level of milliseconds, typically seconds are more than enough. If the milliseconds are ommited both in .NET and in SQL Server, then there is no discrepancies between the values. This means that there is some data loss as milliseconds are removed from the date and time, but if they were not needed in the first place then this is not necessarily a problem.
&lt;/p&gt;
&lt;p&gt;
The following method can be used to strip the milliseconds off a .NET DateTime
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; DateTime PrepareForSql(DateTime dateTime)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime((&lt;span class="kwrd"&gt;long&lt;/span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Math.Floor((&lt;/span&gt;&lt;span&gt;&lt;span class="kwrd"&gt;decimal&lt;/span&gt;&lt;/span&gt;&lt;span&gt;)dateTime.Ticks / &lt;/span&gt;&lt;span&gt;10000000&lt;/span&gt;&lt;span&gt;) * 10000000);&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;strong&gt;Update:&lt;/strong&gt;&amp;nbsp; To those that know me it won&amp;#39;t be a surprise, but I&amp;#39;m dumb. I thought I was being clever by using .Ticks and Math.Floor, when just doing the following has exactly the same effect and it is more performant
&lt;/p&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; DateTime PrepareForSql(DateTime dateTime)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;{&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; DateTime(dateTime.Year, dateTime.Month, dateTime.Day,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;dateTime.Hour, dateTime.Minute, dateTime.Second);&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;}&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;br /&gt;
Run #10&lt;br /&gt;
&amp;nbsp; TestNewDate&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 00:00:00.1702448&lt;br /&gt;
&amp;nbsp; TestNewDateUsingTicks 00:00:00.2002880&amp;nbsp;
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/Persisting-NET-DateTime.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/Persisting-NET-DateTime.aspx&amp;amp;title=Persisting .NET DateTime" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/Persisting-NET-DateTime.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/Persisting-NET-DateTime.aspx&amp;amp;title=Persisting .NET DateTime" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/Persisting-NET-DateTime.aspx&amp;amp;title=Persisting .NET DateTime" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/Persisting-NET-DateTime.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/Persisting-NET-DateTime.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/Persisting-NET-DateTime.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=be138169-69c7-4e45-b20f-f307336e5df4</guid>
      <pubDate>Mon, 19 Nov 2007 20:08:00 +0100</pubDate>
      <category>SQL</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=be138169-69c7-4e45-b20f-f307336e5df4</pingback:target>
      <slash:comments>3</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=be138169-69c7-4e45-b20f-f307336e5df4</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/Persisting-NET-DateTime.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=be138169-69c7-4e45-b20f-f307336e5df4</wfw:commentRss>
    </item>
    <item>
      <title>The VS2008 effect - MSDN funky error message</title>
      <description>&lt;p&gt;
A co-worker came across this error today 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;&lt;a rel="lightbox" href="http://angelicnas/blog/image.axd?picture=MSDN_destroyed.jpg"&gt;&lt;img src="http://angelicnas/blog/image.axd?picture=/Thumbnails/MSDN_destroyed_thumb_345_200.jpg" alt="" width="345" height="200" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://forums.asp.net/t/956297.aspx" target="_blank"&gt;Looks like&lt;/a&gt; someone went live with an update to the source code and forgot to deploy some of the referenced DLLs. 
&lt;/p&gt;
&lt;p&gt;
BTW remote debugging is enabled ... uncool MS, uncool!&amp;nbsp; 
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx&amp;amp;title=The VS2008 effect - MSDN funky error message" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx&amp;amp;title=The VS2008 effect - MSDN funky error message" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx&amp;amp;title=The VS2008 effect - MSDN funky error message" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=91dfb526-72a1-4818-95c3-27d2b8e23a01</guid>
      <pubDate>Mon, 19 Nov 2007 16:55:00 +0100</pubDate>
      <category>General</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=91dfb526-72a1-4818-95c3-27d2b8e23a01</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=91dfb526-72a1-4818-95c3-27d2b8e23a01</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/The-VS2008-effect---MSDN-funky-error-message.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=91dfb526-72a1-4818-95c3-27d2b8e23a01</wfw:commentRss>
    </item>
    <item>
      <title>SQL Server 2008 - Intellisense finally included</title>
      <description>&lt;p&gt;
All I can say is, &lt;a href="http://coolthingoftheday.blogspot.com/2007/11/sql-server-2008-gets-intellisense-baked.html" target="_blank"&gt;finally&lt;/a&gt;!
&lt;/p&gt;
&lt;p&gt;
I&amp;#39;ve used &lt;a href="http://www.red-gate.com/products/SQL_Prompt/index.htm" target="_blank"&gt;3rd party tools&lt;/a&gt; in the past to get intellisense support within Query Analyser and&amp;nbsp; SQL Server Management Studio, but to be honest they don&amp;#39;t quite work. Sometimes the auto-complete list does not show up, other times it does things you didn&amp;#39;t want it to do such as insert the first item from the list because you pressed tab even though all you meant to do was indent the text, etc.
&lt;/p&gt;
&lt;p&gt;
With all these different naming convensions enforced on developers, typically authored by people that never actually write SQL and their goal is to define every aspect of a database object within its name (e.g. transTblCustomer.bigintCustomerID kill me now), this is more than just a nice to have. 
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx&amp;amp;title=SQL Server 2008 - Intellisense finally included" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx&amp;amp;title=SQL Server 2008 - Intellisense finally included" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx&amp;amp;title=SQL Server 2008 - Intellisense finally included" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=d6333733-31bc-453f-8a7a-cc814e61322a</guid>
      <pubDate>Mon, 19 Nov 2007 10:26:00 +0100</pubDate>
      <category>SQL</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=d6333733-31bc-453f-8a7a-cc814e61322a</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=d6333733-31bc-453f-8a7a-cc814e61322a</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/SQL-Server-2008---Intellisense-finally-included.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=d6333733-31bc-453f-8a7a-cc814e61322a</wfw:commentRss>
    </item>
    <item>
      <title>TechEd Wisdom – Still not convinced about LINQ</title>
      <description>&lt;p&gt;
First of all, let&amp;rsquo;s get something straight. LINQ is not SQL. LINQ is a query framework integrated to the language. What it queries is irrelevant and could be pretty much anything (which is why you have all these specific implementations such as LINQ to SQL, LINQ to XML, LINQ to SharePoint, etc). The only thing that LINQ and SQL have in common is similarity in syntax.&lt;br /&gt;
&lt;br /&gt;
With that out of the way, let&amp;rsquo;s talk &amp;ldquo;advantages&amp;rdquo; (I also did the air-quote thing as I typed this). 
&lt;/p&gt;
&lt;h2&gt;Unified way of accessing different types of data&lt;/h2&gt;
&lt;p&gt;
*cough*bullshit*cough*. We have been drinking this cool aid for years now. Wasn&amp;rsquo;t this the tag line for ADO.NET as well when it was first introduced? The reality is that you build an application and you either connect to a database or use XML files. You will not switch between the two because someone raised a change request. 
&lt;/p&gt;
&lt;p&gt;
I don&amp;rsquo;t care that I can use LINQ to query both XML and relational data. I am happy to use SQL for one and XPath for the other. Just as I am happy to write my own code to query proprietary text files and third party libraries to query PDF files. I just don&amp;rsquo;t care because in the real world it adds no value. If I have been using LINQ to SQL for 3 years it does not mean I also have 3 years of experience in LINQ to XML. I still don&amp;rsquo;t have a clue what the best practices and related architectural decisions are around using XML. 
&lt;/p&gt;
&lt;p&gt;
Look at it pragmatically. When was the last time you wanted to write a SQL-like statement to access your collection of objects or XML file? Personally I can&amp;rsquo;t even remember, but if the occasion does arise, I will write a method that does it and re-use it; big deal. &lt;a href="http://weblogs.asp.net/scottgu/archive/2006/05/14/Using-LINQ-with-ASP.NET-_2800_Part-1_2900_.aspx" target="_blank"&gt;You see these examples on the internet&lt;/a&gt; where they create a class scope array with random data and then use LINQ to find the item that has a length greater than 3 and then order the results alphabetically. Are you kidding me? God, you are not kidding. OK, a couple of questions 
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;In a production system, where is the data held? The answer 99.9% of the time is a database.&lt;/li&gt;
	&lt;li&gt;In a production system, would you load random data from the database, get it through all the tiers and then do your calculations/filtering/etc. in the front end tier? If you answered yes, I don&amp;rsquo;t want to ever use your code or have you in my dev team; you are terrible.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br /&gt;
&lt;strong&gt;Disclaimer:&lt;/strong&gt; There will always be that one in a thousand situations where something unorthodox is required to make a very specific solution work. I don&amp;rsquo;t care. We are discussing a feature that has been embedded to the programming language itself. This is not about the exceptions; this is about the general rule. 
&lt;/p&gt;
&lt;h2&gt;Support within the IDE with intellisense and compile time checks&lt;/h2&gt;
&lt;p&gt;
Well last time I checked, all code does. Why on earth is this considered an advantage? Its an advantage over using something terrible like scripting, sure, but this is effectively lowering the standards so you can brag about something that in reality is a given. Who would be happy using something new that does not provide you with intellisense, does not type check and only has run-time error checking? Even the JavaScript developers won&amp;rsquo;t have to put up with that when using VS 2008. 
&lt;/p&gt;
&lt;h2&gt;You don&amp;rsquo;t have to write SQL!&lt;/h2&gt;
&lt;p&gt;
Clearly this is only applicable to LINQ to SQL and not LINQ in general. I&amp;rsquo;m addressing it because it makes up the biggest *wow* factor in the eyes of most developers who can&amp;rsquo;t wait to get their hands on LINQ. 
&lt;/p&gt;
&lt;p&gt;
So, what do you gain by using LINQ to SQL? 
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;You don&amp;rsquo;t have to write T-SQL (yes T-SQL, because LINQ to SQL only works with SQL Server) and you save time and effort!&lt;/li&gt;
	&lt;li&gt;You have intellisense and compile time checking!&lt;/li&gt;
	&lt;li&gt;Umm&amp;hellip;that&amp;rsquo;s about it&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;br /&gt;
Let&amp;rsquo;s look at real world applications and enterprise scale applications that use a database back end. Does the database expose its tables and then the application executes dynamic T-SQL at run-time? If you answered yes, shoot yourself now and preferably in the head.&amp;nbsp; Do it, I&amp;rsquo;ll wait. The database is locked down as much as possible. You use stored procedures as a fa&amp;ccedil;ade between the data access layer and the data. This way you can lock down access, you can ensure there is no way SQL injection can ever take place no matter how stupid the application is, etc. So it turns out, you have to write exactly the same amount of T-SQL as you did before, regardless if you use LINQ to SQL or not. 
&lt;/p&gt;
&lt;p&gt;
Now, you have your data within your application. Do you use datasets to hold your data? You said yes didn&amp;rsquo;t you? I thought I told you to shoot yourself. Data is stored in business entities so that validation can take place and business rules can be applied. So both the business and the data access layer remain unchanged regardless whether LINQ to SQL was used or not. 
&lt;/p&gt;
&lt;p&gt;
So you have written all this code you would write if you did not use LINQ to SQL and now &amp;hellip; well now you have to write more code so that you can use this cool thing called LINQ. Except there is no point using LINQ now as you have loaded your data from the database, you have already created business entities, applied the validation and business rules and the job is done. Where was LINQ useful in any part of this process? And please don&amp;rsquo;t say that you might want to do filtering and further data manipulation at the presentation layer because I will shoot you myself. 
&lt;/p&gt;
&lt;p&gt;
Why am I bitching so much? 
&lt;/p&gt;
&lt;h2&gt;LINQ has polluted .NET&lt;/h2&gt;
&lt;p&gt;
The languages and .NET in general have been polluted by LINQ. Over 90% of the features added to .NET 3.5 are to accommodate LINQ and most of them are &lt;a href="http://angelicnas/blog/blog/post/New-C-and-VBNET-compiler-feature---Extension-methods.aspx" target="_blank"&gt;terrible or just not necessary&lt;/a&gt;. &lt;a href="http://weblogs.asp.net/okloeten/archive/2007/04/14/2239689.aspx" target="_blank"&gt;I&amp;rsquo;m not the only one who thinks so either.&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
So if I don&amp;rsquo;t like something I should just not use it and shut up right? I would if I could. Unfortunately I develop enterprise level applications for a living. This, more often than not nowadays, means large development teams and use of outsourcing. I have to make a system that is developed by 30 different developers of a different background and competence level, consistent and supportable with readable source-code. With extension methods that can take over class functionality from anywhere and type inference combined with lambda expressions that allow you to write hundreds of lines of completely unreadable and un-maintainable code, my professional life has just turned into hell.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Update&lt;/strong&gt;: &lt;a href="http://blogs.microsoft.co.il/blogs/tamir/archive/2007/11/18/how-to-make-your-code-completely-unreadable-with-net-3-5.aspx" target="_blank"&gt;This is an exhaggeration of course&lt;/a&gt; to prove a point, but still ... 
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx&amp;amp;title=TechEd Wisdom – Still not convinced about LINQ" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx&amp;amp;title=TechEd Wisdom – Still not convinced about LINQ" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx&amp;amp;title=TechEd Wisdom – Still not convinced about LINQ" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=d509ed6b-e26b-4b0e-b966-4dcaf4ede947</guid>
      <pubDate>Fri, 16 Nov 2007 08:02:00 +0100</pubDate>
      <category>LINQ</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=d509ed6b-e26b-4b0e-b966-4dcaf4ede947</pingback:target>
      <slash:comments>5</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=d509ed6b-e26b-4b0e-b966-4dcaf4ede947</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/TechEd-Wisdom-e28093-Still-not-convinced-about-LINQ.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=d509ed6b-e26b-4b0e-b966-4dcaf4ede947</wfw:commentRss>
    </item>
    <item>
      <title>TechEd Wisdom -  ASP.NET MVC Framework</title>
      <description>&lt;p&gt;
I was going to write something up for the ASP.NET MVC Framework today, but thankfully I checked my feeds before I did that. Turns out that &lt;a href="http://weblogs.asp.net/scottgu/default.aspx" target="_blank" title="Scott Guthrie"&gt;Scott Guthrie&lt;/a&gt; has &lt;a href="http://weblogs.asp.net/scottgu/archive/2007/11/13/asp-net-mvc-framework-part-1.aspx" target="_blank" title=" ASP.NET MVC Framework (Part 1)"&gt;already done this&lt;/a&gt; and did it much better than I would have done it. Its a massive post, but very detailed and should give you a good feel what the framework is about.
&lt;/p&gt;
&lt;p&gt;
Just some key points to summarise in case you can&amp;#39;t be bothered or don&amp;#39;t have time to read the whole post
&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;New model for building web sites&lt;/li&gt;
	&lt;li&gt;No post back (that&amp;#39;s right ... no forms, no nothing)&lt;/li&gt;
	&lt;li&gt;Simple HTML outputed; the rendering engine doesn&amp;#39;t really need to be ASP.NET for the framework to work&lt;/li&gt;
	&lt;li&gt;No need for complex server side controls such as GridView (because there is no post back)&amp;nbsp;&lt;/li&gt;
	&lt;li&gt;Very modular, almost everything can be extended/replaced&lt;/li&gt;
	&lt;li&gt;Could use AJAX with it, but not much point&lt;/li&gt;
	&lt;li&gt;Everything is driven off the URL which dictates what action will be performed by the &amp;quot;Controller&amp;quot;&lt;/li&gt;
	&lt;li&gt;With the logic being encapulated in the &amp;quot;Controller&amp;quot; testing can reach ~100% code coverage simply with unit tests without using web test automation applications&lt;/li&gt;
&lt;/ul&gt;
It looks like an interesting idea, but I am not sure how &amp;quot;commercial&amp;quot; it is. I am also not certain how well it scales as it does not allow you to take advantage of the ASP.NET asynchronous programming models (will write about them soon)
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx&amp;amp;title=TechEd Wisdom -  ASP.NET MVC Framework" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx&amp;amp;title=TechEd Wisdom -  ASP.NET MVC Framework" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx&amp;amp;title=TechEd Wisdom -  ASP.NET MVC Framework" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=0a83600c-9f23-4d7c-83ba-e80c5d7fdcfd</guid>
      <pubDate>Wed, 14 Nov 2007 13:11:00 +0100</pubDate>
      <category>ASP.NET</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=0a83600c-9f23-4d7c-83ba-e80c5d7fdcfd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=0a83600c-9f23-4d7c-83ba-e80c5d7fdcfd</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/TechEd-Wisdom----ASPNET-MVC-Framework.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=0a83600c-9f23-4d7c-83ba-e80c5d7fdcfd</wfw:commentRss>
    </item>
    <item>
      <title>TechEd Wisdom - Common Table Expressions</title>
      <description>&lt;p class="MsoNormal" align="justify"&gt;
This is the first of a series of posts on the stuff I learnt
at TechEd. Some of it is brand spanking new and some of it, like this one, may
not be so new but definitely overlooked (at least by myself anyway).
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
Common Expression Tables were introduced in SQL Server 2005,
so this is not a SQL Server 2008 feature. They may seem a bit pointless at
first, but they are in fact awesome.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
So a simple example would be
&lt;/p&gt;
&lt;div style="border: 1px solid black; padding: 5px"&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WITH&lt;/span&gt; SimpleCTE (ProductName, Price) &lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;span class="str"&gt;&amp;#39;Chair&amp;#39;&lt;/span&gt;, 5.5&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; SimpleCTE&lt;/span&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="background-color: #f0f0f0"&gt;
&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: black; background-color: #f0f0f0"&gt;
ProductName Price&lt;br /&gt;
----------- -------&lt;br /&gt;
Chair&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.5 &lt;br /&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
We define a CTE using the keyword &lt;em&gt;WITH&lt;/em&gt; called &lt;em&gt;SimpleCTE&lt;/em&gt;. It
has two columns, &lt;em&gt;ProductName&lt;/em&gt; and &lt;em&gt;Price&lt;/em&gt;. Notice that it is not necessary
to specify the type of the columns. &lt;span&gt;&amp;nbsp;&lt;/span&gt;The
data for the CTE is a very simple &lt;em&gt;SELECT&lt;/em&gt;
statement of two values. The most important part is actually the line that
follows the definition of the CTE, the statement that selects all the rows of
the CTE. The reason it is so important is because it highlights the nature of
CTEs, which is that they are completely dependant on the statement that follows
them. What do I mean about that? Highlight all of the above code and execute as
part of a query. Everything works are normal. Now highlight only the definition
of the CTE omitting the last SELECT statement and execute again. &lt;span&gt;&amp;nbsp;&lt;/span&gt;You get an incorrect syntax error. That&amp;rsquo;s
because CTE cannot exist on their own, they can only exist as part of another
SQL statement.
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
Right, so you can have pretty much anything you like inside
your CTE; for example
&lt;/p&gt;
&lt;div style="border: 1px solid black; padding: 5px"&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WITH&lt;/span&gt; SimpleCTE(ID, [Name], Parent)  &lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; Category&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; SimpleCTE&lt;/span&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="background-color: #f0f0f0"&gt;
&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: black"&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Parent&lt;br /&gt;
-------------------- ------------------------- -------&lt;br /&gt;
1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Software&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL&lt;br /&gt;
2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hardware&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; NULL&lt;br /&gt;
3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Business&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Children Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Strategy Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Small Business&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;br /&gt;
12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enterprise&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5&lt;br /&gt;
13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ATX Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;br /&gt;
14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mini ITX Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 6&lt;br /&gt;
15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Intel CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&lt;br /&gt;
16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AMD CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="border: 1px solid black; padding: 5px"&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WITH&lt;/span&gt; SimpleCTE(ID, [Name], Parent)  &lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; * &lt;span class="kwrd"&gt;FROM&lt;/span&gt; Category &lt;span class="kwrd"&gt;WHERE&lt;/span&gt; Parent &lt;span class="kwrd"&gt;IS&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; ID, Name &lt;span class="kwrd"&gt;FROM&lt;/span&gt; SimpleCTE&lt;/span&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="background-color: #f0f0f0"&gt;
&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: black"&gt;ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&lt;br /&gt;
-------------------- -------------------------&lt;br /&gt;
1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Software&lt;br /&gt;
2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hardware&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="border: 1px solid black; padding: 5px"&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WITH&lt;/span&gt; SimpleCTE(ID, [Name], Children)  &lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Name,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;(&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;COUNT&lt;/span&gt;(*) &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category ChildCategory&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ChildCategory.Parent = Category.ID&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;) &lt;span class="kwrd"&gt;AS&lt;/span&gt; Children &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; ID, [Name], Children &lt;span class="kwrd"&gt;FROM&lt;/span&gt; SimpleCTE&lt;/span&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="background-color: #f0f0f0"&gt;
&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: black"&gt;
ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Children&lt;br /&gt;
-------------------- ------------------------- -----------&lt;br /&gt;
1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Software&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hardware&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Business&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Children Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Strategy Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Small Business&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enterprise&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ATX Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mini ITX Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Intel CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&lt;br /&gt;
16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AMD CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
In a sense, CTE are very much like views created on the fly.
The SQL statement that follows it is based on the data provided by the CTE.
Things get interesting when you want to perform recursion
&lt;/p&gt;
&lt;div style="border: 1px solid black; padding: 5px"&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WITH&lt;/span&gt; SimpleCTE(ID, [Name], HierarchyDepth)  &lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Name],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 &lt;span class="kwrd"&gt;AS&lt;/span&gt; HierarchyDepth&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Parent &lt;span class="kwrd"&gt;IS&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;UNION&lt;/span&gt; &lt;span class="kwrd"&gt;ALL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.ID,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.[Name],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SimpleCTE.HierarchyDepth + 1 &lt;span class="kwrd"&gt;AS&lt;/span&gt; HierarchyDepth&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category  &lt;span class="kwrd"&gt;AS&lt;/span&gt; c&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;INNER&lt;/span&gt; &lt;span class="kwrd"&gt;JOIN&lt;/span&gt; SimpleCTE &lt;span class="kwrd"&gt;ON&lt;/span&gt; c.Parent = SimpleCTE.ID&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp; ID, &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp; [Name], &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp; HierarchyDepth &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp; SimpleCTE &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp; HierarchyDepth&lt;/span&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="background-color: #f0f0f0"&gt;
&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: black"&gt;
ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HierarchyDepth&lt;br /&gt;
-------------------- ------------------------- --------------&lt;br /&gt;
1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Software&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hardware&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Business&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Small Business&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
12&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Enterprise&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Children Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Strategy Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Intel CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; AMD CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ATX Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;br /&gt;
14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mini ITX Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&lt;/span&gt; 
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
CTEs are able to join on themselves within their definition,
which enables recursion. No need for cursors ever again :)
&lt;/p&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;div align="justify"&gt;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
Now for what I think is the coolest thing about CTEs. At
the beginning of the post I went through the effort of highlighting their dependence
on the subsequent SQL statement so that I could demonstrate this
&lt;/p&gt;
&lt;div style="border: 1px solid black; padding: 5px"&gt;
&lt;div class="csharpcode"&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WITH&lt;/span&gt; SimpleCTE(ID, [Name], HierarchyDepth)  &lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;(&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Name],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1 &lt;span class="kwrd"&gt;AS&lt;/span&gt; HierarchyDepth&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Parent &lt;span class="kwrd"&gt;IS&lt;/span&gt; &lt;span class="kwrd"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;
&lt;span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;UNION&lt;/span&gt; &lt;span class="kwrd"&gt;ALL&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&amp;nbsp;
&lt;span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.ID,&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.[Name],&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SimpleCTE.HierarchyDepth + 1 &lt;span class="kwrd"&gt;AS&lt;/span&gt; HierarchyDepth&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Category  &lt;span class="kwrd"&gt;AS&lt;/span&gt; c&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="kwrd"&gt;INNER&lt;/span&gt; &lt;span class="kwrd"&gt;JOIN&lt;/span&gt; SimpleCTE &lt;span class="kwrd"&gt;ON&lt;/span&gt; c.Parent = SimpleCTE.ID&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;)&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ID, &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Name], &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HierarchyDepth &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;FROM&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SimpleCTE &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;WHERE&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HierarchyDepth &amp;lt; 3&lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&lt;span class="kwrd"&gt;ORDER&lt;/span&gt; &lt;span class="kwrd"&gt;BY&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;
&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;HierarchyDepth&lt;/span&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;div style="background-color: #f0f0f0"&gt;
&lt;span style="font-size: 10pt; line-height: 115%; font-family: 'Courier New'; color: black"&gt;
ID&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Name&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HierarchyDepth&lt;br /&gt;
-------------------- ------------------------- --------------&lt;br /&gt;
1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Software&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Hardware&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&lt;br /&gt;
6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Motherboards&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CPUs&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
3&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Games&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&lt;br /&gt;
5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Business&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 &lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="csharpcode"&gt;
&amp;nbsp;
&lt;/div&gt;
&lt;p class="MsoNormal" align="justify"&gt;
By specifying a &lt;em&gt;WHERE&lt;/em&gt;
clause the results only show the categories that are up to second in the
hierarchy. What actually happened under the covers is that the recursion &lt;strong&gt;stopped&lt;/strong&gt; at that level rather than
completing the recursion and then filtering the results using the &lt;em&gt;WHERE&lt;/em&gt; condition. I love this because it&amp;rsquo;s
what sets it apart from using nested select statements and temporary tables to
achieve the same result. Imagine having a hierarchy 1,000 levels deep, but you are only interested in the first 10 levels ... 
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx&amp;amp;title=TechEd Wisdom - Common Table Expressions" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx&amp;amp;title=TechEd Wisdom - Common Table Expressions" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx&amp;amp;title=TechEd Wisdom - Common Table Expressions" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=47bf00c6-192f-4510-8840-3bc30e4892e6</guid>
      <pubDate>Wed, 14 Nov 2007 05:56:00 +0100</pubDate>
      <category>SQL</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=47bf00c6-192f-4510-8840-3bc30e4892e6</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=47bf00c6-192f-4510-8840-3bc30e4892e6</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/TechEd-Wisdom---Common-Table-Expressions.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=47bf00c6-192f-4510-8840-3bc30e4892e6</wfw:commentRss>
    </item>
    <item>
      <title>Back from TechEd Barcelona 2007 </title>
      <description>It was a fun week, despite hating myself for eating so much. Thankfully I missed the &amp;quot;free ice cream&amp;quot; session break and I can still fit into some of my clothes.&lt;br /&gt;
&lt;br /&gt;
There were more than enough sessions to choose from and I often found myself not knowing which one to go to first. I decided that I didn&amp;#39;t want to attend any &amp;quot;overview&amp;quot; sessions, the kind that just gave a high level view of some feature or technology. I can get that kind of information on MSDN or some code example, I don&amp;#39;t need to fly to Barcelona and have some expert present to me a &amp;quot;Hello world&amp;quot; application. With this in mind I went to sessions on the following techonologies&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
	&lt;li&gt;Silverlight (advanced topics; one of the sessions was a big mistake though)&lt;/li&gt;
	&lt;li&gt;ASP.NET (performance &amp;amp; scalability, hidden gems, asyncronous processing, MVC Framework)&lt;/li&gt;
	&lt;li&gt;SQL Server Reporting Services (parameters can be used for more than just filtering results)&lt;/li&gt;
	&lt;li&gt;Security (concepts and principles; wish it went a bit more in depth)&lt;/li&gt;
	&lt;li&gt;SQL Server 2005 (putting new features in great use, peformance &amp;amp; scalability)&lt;/li&gt;
	&lt;li&gt;F# (asyncronous programming)&lt;/li&gt;
	&lt;li&gt;Astoria (exception to the rule of not going to high level sessions)&lt;/li&gt;
	&lt;li&gt;Visual Studio 2008 &amp;amp; .NET Framework 3.5 (cleared the confusion between v2.0, v3.0, v3.5 and multi-targeting)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
In addition to all the sessions and the standard keynote at the beginning of the event, there was a very interesting talk by Pat Helland titled &amp;quot;Movable Objects and Irresistable Forces&amp;quot;. It was about how he sees the future of computing in terms of hardware becoming cheaper and more un-reliable (irresistable forces) and how he believes software will have to adapt to cater for this (movable objects).&lt;br /&gt;
&lt;br /&gt;
I&amp;#39;m going to follow this up by a series of posts in each of the topics I think are interesting. In the meantime I&amp;#39;ll just finish off by saying that I&amp;#39;m still not convinced by LINQ and I&amp;#39;m not the only one either!
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx&amp;amp;title=Back from TechEd Barcelona 2007 " target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx&amp;amp;title=Back from TechEd Barcelona 2007 " target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx&amp;amp;title=Back from TechEd Barcelona 2007 " target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=71bffb68-3cb5-40d6-bd52-95ca2cbfcf47</guid>
      <pubDate>Mon, 12 Nov 2007 14:51:00 +0100</pubDate>
      <category>General</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=71bffb68-3cb5-40d6-bd52-95ca2cbfcf47</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=71bffb68-3cb5-40d6-bd52-95ca2cbfcf47</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/Back-from-TechEd-Barcelona-2007-.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=71bffb68-3cb5-40d6-bd52-95ca2cbfcf47</wfw:commentRss>
    </item>
    <item>
      <title>Everyone is so excited about the .Net 3.5 source code being released ..</title>
      <description>&lt;p&gt;
... everyone apart from &lt;a href="http://weblogs.asp.net/fbouma/default.aspx" target="_blank" title="Frans Bouma"&gt;Frans Bouma&lt;/a&gt; and I think &lt;a href="http://weblogs.asp.net/fbouma/archive/2007/10/04/don-t-look-at-the-sourcecode-of-net-licensed-under-the-reference-license.aspx" target="_blank" title="Don't look at the sourcecode of .NET licensed under the 'Reference license'"&gt;he may be right&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
His point is this. You are not allowed to modify the code, you are not allowed to re-distribute the code and if you, even without realizing, borrow any ideas from it you could be breaking patents. Why risk it? What real benefit do you get by looking at the source code if you can&amp;#39;t at least learn something from it?
&lt;/p&gt;
&lt;p&gt;
I have to agree with him. The only reason I would look at the code would be to see how something tricky or cool was done. I would want to learn from it and use it, in some form, in my code. This is a recipe for disaster and I could be making the company I work for liable for a lawsuit.&amp;nbsp;
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx&amp;amp;title=Everyone is so excited about the .Net 3.5 source code being released .." target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx&amp;amp;title=Everyone is so excited about the .Net 3.5 source code being released .." target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx&amp;amp;title=Everyone is so excited about the .Net 3.5 source code being released .." target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=c302a486-713b-44a7-9d07-64edff8e5abd</guid>
      <pubDate>Fri, 05 Oct 2007 09:47:00 +0100</pubDate>
      <category>General</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=c302a486-713b-44a7-9d07-64edff8e5abd</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=c302a486-713b-44a7-9d07-64edff8e5abd</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/Everyone-is-so-excited-about-the-Net-35-source-code-being-released-.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=c302a486-713b-44a7-9d07-64edff8e5abd</wfw:commentRss>
    </item>
    <item>
      <title>Error: 40 - Could not open a connection to SQL Server</title>
      <description>&lt;p&gt;
When you fire up your application and you receive this message, you follow some standard steps and try to find the answer to the following questions 
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;ol&gt;
	&lt;li&gt;Is my SQL Server up and running?&lt;/li&gt;
	&lt;li&gt;Can I connect to the box SQL Server is hosted?&lt;/li&gt;
	&lt;li&gt;Is my connection string correct?&lt;/li&gt;
	&lt;li&gt;Am I using the correct IP address and instance name?&lt;/li&gt;
	&lt;li&gt;Is SQL Server accepting the type of connection I want (Named Pipes, TCP/IP, etc)?&lt;/li&gt;
	&lt;li&gt;Is my firewall blocking either the outgoing connection request or the inbound one?&lt;/li&gt;
	&lt;li&gt;Is my router not forwarding the connection request to the correct machine and port?&lt;br /&gt;
	&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;p&gt;
Somewhere between #1 and #7 you will find yourself answering &amp;quot;no&amp;quot;, fixing the problem so the answer becomes &amp;quot;yes&amp;quot; and the annoying error message &amp;quot;Error: 40 - Could not open a connection to SQL Server&amp;quot; goes away. 
&lt;/p&gt;
&lt;p&gt;
So, what happens when you have answered &amp;quot;yes&amp;quot; to all the questions and the stupid message is still there? In my case it was because I answered &amp;quot;yes&amp;quot; to question #5 without it being true. You see, I assumed that if the SQL Server Configuration Manager says that TCP/UP is enabled (see screenshot below) then my SQL Server is ready to accept TCP/IP connections.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://angelicnas/blog/image.axd?picture=sql+server+configuration+manager.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
Silly me! When the machine has more than one interface (i.e. IP address that SQL Server can listen to for incoming connections), each one has to be enabled separately.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://angelicnas/blog/image.axd?picture=ip+addresses.jpg" alt="" /&gt;
&lt;/p&gt;
&lt;p&gt;
You will need to enable at least one IP address before SQL Server starts accepts TCP/IP connections. Make sure you enable the one you are trying to connect through :)
&lt;/p&gt;
&lt;div class="socialBookmarksContainer"&gt;&lt;a rel="nofollow" href="http://digg.com/submit/?url=http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx" target="_blank" title="Digg It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/digg_24.png" style="border: 0;" alt="Digg It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.dzone.com/links/add.html?url=http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx&amp;amp;title=Error: 40 - Could not open a connection to SQL Server" target="_blank" title="DZone It!"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/dzone_24.png" style="border: 0;" alt="DZone It!" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.stumbleupon.com/submit?url=http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx" target="_blank" title="StumbleUpon"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/stumbleupon_24.png" style="border: 0;" alt="StumbleUpon" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://technorati.com/ping?url=http://angelicnas/blog/" target="_blank" title="Technorati"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/technorati_24.png" style="border: 0;" alt="Technorati" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://reddit.com/submit?url=http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx&amp;amp;title=Error: 40 - Could not open a connection to SQL Server" target="_blank" title="Reddit"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/reddit_24.png" style="border: 0;" alt="Reddit" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://del.icio.us/post?url=http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx&amp;amp;title=Error: 40 - Could not open a connection to SQL Server" target="_blank" title="Del.icio.us"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/delicious_24.png" style="border: 0;" alt="Del.icio.us" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://www.newsvine.com/_wine/save?u=http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx" target="_blank"title="NewsVine"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/newsvine_24.png" style="border: 0;" alt="NewsVine" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://furl.net" target="_blank" title="Furl"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/furl_24.png" style="border: 0;" alt="Furl" /&gt;&lt;/a&gt;&lt;a rel="nofollow" href="http://blinklist.com/submit/" target="_blank" title="BlinkList"&gt;&lt;img src="/blog/themes/indigo/images//socialbookmarks/square/blinklist_24.png" style="border: 0;" alt="BlinkList" /&gt;&lt;/a&gt;&lt;/div&gt;</description>
      <link>http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx</link>
      <author>angelosp</author>
      <comments>http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx#comment</comments>
      <guid>http://angelicnas/blog/post.aspx?id=4314b8ee-0a3e-4f87-9824-d0fb1cf757c5</guid>
      <pubDate>Thu, 27 Sep 2007 15:12:00 +0100</pubDate>
      <category>SQL</category>
      <dc:publisher>angelosp</dc:publisher>
      <pingback:server>http://angelicnas/blog/pingback.axd</pingback:server>
      <pingback:target>http://angelicnas/blog/post.aspx?id=4314b8ee-0a3e-4f87-9824-d0fb1cf757c5</pingback:target>
      <slash:comments>0</slash:comments>
      <trackback:ping>http://angelicnas/blog/trackback.axd?id=4314b8ee-0a3e-4f87-9824-d0fb1cf757c5</trackback:ping>
      <wfw:comment>http://angelicnas/blog/post/Error-40---Could-not-open-a-connection-to-SQL-Server.aspx#comment</wfw:comment>
      <wfw:commentRss>http://angelicnas/blog/syndication.axd?post=4314b8ee-0a3e-4f87-9824-d0fb1cf757c5</wfw:commentRss>
    </item>
  </channel>
</rss>