<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Home of the Data Dude : tsbt-db</title><link>http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx</link><description>Tags: tsbt-db</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>DefaultDataPath</title><link>http://blogs.msdn.com/gertd/archive/2009/11/30/defaultdatapath.aspx</link><pubDate>Tue, 01 Dec 2009 01:48:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9930502</guid><dc:creator>gertd</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9930502.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9930502</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9930502</wfw:comment><description>VSDB uses the the ($DefaultDataPath) SQLCMD variable to represent the location where you would place your data and log file of your database. The deployment engine sets the value of SQLCMD variable by querying SQL Server using the following query: 1:...(&lt;a href="http://blogs.msdn.com/gertd/archive/2009/11/30/defaultdatapath.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9930502" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB/default.aspx">VSDB</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category><category domain="http://blogs.msdn.com/gertd/archive/tags/DBProj.com/default.aspx">DBProj.com</category></item><item><title>DBSchema file for SQL LiteSpeed XP’s</title><link>http://blogs.msdn.com/gertd/archive/2009/06/10/dbschema-file-for-sql-litespeed-xp-s.aspx</link><pubDate>Thu, 11 Jun 2009 03:10:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9725404</guid><dc:creator>gertd</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9725404.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9725404</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9725404</wfw:comment><description>Based on a customer request I created a .dbschema file which contains the definitions of all the extended stored procedures used by SQL LiteSpeed 5.0 that live inside the master database. Since schema import does not import the definition of extended...(&lt;a href="http://blogs.msdn.com/gertd/archive/2009/06/10/dbschema-file-for-sql-litespeed-xp-s.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9725404" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB/default.aspx">VSDB</category><category domain="http://blogs.msdn.com/gertd/archive/tags/DatabaseReferences/default.aspx">DatabaseReferences</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category><category domain="http://blogs.msdn.com/gertd/archive/tags/DBProj.com/default.aspx">DBProj.com</category><category domain="http://blogs.msdn.com/gertd/archive/tags/DBSchema/default.aspx">DBSchema</category></item><item><title>Declarative Database Development</title><link>http://blogs.msdn.com/gertd/archive/2009/06/05/declarative-database-development.aspx</link><pubDate>Sat, 06 Jun 2009 01:58:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9702216</guid><dc:creator>gertd</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9702216.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9702216</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9702216</wfw:comment><description>Define What You Want, Not How You Get There! &amp;#160; If Not Exists… Database development is many aspects behind in comparison to regular application development. If you look how database development is integrated with regular application development or...(&lt;a href="http://blogs.msdn.com/gertd/archive/2009/06/05/declarative-database-development.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9702216" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB/default.aspx">VSDB</category><category domain="http://blogs.msdn.com/gertd/archive/tags/Declarative+Database+Development/default.aspx">Declarative Database Development</category><category domain="http://blogs.msdn.com/gertd/archive/tags/DBProj.com/default.aspx">DBProj.com</category></item><item><title>RTM of VSDB 2008 GDR R2</title><link>http://blogs.msdn.com/gertd/archive/2009/04/22/rtm-of-vsdb-2008-gdr-r2.aspx</link><pubDate>Wed, 22 Apr 2009 18:32:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9562506</guid><dc:creator>gertd</dc:creator><slash:comments>10</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9562506.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9562506</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9562506</wfw:comment><description>The QFE rollup release for the Visual Studio Team System 2008 Database Edition GDR release is now available. You can download the SETUP.EXE from the regular location. ( http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed...(&lt;a href="http://blogs.msdn.com/gertd/archive/2009/04/22/rtm-of-vsdb-2008-gdr-r2.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9562506" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB/default.aspx">VSDB</category><category domain="http://blogs.msdn.com/gertd/archive/tags/QFE/default.aspx">QFE</category></item><item><title>FIX: Blank Unit Test Designer Problem</title><link>http://blogs.msdn.com/gertd/archive/2009/03/11/fix-blank-unit-test-designer-problem.aspx</link><pubDate>Wed, 11 Mar 2009 23:21:10 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9470949</guid><dc:creator>gertd</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9470949.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9470949</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9470949</wfw:comment><description>If you are running in to the following problem when creating unit tests when using database projects, there now is a fix! Consider the following scenario, you have you database project (.dbproj) open and requesting the creation of a Database Unit Test...(&lt;a href="http://blogs.msdn.com/gertd/archive/2009/03/11/fix-blank-unit-test-designer-problem.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9470949" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/DBUnitTesting/default.aspx">DBUnitTesting</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>VSTSDB Blog Site</title><link>http://blogs.msdn.com/gertd/archive/2009/02/23/vstsdb-blog-site.aspx</link><pubDate>Tue, 24 Feb 2009 08:36:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9442216</guid><dc:creator>gertd</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9442216.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9442216</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9442216</wfw:comment><description>&lt;p&gt;The Visual Studio Team System Database Edition team has created a new blog site to keep you informed and update about the latest developments.&lt;/p&gt;  &lt;p&gt;Please check out: &lt;a href="http://blogs.msdn.com/vstsdb"&gt;http://blogs.msdn.com/vstsdb&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Thanks,   &lt;br /&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9442216" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>DBProj.com</title><link>http://blogs.msdn.com/gertd/archive/2009/02/19/dbproj-com.aspx</link><pubDate>Fri, 20 Feb 2009 05:37:36 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9435332</guid><dc:creator>gertd</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9435332.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9435332</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9435332</wfw:comment><description>&lt;p&gt;Some of you already know or noticed through sites like &lt;a href="http://www.linkedin.com/" target="_blank"&gt;LinkedIn&lt;/a&gt; or &lt;a href="http://www.facebook.com/" target="_blank"&gt;Facebook&lt;/a&gt; that per the beginning of this month I started in a new role inside Microsoft. I moved in to an Software Architect role, working on the new Directory Services stack. Hence I needed a new place to publish my DataDude contributions to the community, this new place is &lt;a href="http://www.dbproj.com" target="_blank"&gt;DBProj.com&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The goal of the site is very simple, provide as much as possible information about the “Visual Studio Team System 2008 Database Edition GDR” product. Yes, you are reading it correctly, the site will solely focus on the “GDR” release. When a next release will become available that builds on top of the GDR architecture, Visual Studio 2010, I will expand the scope to include that as well. Since it is no longer my primary job, I need to focus on something, I hope you understand.&lt;/p&gt;  &lt;p&gt;Anyhow, from now on I will publish on the &lt;a href="http://dbproj.com/" target="_blank"&gt;DBProj.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This is the end of a great 3-year journey, but that journey would not have been possible without the support of a great team of testers, program managers and developers.&lt;/p&gt;  &lt;p&gt;Thank you all! This site is a contribution to your work and dedication!&lt;/p&gt;  &lt;p&gt;Thanks,    &lt;br /&gt;-GertD forever a “DataDude”&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9435332" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB/default.aspx">VSDB</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSTS-DB/default.aspx">VSTS-DB</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category><category domain="http://blogs.msdn.com/gertd/archive/tags/DBProj.com/default.aspx">DBProj.com</category></item><item><title>Data Generator for SQL Server Sparse Columns</title><link>http://blogs.msdn.com/gertd/archive/2009/02/06/data-generator-for-sql-server-sparse-columns.aspx</link><pubDate>Fri, 06 Feb 2009 20:41:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9402603</guid><dc:creator>gertd</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9402603.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9402603</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9402603</wfw:comment><description>&lt;p&gt;Genevieve, tester on the “DataDude” team, has created a new Data Generator which allows you to populate a random set of sparse columns through the use of an XML column set column. She posted it on the VS Code Gallery, &lt;a title="http://code.msdn.microsoft.com/columnsetgenerator" href="http://code.msdn.microsoft.com/columnsetgenerator"&gt;http://code.msdn.microsoft.com/columnsetgenerator&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;-GertD&lt;/p&gt;  &lt;p&gt;PS: Dank je wel Genevieve!&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9402603" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>Final Language Release of the GDR</title><link>http://blogs.msdn.com/gertd/archive/2009/01/20/final-language-release-of-the-gdr.aspx</link><pubDate>Wed, 21 Jan 2009 01:47:38 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9351938</guid><dc:creator>gertd</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9351938.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9351938</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9351938</wfw:comment><description>&lt;p&gt;Today we released the last language, Russian, of the planned localized versions of Visual Studio Team System 2008 Database Edition GDR. This brings the total count to 10 (including English). You can download the Russian edition of the GDR from the following location:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/Readme.mht"&gt;http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/setup.exe"&gt;http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can select the language of your choice from the general GDR download page:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;a title="http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;amp;displaylang=en" href="http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&amp;amp;displaylang=en&lt;/a&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For completeness I included the complete list with the download locations:&lt;/p&gt;  &lt;p&gt;Chinese (Simplified) &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/Readme.mht"&gt;http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/setup.exe"&gt;http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Chinese (Traditional, Taiwan)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/Readme.mht"&gt;http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/setup.exe"&gt;http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;English&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/0/a/e/0ae1153a-8798-474a-93e6-d19299f37c8b/Readme.mht"&gt;http://download.microsoft.com/download/0/a/e/0ae1153a-8798-474a-93e6-d19299f37c8b/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/0/a/e/0ae1153a-8798-474a-93e6-d19299f37c8b/setup.exe"&gt;http://download.microsoft.com/download/0/a/e/0ae1153a-8798-474a-93e6-d19299f37c8b/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;French (fr-FR) &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/Readme.mht"&gt;http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/setup.exe"&gt;http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;German&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/Readme.mht"&gt;http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/setup.exe"&gt;http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Spanish&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/Readme.mht"&gt;http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/setup.exe"&gt;http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Italian&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/Readme.mht"&gt;http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/setup.exe"&gt;http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Japanese &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/Readme.mht"&gt;http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/setup.exe"&gt;http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Korean&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/Readme.mht"&gt;http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/setup.exe"&gt;http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Russian:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/Readme.mht"&gt;http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/Readme.mht&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/setup.exe"&gt;http://download.microsoft.com/download/A/2/C/A2C861C5-93F6-400A-9FE6-256D3161005C/setup.exe&lt;/a&gt;&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/setup.exe"&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9351938" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>File Level Build Warning Suppression in the GDR</title><link>http://blogs.msdn.com/gertd/archive/2009/01/11/file-level-build-warning-suppression-in-the-gdr.aspx</link><pubDate>Sun, 11 Jan 2009 23:28:40 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9306285</guid><dc:creator>gertd</dc:creator><slash:comments>6</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9306285.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9306285</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9306285</wfw:comment><description>&lt;p&gt;One of the small, but hard to discover new features in the GDR release is the ability to suppress warnings at the file level. Just to be very clear, this is suppression of build level warnings, not of static code analysis or deployment warnings!&lt;/p&gt;  &lt;p&gt;Imagine you have a procedure that references a temp table that is created either dynamically or in some other procedure.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[Procedure1]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; c1 &lt;span class="kwrd"&gt;FROM&lt;/span&gt; #t1&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The system will raise a warning &amp;quot;TSD04151: Procedure: [dbo].[Procedure1] has an unresolved reference to object [#t1].&amp;quot;
  &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/FilelevelwarningsuppressionintheGDR_A879/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/FilelevelwarningsuppressionintheGDR_A879/image_thumb_1.png" width="897" height="238" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You could always suppress build warnings at the project level using the &amp;quot;Suppress Warnings&amp;quot; option on the Build tab.
  &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/FilelevelwarningsuppressionintheGDR_A879/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/FilelevelwarningsuppressionintheGDR_A879/image_thumb.png" width="892" height="356" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In the GDR you can also suppress warnings at the file level, using the Properties window. You have to select the file which contributes the warning in Solution Explorer. If the Properties window is not visible you can hit F4 or right click on the file name and select Properties. This will bring up the Properties window. This contains a file level option for suppressing build warnings. By providing the warning number, 4151, without the TSD prefix you suppress the &amp;quot;TSD04151: Procedure: [dbo].[Procedure1] has an unresolved reference to object [#t1].&amp;quot; for the procedure inside the file.
  &lt;br /&gt;

  &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/FilelevelwarningsuppressionintheGDR_A879/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/FilelevelwarningsuppressionintheGDR_A879/image_thumb_3.png" width="271" height="437" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;This little enhancement hopefully provides you with a more fine grain weapon against pesky warnings that otherwise would not go away.
  &lt;br /&gt;

  &lt;br /&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9306285" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>Two more languages released</title><link>http://blogs.msdn.com/gertd/archive/2009/01/09/two-more-languages-released.aspx</link><pubDate>Sat, 10 Jan 2009 01:57:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9302885</guid><dc:creator>gertd</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9302885.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9302885</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9302885</wfw:comment><description>&lt;p&gt;Yesterday we released two more languages of the Visual Studio 2008 Team System Database Edition GDR release, Simplified Chinese and French in addition to the &lt;a href="http://blogs.msdn.com/gertd/archive/2008/12/19/gdr-language-releases.aspx" target="_blank"&gt;six languages&lt;/a&gt; we released on December 19th 2008.&lt;/p&gt;  &lt;p&gt;Chinese (Simplified) (zh-CN)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/Readme.mht"&gt;http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/Readme.mht&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/setup.exe"&gt;http://download.microsoft.com/download/2/2/2/2223ECF9-7485-4A0B-8928-C881C876D261/setup.exe&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;French (fr-FR) &lt;/p&gt;  &lt;p&gt;&lt;a href="http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/Readme.mht"&gt;http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/Readme.mht&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/setup.exe"&gt;http://download.microsoft.com/download/B/4/4/B44806AB-8176-4473-B2CC-887D52CCF895/setup.exe&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9302885" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>Creating T-SQL Static Code Analysis Rules</title><link>http://blogs.msdn.com/gertd/archive/2009/01/01/creating-t-sql-static-code-analysis-rules.aspx</link><pubDate>Fri, 02 Jan 2009 01:41:13 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9264791</guid><dc:creator>gertd</dc:creator><slash:comments>8</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9264791.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9264791</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9264791</wfw:comment><description>&lt;p&gt;One of the new features in the GDR release is that you can create your own T-SQL Static Code Analysis rules. This post will guide you through creating your first rule.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Step 1: Create a new Class Library project&lt;/h1&gt;  &lt;p&gt;Inside Visual Studio 2008 create a new &amp;quot;Class Library&amp;quot; project, you can use VB.NET or C#, however since I am VB.NET literate (sorry no offense) I will use C# for this example.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_2.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb.png" width="506" height="360" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;We will name the project &amp;quot;SqlRule&amp;quot;.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Step 2: Add references&lt;/h1&gt;  &lt;p&gt;The next step is to add the required assembly references to the following assemblies:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Microsoft.Data.Schema      &lt;ul&gt;       &lt;li&gt;%ProgramFiles%\Microsoft Visual Studio 9.0\VSTSDB\Deploy\Microsoft.Data.Schema.dll &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt;    &lt;li&gt;Microsoft.Data.Schema.Sql      &lt;ul&gt;       &lt;li&gt;%ProgramFiles%\Microsoft Visual Studio 9.0\VSTSDB\Deploy\Microsoft.Data.Schema.Sql.dll &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_8.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_3.png" width="378" height="319" /&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_4.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_1.png" width="319" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Microsoft.Data.Schema assembly contains the core infrastructure, while the Microsoft.Data.Schema.Sql&amp;#160; companion contains the SQL Server specific code&lt;/p&gt;  &lt;h1&gt;Step 3: Sign the assembly&lt;/h1&gt;  &lt;p&gt;In order to be able to place the assembly in the GAC, you first need to sign it. In the project properties, go to the Signing tab and create a Strong Name Key file named SqlRule (use a password of your choice).&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_10.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_4.png" width="518" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h1&gt;Step 4: Add Extensions.xml file to project&lt;/h1&gt;  &lt;p&gt;Add a new XML file to the project named: &amp;quot;SqlRule.Extensions.xml&amp;quot;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Step 5: Update Extensions.XML file content&lt;/h1&gt;  &lt;p&gt;In order to register the rule with the system, we need to create an XML file which follows the naming convention of assembly name.extensions.xml and is placed in the VSTSDB\Extensions directory.&lt;/p&gt;  &lt;p&gt;This extensions .XML file contains the following XML:&lt;/p&gt;  &lt;table border="1" cellspacing="0" cellpadding="2" width="932"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="930"&gt;         &lt;p&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;            &lt;br /&gt;&amp;lt;extensions assembly=&amp;quot;&amp;quot; version=&amp;quot;1&amp;quot; xmlns=&amp;quot;urn:Microsoft.VisualStudio.TeamSystem.Data.Extensions&amp;quot; xmlns:xsi=&amp;quot;&lt;a href="http://www.w3.org/2001/XMLSchema-instance" ?="?"&gt;http://www.w3.org/2001/XMLSchema-instance&amp;quot;&lt;/a&gt; xsi:schemaLocation=&amp;quot;urn:Microsoft.VisualStudio.TeamSystem.Data.Extensions Microsoft.Data.Schema.Extensions.xsd&amp;quot;&amp;gt; &lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;extension type=&amp;quot;SqlRule.UpperCasedTableRule&amp;quot;            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; assembly =&amp;quot;SqlRule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=????????????????&amp;quot;             &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; enabled=&amp;quot;true&amp;quot;/&amp;gt; &lt;/p&gt;          &lt;p&gt;&amp;lt;/extensions&amp;gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;Make sure the XML file references the XML schema declared in the %ProgramFiles%\Microsoft Visual Studio 9.0\VSTSDB\Microsoft.Data.Schema.Extensions.xsd. Since the assembly will need to be registered in the GAC it needs to be signed, so make sure to add the correct PublicKeyToken information, which will depend on the key used to sign the assembly.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;Step 6: Add post build events&lt;/h1&gt;  &lt;p&gt;Next step is to add three post build events to make sure that the assembly created is copied to the correct location and that the extension manager will pick it up and load accordingly.&lt;/p&gt;  &lt;p&gt;Add the following post build steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;copy &amp;quot;$(TargetDir)$(TargetName)$(TargetExt)&amp;quot; &amp;quot;$(ProgramFiles)\Microsoft Visual Studio 9.0\VSTSDB\Extensions\$(TargetName)$(TargetExt)&amp;quot; /y &lt;/li&gt;    &lt;li&gt;copy &amp;quot;$(ProjectDir)$(TargetName).Extensions.xml&amp;quot; &amp;quot;$(ProgramFiles)\Microsoft Visual Studio 9.0\VSTSDB\Extensions\$(TargetName).Extensions.xml&amp;quot; /y &lt;/li&gt;    &lt;li&gt;&amp;quot;C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\gacutil.exe&amp;quot; /if &amp;quot;$(ProgramFiles)\Microsoft Visual Studio 9.0\VSTSDB\Extensions\$(TargetName)$(TargetExt)&amp;quot; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Inside the post-build event editor it should look like this:    &lt;br /&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_6.png"&gt;&lt;img style="border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_2.png" width="905" height="226" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Event 1 copies the generated assembly to the VSTSDB\Extensions directory; 2 copies the XML file that makes the extension known to the system and 3 registers the assembly containing the extension in the GAC (Global Assembly Cache).&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;&amp;#160; &lt;/h1&gt;  &lt;h1&gt;Step 7: Implement the Rule class&lt;/h1&gt;  &lt;p&gt;Now that we are all setup, we will add a class to implement the rule. The project already contains a class, named Class1, so we will rename the class to UppercasedTableRule. For consistency sake you might want to rename the file name from Class1.cs to UppercaseTableRule.cs as well. &lt;/p&gt;  &lt;p&gt;In step 7 we change will the class so at the end you have a template class from which you can start a new rules!&lt;/p&gt;  &lt;h2&gt;Step 7A: Add using statements&lt;/h2&gt;  &lt;p&gt;In order to use the be able to access the namespaces more easily add lines 6-13 to you class definition.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; SqlRule&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Extensibility;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel.Abstract;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom.Sql;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SchemaModel.SqlServer;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SqlDsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.StaticCodeAnalysis;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UppercaseTableRule&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; UppercaseTableRule()&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h2&gt;Step 7B: Add provider support&lt;/h2&gt;

&lt;p&gt;The underlying architecture of the GDR has been changed to a provider based model, a feature extension like a T-SQL Static Code Analysis rule can express to the underlying extension manager which providers it supports. For example if you want to create a rule that only applies to SQL Server 2000 you can indicate this by using the following attribute:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;[DatabaseSchemaProviderCompatibility(typeof(Sql80DatabaseSchemaProvider))] &lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you want to indicate that the rule supports all SQL Server versions you can indicate this by using:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;[DatabaseSchemaProviderCompatibility(typeof(SqlDatabaseSchemaProvider))] &lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you do not care you can simply indicate you support any provider by using:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;strong&gt;[DatabaseSchemaProviderCompatibility(typeof(DatabaseSchemaProvider))]&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The reason this works is because existence of the following inheritance relationship between these classes: Sql80DatabaseSchemaProvider (and Sql90DatabaseSchemaProvider and Sql100DatabaseSchemaProvider) inherit from SqlDatabaseSchemaProvider, which itself inherits from DatabaseSchemaProvider which implements the IExtension interface. This way the rule writer has full control in expression which versions are supported and not supported. &lt;/p&gt;

&lt;p&gt;In our sample rule want to work with all SQL Server providers/versions so your code will look like this (see line 15):&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; SqlRule&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Extensibility;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel.Abstract;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom.Sql;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SchemaModel.SqlServer;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SqlDsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.StaticCodeAnalysis;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    [DatabaseSchemaProviderCompatibility(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(SqlDatabaseSchemaProvider))]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UppercaseTableRule : Rule&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; UppercaseTableRule()&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;h2&gt;
  &lt;br /&gt;Step 7C: Inherit from base Rule class and add the constructor&lt;/h2&gt;

&lt;p&gt;Next step is to have your class inherit from the base Microsoft.Data.Schema.StaticCodeAnalysis.Rule class. See line 16.&lt;/p&gt;

&lt;p&gt;The Rules base class implements the Microsoft.Data.Schema.Extensibility.IExtension interface which is used by the extension manager to identify loadable extensions. &lt;/p&gt;

&lt;p&gt;After we inherited our class from the Rule base class, it is time to implement the constructor of our class. Since we inherit from rules we need to call one of the two constructors implemented in the base class as a result.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;// Summary:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="rem"&gt;//     Initializes a new instance of the Microsoft.Data.Schema.StaticCodeAnalysis.Rule&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;//     class.&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&lt;span class="rem"&gt;// Parameters:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="rem"&gt;//   idNamespace:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="rem"&gt;//     Specifies the namespace string of the rule&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="rem"&gt;//   id:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&lt;span class="rem"&gt;//     Specifies a short string to uniquely identify the rule inside a namespace&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&lt;span class="rem"&gt;//   name:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&lt;span class="rem"&gt;//     Specifies a string displayed to the user to identify the rule&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&lt;span class="rem"&gt;//   description:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="rem"&gt;//     Specifies a more-detailed description for the rule&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&lt;span class="rem"&gt;//   helpUrl:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&lt;span class="rem"&gt;//     Specifies the URL of a Web page that contains more information about the&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&lt;span class="rem"&gt;//     rule&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&lt;span class="rem"&gt;//&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;&lt;span class="rem"&gt;//   helpKeyword:&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;&lt;span class="rem"&gt;//     Specifies a help topic for the rule&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; Rule(&lt;span class="kwrd"&gt;string&lt;/span&gt; idNamespace, &lt;span class="kwrd"&gt;string&lt;/span&gt; id, &lt;span class="kwrd"&gt;string&lt;/span&gt; name, &lt;span class="kwrd"&gt;string&lt;/span&gt; description, &lt;span class="kwrd"&gt;string&lt;/span&gt; helpUrl, &lt;span class="kwrd"&gt;string&lt;/span&gt; helpKeyword);&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Lines 18 - 25 show you how to pass on the information to the base class constructor, defining a unique ID within a namespace and providing a name for your rule. Each rule writer must pick their own unique idNamespace to separate out your rules with rules from others and Microsoft, this is your namespace that you should re-use. Within your namespace you must provide a unique id for each rule, to prevent collision inside the namespace.&amp;#160; For this reason the idNamespace and id parts should never be localized and should remain stable cross languages. The description, helpUrl and helpKeyword parts are optional.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; SqlRule&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Extensibility;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel.Abstract;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom.Sql;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SchemaModel.SqlServer;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SqlDsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.StaticCodeAnalysis;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    [DatabaseSchemaProviderCompatibility(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(SqlDatabaseSchemaProvider))]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UppercaseTableRule : Rule&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; UppercaseTableRule()&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            : &lt;span class="kwrd"&gt;base&lt;/span&gt;(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SqlRule&amp;quot;&lt;/span&gt;,                                  &lt;span class="rem"&gt;// idNamespace&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SR0001&amp;quot;&lt;/span&gt;,                                   &lt;span class="rem"&gt;// id&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;Check if all table names are uppercased&amp;quot;&lt;/span&gt;,  &lt;span class="rem"&gt;// name&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,                                         &lt;span class="rem"&gt;// description&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,                                         &lt;span class="rem"&gt;// helpUrl&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)                                         &lt;span class="rem"&gt;// helpKeyword&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;Now we are two steps away from being able to build and debug our rules basic framework. We need to implement two overrides in the base class, the IsSupported and Analyze methods. For now we will implement them by throwing a not implemented exception.&lt;/p&gt;

&lt;p&gt;This is how our class looks after implementing the overrides:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;namespace&lt;/span&gt; SqlRule&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; System.Collections.Generic;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Extensibility;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.SchemaModel.Abstract;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.ScriptDom.Sql;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SchemaModel.SqlServer;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.Sql.SqlDsp;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="kwrd"&gt;using&lt;/span&gt; Microsoft.Data.Schema.StaticCodeAnalysis;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    [DatabaseSchemaProviderCompatibility(&lt;span class="kwrd"&gt;typeof&lt;/span&gt;(SqlDatabaseSchemaProvider))]&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;internal&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; UppercaseTableRule : Rule&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; UppercaseTableRule()&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;            : &lt;span class="kwrd"&gt;base&lt;/span&gt;(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SqlRule&amp;quot;&lt;/span&gt;,                                  &lt;span class="rem"&gt;// idNamespace&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;SR0001&amp;quot;&lt;/span&gt;,                                   &lt;span class="rem"&gt;// id&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;Check if all table names are uppercased&amp;quot;&lt;/span&gt;,  &lt;span class="rem"&gt;// name&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,                                         &lt;span class="rem"&gt;// description&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;,                                         &lt;span class="rem"&gt;// helpUrl&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;                &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)                                         &lt;span class="rem"&gt;// helpKeyword&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsSupported(Microsoft.Data.Schema.SchemaModel.IModelElement element)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  31:  &lt;/span&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotImplementedException();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  32:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  33:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  34:  &lt;/span&gt;        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; IList&amp;lt;Problem&amp;gt; Analyze(Microsoft.Data.Schema.SchemaModel.IModelElement modelElement, RuleSetting ruleSetting, RuleExecutionContext context)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  35:  &lt;/span&gt;        {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  36:  &lt;/span&gt;            &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; NotImplementedException();&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  37:  &lt;/span&gt;        }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  38:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  39:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;
  &lt;br /&gt;Before we start making our rule implement something meaningful, lets check if we can build, deploy and debug our rule!&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h1&gt;Step 8: Debugging a SQL Static Code Analysis rule&lt;/h1&gt;

&lt;p&gt;Before we start our debugging session, place 3 breakpoints, one on the constructor (line 18), the IsSupported (line 29) and Analyze (line 34) methods.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_5.png" width="1097" height="473" /&gt;&lt;/a&gt; Next we need to define the debug host, we are going to use Visual Studio to debug Visual Studio, in order to do this, go to the project properties and define the &amp;quot;Start Action&amp;quot; and point it to use an external program, using&amp;#160; &amp;quot;%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe&amp;quot;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_14.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_6.png" width="725" height="536" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;

&lt;p&gt;Now you can start debugging. This will start a second instance of the Visual Studio shell. &lt;/p&gt;

&lt;p&gt;No breakpoints will fire until you open a Database Project (.dbproj) file. Assuming copy operation of the assembly and Extensions.xml file were copied correctly to the Extensions directory and the assembly was correctly registered in the GAC, the first breakpoint that will fire is during the load if the database project. At that point in time the extension manager will check if assemblies inside the Extensions folder, based on the information provided by the Extensions.xml files inside this directory.&lt;/p&gt;

&lt;p&gt;Call Stack: Extension loader, loads the extension&lt;/p&gt;

&lt;table border="1" cellspacing="0" cellpadding="2" width="1093"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="1091"&gt;
        &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; SqlRule.dll!SqlRule.UppercaseTableRule.UppercaseTableRule&amp;#160;&amp;#160;&amp;#160; C#
          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [Native to Managed Transition]&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [Managed to Native Transition]&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mscorlib.dll!System.RuntimeType.CreateInstanceSlow&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; mscorlib.dll!System.Activator.CreateInstance&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.dll!Microsoft.Data.Schema.Extensibility.ExtensionTypeLoader.InstantiateType&amp;lt;Microsoft.Data.Schema.StaticCodeAnalysis.Rule&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.dll!Microsoft.Data.Schema.Extensibility.ExtensionTypeLoader.InstantiateExtension&amp;lt;Microsoft.Data.Schema.StaticCodeAnalysis.Rule&amp;gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.dll!Microsoft.Data.Schema.Extensibility.ExtensionHandle&amp;lt;Microsoft.Data.Schema.StaticCodeAnalysis.Rule&amp;gt;.Instantiate&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.dll!Microsoft.Data.Schema.StaticCodeAnalysis.StaticCodeAnalysisEngine.LoadRules&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.dll!Microsoft.Data.Schema.StaticCodeAnalysis.StaticCodeAnalysisEngine.LoadRules&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.dll!Microsoft.Data.Schema.StaticCodeAnalysis.StaticCodeAnalysisEngine.LoadRules&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.Sql.dll!Microsoft.Data.Schema.Sql.SchemaModel.SqlServer.SqlSchemaModel.InitializeValidator&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.Sql.dll!Microsoft.Data.Schema.Sql.SchemaModel.SqlServer.Sql100SchemaModel.CommonConstruction&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Microsoft.Data.Schema.Sql.dll!Microsoft.Data.Schema.Sql.SchemaModel.SqlServer.Sql100SchemaModel.Sql100SchemaModel&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [Native to Managed Transition]&amp;#160;&amp;#160;&amp;#160; &lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;This is your first validation to make sure you extension is copied to the right location, registered in the GAC and that your Extensions.xml file is correct. If you not breakpoint fires in the constructor, you are not setup correctly. It makes no sense to continue in that case, you have to fix it first. One common problem I have had is when running on Vista or a later OS, is that you need to make sure the post build event copies the files correctly. If you get am access denied error in the post build event, try running the Visual Studio using the &amp;quot;Run as administrator&amp;quot; option.&lt;/p&gt;

&lt;p&gt;Now that we can debug and validated that our rule is loaded by the extension manager, we can check the Code Analysis configuration property page (Data-&amp;gt;Static Code Analysis-&amp;gt;Configure).&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_16.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_7.png" width="996" height="434" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;If everything works as planned, your rule should show up. If not check your Extensions.xml file content, make sure your public key is correct and the naming of your assembly and class are correct.&lt;/p&gt;

&lt;p&gt;So far we have only setup the system. This is a great point to save your work, if you want to use this as a template, for other rules you want to develop later. Now we will continue by implementing the to remaining functions the IsSupported() and Analyze() methods which contain the meat of the rule.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h1&gt;Step 9: Implement the IsSupported() method&lt;/h1&gt;

&lt;p&gt;The IsSupported() method is used to indicate if a element should be analyzed or not. In our case we simply have to test if the element is a table, we can do this by checking if the type of element is an ITable.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; IsSupported(Microsoft.Data.Schema.SchemaModel.IModelElement element)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; (element &lt;span class="kwrd"&gt;is&lt;/span&gt; ITable);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;h1&gt;Step 10: Implement the Analyze() method&lt;/h1&gt;

&lt;p&gt;The analyze method contains the actual rule implementation, here you have to evaluate whatever you want the rule the check for, if the rule fails, you return one or more probems, by returning an IList of Problem class instances.&lt;/p&gt;

&lt;p&gt;Lets walk through the final version of our simple rule. &lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;override&lt;/span&gt; IList&amp;lt;Problem&amp;gt; Analyze(&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    Microsoft.Data.Schema.SchemaModel.IModelElement modelElement, &lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    RuleSetting ruleSetting, &lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    RuleExecutionContext context)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;{&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (modelElement.Name == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;        &lt;span class="kwrd"&gt;return&lt;/span&gt; &lt;span class="kwrd"&gt;null&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    List&amp;lt;Problem&amp;gt; problems = &lt;span class="kwrd"&gt;new&lt;/span&gt; List&amp;lt;Problem&amp;gt;();&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    IList&amp;lt;&lt;span class="kwrd"&gt;string&lt;/span&gt;&amp;gt; nameParts = modelElement.Name.Parts;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;    &lt;span class="rem"&gt;// test if table name is uppercased&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;    &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;string&lt;/span&gt;.Compare(&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;        nameParts[nameParts.Count - 1],&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;        nameParts[nameParts.Count - 1].ToUpper(),&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;        &lt;span class="kwrd"&gt;false&lt;/span&gt;) != 0)&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;    {&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  21:  &lt;/span&gt;        &lt;span class="kwrd"&gt;string&lt;/span&gt; message = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;&amp;quot;Table name [{0}].[{1}] is not uppercased.&amp;quot;&lt;/span&gt;,&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;            nameParts[0],&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  23:  &lt;/span&gt;            nameParts[1]);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;        Problem p = &lt;span class="kwrd"&gt;new&lt;/span&gt; Problem(&lt;span class="kwrd"&gt;this&lt;/span&gt;, message, (IModelElement)modelElement);&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;        problems.Add(p);&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;    }&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  28:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  29:  &lt;/span&gt;    &lt;span class="kwrd"&gt;return&lt;/span&gt; problems;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  30:  &lt;/span&gt;}&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Lines 6-9: check if the model element passed in to the rule analyzer is named. In our case we only fire the rule for ITable objects, and tables have to be named, but in case your are evaluating more objects, you can be handed an unnamed object.&lt;/p&gt;

&lt;p&gt;Line 11: Create an list of problems to return, by returning an empty list you indicate the rule did not detect any violations of the rule&lt;/p&gt;

&lt;p&gt;Line 13: Our rule needs to check if the name of the table is all uppercase, so we ask the element for its name parts. Since objects can have 1 to 3 name parts the Parts property returns an IList&amp;lt;string&amp;gt; with all the name parts. &lt;/p&gt;

&lt;p&gt;Line 16-19: This is the actual test if the name is formatted according to the rules definition. We only want to test the table name, not the schema name, so we only are interested in the last name part.&lt;/p&gt;

&lt;p&gt;Line 21-26: If the test fails, the name does not consist of all uppercase letters, we create an error message, pass the message together with the offending element to the constructor of the Problem class, and add the Problem instance to the problems list.&lt;/p&gt;

&lt;p&gt;Line 29: When the rule is finished it returns the list of problems.&lt;/p&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;If you are creating a table name my_TABLE, executing the rule will result in the following output in the error list.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; border-top: 0px; border-right: 0px" border="0" alt="image" src="http://blogs.msdn.com/blogfiles/gertd/WindowsLiveWriter/CreatingTSQLStaticCodeAnalysisRules_C941/image_thumb_8.png" width="1096" height="219" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;This brings us to the end, you have build you first T-SQL Static Code Analysis rule! You can download the sample project &lt;a target="_blank" href="http://cid-526eb9977609d51e.skydrive.live.com/self.aspx/DataDude/Samples/Rules/SqlRule%7C_v1.zip"&gt;SqlRule_v1.zip&lt;/a&gt; from my SkyDrive.&lt;/p&gt;

&lt;p&gt;I hope this sample helps you getting started writing your own rules.&lt;/p&gt;

&lt;p&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9264791" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/SQLStaticCodeAnalysis/default.aspx">SQLStaticCodeAnalysis</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>GDR VPC's</title><link>http://blogs.msdn.com/gertd/archive/2008/12/24/gdr-vpc-s.aspx</link><pubDate>Thu, 25 Dec 2008 02:06:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9252235</guid><dc:creator>gertd</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9252235.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9252235</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9252235</wfw:comment><description>&lt;p&gt;We just released a new set off VPC's for Visual Studio 2008 Team Suite (including TFS) which now have the Visual Studio 2008 Team System Database Edition GDR bits installed. These VPC's provide an easy way to test out the GDR release. There is a Virtual PC and Hyper-V based image. &lt;/p&gt;  &lt;p&gt;For details check out &lt;a target="_blank" href="http://www.pluralsight.com/community/blogs/brian/archive/2008/12/24/happy-holidays-and-look-what-santa-s-brought.aspx"&gt;Brian Randell&lt;/a&gt; his blog covering this announcement.&lt;/p&gt;  &lt;p&gt;You can download the VPC from the following location:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=c7a809d8-8c9f-439f-8147-948bc6957812&amp;amp;displaylang=en"&gt;VSTS &amp;#8220;all-up&amp;#8221; Virtual PC/Virtual Server image&lt;/a&gt; (6 GB download, expands to 15 GB) &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=9eb65c97-29c9-4d05-ae45-73d22ad4b86e"&gt;VSTS &amp;#8220;all-up&amp;#8221; Hyper-V image&lt;/a&gt; (6 GB download, expands to 15 GB) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;I want to thank Brian Randell for adding the GDR bits to this wonderful VPC!&lt;/p&gt;  &lt;p&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9252235" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>Handling of COMMENTS in the GDR</title><link>http://blogs.msdn.com/gertd/archive/2008/12/19/handling-of-comments-in-the-gdr.aspx</link><pubDate>Sat, 20 Dec 2008 06:19:05 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9243340</guid><dc:creator>gertd</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9243340.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9243340</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9243340</wfw:comment><description>&lt;p&gt;In the GDR you will mainly find large improvements, but it is not everything is better. One area where we regressed functionality is the deployment of comments inside T-SQL procedures, triggers,&amp;#160; functions etc. With the move to a true and only model based system, objects that are stored in dbo.syscomments or sys.sql_modules, are modeled in such a way that we separate out body script from the object name and parameters. We do this for a reason, so we when you rename an object we also update the actual name inside the script body. The nasty side effect is that all comment before the first real statement in the script body and after the last real statement in the script body as lost when deployed.&lt;/p&gt;  &lt;p&gt;For example see the following stored procedure which has a comment line on every possible line.&lt;/p&gt;  &lt;div class="csharpcode"&gt;   &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="rem"&gt;-- comment line 1&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[p_Comments] &lt;span class="rem"&gt;-- comment line 2&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&lt;span class="rem"&gt;-- comment line 3&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;     @param1 &lt;span class="kwrd"&gt;int&lt;/span&gt; = 0, &lt;span class="rem"&gt;-- comment line 4&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;     @param2 &lt;span class="kwrd"&gt;int&lt;/span&gt;      &lt;span class="rem"&gt;-- comment line 5&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="rem"&gt;-- comment line 6&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;AS&lt;/span&gt; &lt;span class="rem"&gt;-- comment line 7&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;&lt;span class="rem"&gt;-- comment line 8&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt; &lt;span class="rem"&gt;-- comment line 9&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt; &lt;span class="rem"&gt;-- comment line 10&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;-- comment line 11&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @param1, @param2 &lt;span class="rem"&gt;-- comment line 12&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;    &lt;span class="rem"&gt;-- comment line 13&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;    &lt;span class="kwrd"&gt;RETURN&lt;/span&gt; 0 &lt;span class="rem"&gt;-- comment line 14&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt; &lt;span class="rem"&gt;-- comment line 15&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;&lt;span class="rem"&gt;-- comment line 16&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;&lt;span class="kwrd"&gt;GO&lt;/span&gt; &lt;span class="rem"&gt;-- comment line 17&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;&lt;span class="rem"&gt;-- comment line 18&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;If you would inspect how this information is stored inside the model, by looking at the .DBSCHEMA file which is produced by the build step, it looks somewhat like this:&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Element&lt;/span&gt; &lt;span class="attr"&gt;Type&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;ISql100Procedure&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;[dbo].[p_Comments]&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;     &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Property&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;IsAnsiNullsOn&amp;quot;&lt;/span&gt; &lt;span class="attr"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span class="kwrd"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Property&lt;/span&gt; &lt;span class="attr"&gt;Name&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;BodyScript&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;               &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;!&lt;/span&gt;[CDATA[BEGIN -- comment line 9&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;    SET NOCOUNT ON -- comment line 10&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;    -- comment line 11&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;    SELECT @param1, @param2 -- comment line 12&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    -- comment line 13&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    RETURN 0 -- comment line 14&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;END]]&lt;span class="kwrd"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Value&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;          &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Property&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;          ...&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;Element&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;This fragment indicates that the script body starts at the first statement, in this case the BEGIN statement and ends at the END statements. Comments between those to statements are preserved when deploying, the others, comments line 1 through 8 and 15 through 18 did not make it over. Which become very apparent when you look at the deployment script.&lt;/p&gt;

&lt;div class="csharpcode"&gt;
  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;PRINT&lt;/span&gt; N&lt;span class="str"&gt;'Creating dbo.p_Comments...'&lt;/span&gt;;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;&lt;span class="kwrd"&gt;GO&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;#160;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;&lt;span class="kwrd"&gt;CREATE&lt;/span&gt; &lt;span class="kwrd"&gt;PROCEDURE&lt;/span&gt; [dbo].[p_Comments]&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;@param1 &lt;span class="kwrd"&gt;INT&lt;/span&gt;=0, @param2 &lt;span class="kwrd"&gt;INT&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;&lt;span class="kwrd"&gt;AS&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;&lt;span class="kwrd"&gt;BEGIN&lt;/span&gt; &lt;span class="rem"&gt;-- comment line 9&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;    &lt;span class="kwrd"&gt;SET&lt;/span&gt; NOCOUNT &lt;span class="kwrd"&gt;ON&lt;/span&gt; &lt;span class="rem"&gt;-- comment line 10&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;    &lt;span class="rem"&gt;-- comment line 11&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;    &lt;span class="kwrd"&gt;SELECT&lt;/span&gt; @param1, @param2 &lt;span class="rem"&gt;-- comment line 12&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;    &lt;span class="rem"&gt;-- comment line 13&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;    &lt;span class="kwrd"&gt;RETURN&lt;/span&gt; 0 &lt;span class="rem"&gt;-- comment line 14&lt;/span&gt;&lt;/pre&gt;

  &lt;pre class="alt"&gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;&lt;span class="kwrd"&gt;END&lt;/span&gt;&lt;/pre&gt;

  &lt;pre&gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;GO&lt;/pre&gt;
&lt;/div&gt;
&lt;style type="text/css"&gt;
.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;The comments inside the source code are preserved, but they simply do not make it to the target. &lt;/p&gt;

&lt;p&gt;The team is currently working on finding the appropriate resolution for this issue.&lt;/p&gt;

&lt;p&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9243340" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item><item><title>GDR Language Releases</title><link>http://blogs.msdn.com/gertd/archive/2008/12/19/gdr-language-releases.aspx</link><pubDate>Sat, 20 Dec 2008 03:51:32 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9243162</guid><dc:creator>gertd</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/gertd/comments/9243162.aspx</comments><wfw:commentRss>http://blogs.msdn.com/gertd/commentrss.aspx?PostID=9243162</wfw:commentRss><wfw:comment>http://blogs.msdn.com/gertd/rsscomments.aspx?PostID=9243162</wfw:comment><description>&lt;p&gt;Today, we released 6 additional languages of the Visual Studio 2008 Team System Database Edition GDR!&lt;/p&gt;  &lt;p&gt;Chinese (Traditional, Taiwan)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/Readme.mht"&gt;http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/Readme.mht&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/setup.exe"&gt;http://download.microsoft.com/download/1/9/D/19D1CB8C-82A8-4736-AFF4-51F2E343A312/setup.exe&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;German&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/Readme.mht"&gt;http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/Readme.mht&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/setup.exe"&gt;http://download.microsoft.com/download/6/E/F/6EFD0F85-C8C3-4B47-9426-22B0ED4D12CE/setup.exe&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Spanish&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/Readme.mht"&gt;http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/Readme.mht&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/setup.exe"&gt;http://download.microsoft.com/download/A/1/0/A10A906C-5CB9-4DAE-9CC2-B4B233B8AD6B/setup.exe&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Italian&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/Readme.mht"&gt;http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/Readme.mht&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/setup.exe"&gt;http://download.microsoft.com/download/6/3/1/6313DB42-DBC5-499F-AB3E-2119689A6A3E/setup.exe&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Japanese &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/Readme.mht"&gt;http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/Readme.mht&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/setup.exe"&gt;http://download.microsoft.com/download/3/D/1/3D14DB8E-4507-4AC3-BE96-DDD5E1FF1C8B/setup.exe&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Korean&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/Readme.mht"&gt;http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/Readme.mht&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/setup.exe"&gt;http://download.microsoft.com/download/0/C/2/0C2CAB8A-08D4-4354-9883-502C2639DB04/setup.exe&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Additionally the GDR documentation has been translated into Japanese and is available via &lt;a href="https://mail.microsoft.com/redir.aspx?C=1e6fe98aca9e4b389ab9de4e1605e363&amp;amp;URL=http%3a%2f%2fmsdn.microsoft.com%2fja-jp%2flibrary%2fdd193270.aspx"&gt;MSDN&lt;/a&gt;. There will be 3 more languages coming: Chinese Simplified, French and Russian.&lt;/p&gt;  &lt;p&gt;Happy holidays,   &lt;br /&gt;-GertD&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9243162" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/gertd/archive/tags/tsbt-db/default.aspx">tsbt-db</category><category domain="http://blogs.msdn.com/gertd/archive/tags/VSDB2008GDR/default.aspx">VSDB2008GDR</category></item></channel></rss>