<?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>Anthony Bloesch's Web Log : Repository</title><link>http://blogs.msdn.com/anthonybloesch/archive/tags/Repository/default.aspx</link><description>Tags: Repository</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>SQL Server Modeling Services announcement</title><link>http://blogs.msdn.com/anthonybloesch/archive/2009/11/19/SQL-Server-Modeling-Services-announcement.aspx</link><pubDate>Thu, 19 Nov 2009 17:28:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9925595</guid><dc:creator>AnthonyBloesch</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/anthonybloesch/comments/9925595.aspx</comments><wfw:commentRss>http://blogs.msdn.com/anthonybloesch/commentrss.aspx?PostID=9925595</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The code name “Oslo” repository now has the official name “SQL Server Modeling Services”. SQL Server Modeling Services will be a SQL Server workload like SQL Server Reporting Services. Details will be announced at the PDC where the most relevant session is &lt;/FONT&gt;&lt;A href="http://microsoftpdc.com/Sessions/SVR19"&gt;&lt;SPAN style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;http://microsoftpdc.com/Sessions/SVR19&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;. You can also read about it online at &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd129586(VS.85).aspx"&gt;&lt;FONT size=3 face=Calibri&gt;http://msdn.microsoft.com/en-us/library/dd129586(VS.85).aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;In Microsoft, like most organizations, it is hard to get things done when you are in different organizational units and on different schedules. This move makes the repository team firmly part of the SQL Server team and on the same schedule. Thus this change will make alignment and deep integration of the repository with rest of the SQL Server platform easier. Also it provides a simple setup experience and much simpler licensing model for customers. Already, there are many planned changes for the next version of SQL Server that will make for a much stronger metadata store and overall platform.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9925595" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Oslo/default.aspx">Oslo</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Repository/default.aspx">Repository</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Modeling+Services/default.aspx">Modeling Services</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/SQL+Server+Modeling+Services/default.aspx">SQL Server Modeling Services</category></item><item><title>"Oslo" repository lifecycle/versioning whitepaper</title><link>http://blogs.msdn.com/anthonybloesch/archive/2009/04/07/_2200_Oslo_2200_-lifecycle-whitepaper.aspx</link><pubDate>Tue, 07 Apr 2009 19:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9536495</guid><dc:creator>AnthonyBloesch</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/anthonybloesch/comments/9536495.aspx</comments><wfw:commentRss>http://blogs.msdn.com/anthonybloesch/commentrss.aspx?PostID=9536495</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 6pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;Repositories face issues to do with versioning schema and data as well as integrating with an organization's lifecycle processes. Here is a whitepaper I wrote on how&amp;nbsp;the "Oslo" team&amp;nbsp;thinks about handling various lifecycle/versioning issues &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/library/dd638048.aspx"&gt;&lt;FONT size=3&gt;http://msdn.microsoft.com/en-us/library/dd638048.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;. The whitepaper deals with the following issues:&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 6pt 0.5in" class=MsoListParagraph&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Application lifecycle management (ALM)&lt;/B&gt;: Facilitating team development of software in a continuous cycle of steps (that is, definition, design, development, testing, deployment, and management). Traditionally, Source Code Control Systems (SCCS) and build systems, like Visual Studio Team Foundation Server, automate ALM. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 6pt 0.5in" class=MsoListParagraph&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Schema evolution&lt;/B&gt;: Changing schemas over time in such a way that applications continue to run unchanged or with minimal changes. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 6pt 0.5in" class=MsoListParagraph&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;"Oslo" product versioning&lt;/B&gt;: Upgrading a customer's "Oslo" repository, from version n to version n+1, in such a way that the data is preserved. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 6pt 0.5in" class=MsoListParagraph&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Application versioning&lt;/B&gt;: The ability to upgrade applications, stored in the "Oslo" repository, to new versions. The upgrade process has the option to retain the data from older versions of the application. &lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 6pt 0.5in" class=MsoListParagraph&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;&lt;B style="mso-bidi-font-weight: normal"&gt;Operational versioning&lt;/B&gt;: The ability to understand operational/management changes to a deployed application.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9536495" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Oslo/default.aspx">Oslo</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Repository/default.aspx">Repository</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/versioning/default.aspx">versioning</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/lifecycle/default.aspx">lifecycle</category></item><item><title>How to make a copy of the repository</title><link>http://blogs.msdn.com/anthonybloesch/archive/2009/04/06/how-to-make-a-copy-of-the-repository.aspx</link><pubDate>Tue, 07 Apr 2009 02:22:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9534711</guid><dc:creator>AnthonyBloesch</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/anthonybloesch/comments/9534711.aspx</comments><wfw:commentRss>http://blogs.msdn.com/anthonybloesch/commentrss.aspx?PostID=9534711</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;Here is a nice article on how to make a copy of the “Oslo” repository so you can later restore it to its previous state &lt;/FONT&gt;&lt;A href="http://blogs.msdn.com/modelcitizen/archive/2009/04/06/how-to-clean-up-the-repository.aspx"&gt;&lt;FONT size=3&gt;http://blogs.msdn.com/modelcitizen/archive/2009/04/06/how-to-clean-up-the-repository.aspx&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt;. This is great for experimenting with the repository and for edit debug cycles with domains. The steps are essentially what we do internally at Microsoft.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9534711" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Oslo/default.aspx">Oslo</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Repository/default.aspx">Repository</category></item><item><title>SQL Server 2008 error handling best practice</title><link>http://blogs.msdn.com/anthonybloesch/archive/2009/03/10/SQL-Server-error-handling-best-practice.aspx</link><pubDate>Tue, 10 Mar 2009 22:45:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9469577</guid><dc:creator>AnthonyBloesch</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/anthonybloesch/comments/9469577.aspx</comments><wfw:commentRss>http://blogs.msdn.com/anthonybloesch/commentrss.aspx?PostID=9469577</wfw:commentRss><description>&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'"&gt;Error handling in SQL Server 2008 needs careful implementation. The Microsoft “Oslo” Repository’s API has the further problem that we cannot mandate the error handling logic in our callers. Thus a stored procedure call could be in a transaction or not and in a try-catch block or not. Below is the pattern we have chosen based on experimentation and best practice guidance from the SQL Server team and other SQL Server experts. A test script for all the interesting cases can be found at &lt;A href="http://blogs.msdn.com/anthonybloesch/attachment/9469577.ashx" mce_href="http://blogs.msdn.com/anthonybloesch/attachment/9469577.ashx"&gt;&lt;SPAN style="COLOR: blue"&gt;http://blogs.msdn.com/anthonybloesch/attachment/9469577.ashx&lt;/SPAN&gt;&lt;/A&gt;.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;For a good overview of SQL Server error handling see &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;A href="http://www.sommarskog.se/error-handling-I.html" mce_href="http://www.sommarskog.se/error-handling-I.html"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; COLOR: blue; FONT-SIZE: 12pt"&gt;http://www.sommarskog.se/error-handling-I.html&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt; and &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;A href="http://www.sommarskog.se/error-handling-II.html" mce_href="http://www.sommarskog.se/error-handling-II.html"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; COLOR: blue; FONT-SIZE: 12pt"&gt;http://www.sommarskog.se/error-handling-II.html&lt;/SPAN&gt;&lt;/A&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;. In our design, we had the following main issues and mitigations:&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt 0.25in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Symbol; FONT-SIZE: 12pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;A transaction rollback will rollback to the outermost transaction but if there is an outer transaction we would like to only rollback the changes to the module’s inner transaction. The solution is to use SQL Server save points if there is an outer transaction.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt 0.25in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Symbol; FONT-SIZE: 12pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;A sufficiently severe raiserror will terminate a module if there is an outer try-catch block but if there is none then execution will continue in the module. The solution is to always explicitly return after raising an error.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt 0.25in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Symbol; FONT-SIZE: 12pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;Some developers like to use stored procedure return values to encode error states. The solution is to return appropriate error codes.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt 0.25in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Symbol; FONT-SIZE: 12pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;SQL Server will raise warnings if the transaction depth entering and leaving a transaction do not match. The solution is to be careful. &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt 0.25in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Symbol; FONT-SIZE: 12pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;Triggers have an implicit transaction. The solution is to use a simplified pattern for triggers where a transaction is never started.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt 0.25in" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Symbol; FONT-SIZE: 12pt; mso-bidi-font-family: Symbol; mso-fareast-font-family: Symbol"&gt;·&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 7pt; mso-fareast-font-family: Symbol"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;Save points need unique names if modules can nest otherwise you can rollback to the wrong save point. The solution is to use a GUID to name the save points.&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;Here is the pattern for stored procedures (eliding our special error reporting routines):&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;parameter error&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;raiserror&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;N'…'&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; 16&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR: gray"&gt;);&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: gray"&gt;-&lt;/SPAN&gt;1&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;BR&gt;else&lt;BR&gt;begin&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;try&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;declare&lt;/SPAN&gt; @hasOuterTransaction &lt;SPAN style="COLOR: blue"&gt;bit&lt;/SPAN&gt; &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;case&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;when&lt;/SPAN&gt; &lt;SPAN style="COLOR: fuchsia"&gt;@@trancount&lt;/SPAN&gt; &lt;SPAN style="COLOR: gray"&gt;&amp;gt;&lt;/SPAN&gt; 0 &lt;SPAN style="COLOR: blue"&gt;then&lt;/SPAN&gt; 1 &lt;SPAN style="COLOR: blue"&gt;else&lt;/SPAN&gt; 0 &lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;declare&lt;/SPAN&gt; @rollbackPoint &lt;SPAN style="COLOR: blue"&gt;nchar&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;(&lt;/SPAN&gt;32&lt;SPAN style="COLOR: gray"&gt;)&lt;/SPAN&gt; &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; &lt;SPAN style="COLOR: fuchsia"&gt;replace&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: fuchsia"&gt;convert&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;nchar&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;(&lt;/SPAN&gt;36&lt;SPAN style="COLOR: gray"&gt;),&lt;/SPAN&gt; &lt;SPAN style="COLOR: fuchsia"&gt;newid&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;()),&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;N'-'&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;N''&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;);&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; @hasOuterTransaction &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; 1&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;save&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;transaction&lt;/SPAN&gt; @rollbackPoint&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;else&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;transaction&lt;/SPAN&gt; @rollbackPoint&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;Do work&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: gray; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; @hasOuterTransaction &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; 0&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;commit&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;transaction&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;try&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;catch&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;if&lt;/SPAN&gt; &lt;SPAN style="COLOR: fuchsia"&gt;xact_state&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;()&lt;/SPAN&gt; &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; 1&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;rollback&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;transaction&lt;/SPAN&gt; @rollbackPoint&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;execute &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;Standard module error handler&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: gray; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt; &lt;SPAN style="COLOR: gray"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR: fuchsia"&gt;error_number&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;();&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 12pt; mso-bidi-font-family: Arial; mso-fareast-font-family: 'Times New Roman'"&gt;Here is the pattern for triggers (eliding our special error reporting routines):&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;if&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt; &lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;parameter error&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: gray; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;begin&lt;BR&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;rollback&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;transaction&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: gray; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;raiserror&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR: red"&gt;N'…'&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; 16&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; 0&lt;SPAN style="COLOR: gray"&gt;);&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Times New Roman','serif'; FONT-SIZE: 12pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;BR&gt;else&lt;BR&gt;begin&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;try&lt;BR&gt;&lt;/SPAN&gt;&lt;BR&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;Do work&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: gray; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;try&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;begin&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;catch&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;rollback&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;transaction&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;execute &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;I style="mso-bidi-font-style: normal"&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; COLOR: blue; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;Standard module error handler&lt;/SPAN&gt;&lt;/I&gt;&lt;SPAN style="FONT-FAMILY: Consolas; COLOR: gray; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;;&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: Consolas; FONT-SIZE: 9pt; mso-bidi-font-family: 'Times New Roman'; mso-fareast-font-family: 'Times New Roman'; mso-no-proof: yes"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;return&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;catch&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;end&lt;/SPAN&gt;&lt;SPAN style="COLOR: gray"&gt;;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: normal; MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial','sans-serif'; FONT-SIZE: 10pt; mso-fareast-font-family: 'Times New Roman'"&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&lt;/FONT&gt;&lt;/o:p&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9469577" width="1" height="1"&gt;</description><enclosure url="http://blogs.msdn.com/anthonybloesch/attachment/9469577.ashx" length="11757" type="application/octet-stream" /><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/SQL+Server/default.aspx">SQL Server</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Repository/default.aspx">Repository</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Microsoft+Oslo/default.aspx">Microsoft Oslo</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Error+handling/default.aspx">Error handling</category></item><item><title>Architectural design tenets and corollaries</title><link>http://blogs.msdn.com/anthonybloesch/archive/2008/12/17/architectural-design-tenets-and-corollaries.aspx</link><pubDate>Wed, 17 Dec 2008 20:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9231375</guid><dc:creator>AnthonyBloesch</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/anthonybloesch/comments/9231375.aspx</comments><wfw:commentRss>http://blogs.msdn.com/anthonybloesch/commentrss.aspx?PostID=9231375</wfw:commentRss><description>&lt;P style="LINE-HEIGHT: 110%; MARGIN: 0in 0in 0pt" class=MsoNoSpacing&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;Now that the codename &lt;/FONT&gt;&lt;A href="http://msdn.microsoft.com/en-us/oslo" mce_href="http://msdn.microsoft.com/en-us/oslo"&gt;&lt;FONT color=#0000ff size=3&gt;“Oslo” repository&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3&gt; is public I can discuss its architecture and design.&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: 110%; MARGIN: 12pt 0in 0pt" class=MsoNoSpacing&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;When designing a new product or component I like to:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: 110%; TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoNoSpacing&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: Candara; mso-fareast-font-family: Candara"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;1.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;Understand the business landscape. For example, what is the market opportunity, what are the major competitors, where are the competitors likely to be by the time the product is released, how will the product fit into customer’s business processes. Creating new products is difficult and expensive so it is important to get this part right. Also an in-depth understanding of the business landscape can help enormously in day-to-day decisions. For example, can a feature wait until version 2?&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: 110%; TEXT-INDENT: -0.25in; MARGIN: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1" class=MsoNoSpacing&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: Candara; mso-fareast-font-family: Candara"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;FONT size=3&gt;2.&lt;/FONT&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;Create design tenets. Design tenets are the bedrock on which good architecture is built. Any non-trivial design must make tradeoffs—design tenets help drive decisions by succinctly describing what is important. Without design tenets, scope creep and over-engineering can easily destroy a design.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: 110%; MARGIN: 12pt 0in 0pt" class=MsoNoSpacing&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;I did an extensive multi-version business analysis for the “Oslo” repository which, of course, I cannot share with you but here are the “Oslo” repositories design tenets:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -9.35pt; MARGIN: 0in 0in 0pt 36.7pt" class=ListLabel&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;Integrate well with Oslo.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt; Oslo should provide a seamless platform. The “Oslo” repository should integrate seamlessly with the rest of the Oslo platform.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -9.35pt; MARGIN: 12pt 0in 0pt 36.7pt" class=ListLabel&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;Support a wide variety of tools.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt; No toolset can fully anticipate customer needs. Support for &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;ad hoc&lt;/SPAN&gt;&lt;/EM&gt; queries and updates, using familiar tools, will allow customers to circumvent the limitations in our tools. For example, it should be straightforward to build an Access based application over the “Oslo” repository or write a query that finds code vulnerable to a new security exploit.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 6pt 0in 0pt 0.5in" class=MsoListContinue&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;The need to support traditional tools implies that the “Oslo” repository uses a straightforward relational representation of data as its primary API. Further to make queries easy to write, the metadata stored in the “Oslo” repository should form an integrated and consistent whole.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -9.35pt; MARGIN: 12pt 0in 0pt 36.7pt" class=ListLabel&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;Scale well.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt; Deployment and code analysis data (e.g. call graphs) can be very large. The “Oslo” repository needs to scale well to provide consistently good performance even when it contains a large enterprise’s metadata. In particular, good geo-scaling is likely to be important in “Oslo” repository scenarios.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 6pt 0in 0pt 0.5in" class=MsoListContinue&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;Enterprises vary in their scaling strategies, the “Oslo” repository needs to support both scale-up and scale-out strategies. In particular, the “Oslo” repository should be designed to align with the SQL Server’s scale-out strategy since it will offer customers the most cost effective scale-out architecture for the near future. In practice, this means that “Oslo” repository data should be easily partitionable into related segments.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -9.35pt; MARGIN: 12pt 0in 0pt 36.7pt" class=ListLabel&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;Support high availability.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt; To be credible, the Oslo server will need to be highly available. As a critical component of the Oslo Server, the “Oslo” repository will also need to support high availability.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 6pt 0in 0pt 0.5in" class=MsoListContinue&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;As well as being highly available itself, the “Oslo” repository should also support building fault resilient components that can survive “Oslo” repository failures. In particular, the “Oslo” repository should be designed to align with the SQL Server scale-out strategy and OCS (Occasionally Connected Systems) changes since they will offer customers the most cost effective high availability architecture for the near future. In practice, this means that “Oslo” repository data should be easily partitionable into related segments.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -9.35pt; MARGIN: 12pt 0in 0pt 36.7pt" class=ListLabel&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;Be easily extensible.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt; To quickly instantiate the “Oslo” repository with domain models for a wide variety of metadata and allow partners and customers to extend Microsoft tools or create new ones, the “Oslo” repository needs to be easily and cheaply extensible, supporting domain model extension and composition.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 6pt 0in 0pt 0.5in" class=MsoListContinue&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;Ideally, the “Oslo” repository should make it easy to design and build domain models with, preferably, a wide variety of standard development tools or, less desirably, special purpose tools.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-INDENT: -9.35pt; MARGIN: 12pt 0in 0pt 36.7pt" class=ListLabel&gt;&lt;FONT size=3&gt;&lt;STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;Support schema evolution.&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt; As technologies evolve, so will our domain models. The “Oslo” repository must support the easy and robust migration of applications to new domain model versions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 6pt 0in 0pt 0.5in" class=MsoListContinue&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;&lt;FONT size=3&gt;The “Oslo” repository should use good relational database design to ensure easy schema evolution. Because object-oriented meta-models are fragile, &lt;EM&gt;&lt;SPAN style="FONT-FAMILY: 'Candara','sans-serif'"&gt;fixed&lt;/SPAN&gt;&lt;/EM&gt; object-oriented domain APIs should be avoided.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="LINE-HEIGHT: 110%; MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;o:p&gt;&lt;FONT size=3 face=Calibri&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9231375" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Oslo/default.aspx">Oslo</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Repository/default.aspx">Repository</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/architecture/default.aspx">architecture</category></item><item><title>Oslo repository</title><link>http://blogs.msdn.com/anthonybloesch/archive/2007/11/05/Oslo-Repository.aspx</link><pubDate>Mon, 05 Nov 2007 21:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:5915277</guid><dc:creator>AnthonyBloesch</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/anthonybloesch/comments/5915277.aspx</comments><wfw:commentRss>http://blogs.msdn.com/anthonybloesch/commentrss.aspx?PostID=5915277</wfw:commentRss><description>&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;The central challenge of repository implementations is how to provide support for an extensible list of metadata schema. The most common solution is to use a universal schema (e.g. an entity table, a property-value table and a relationship table). This makes writing tools like repository browsers easier but at a significant cost. Repository performance and queriability suffers. Queries run slowly and standard database tools like SQL Server Reporting Services do not work well because they expect well structured data.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3&gt;&lt;FONT face=Calibri&gt;Instead of using a universal schema approach, the design of the Oslo repository has focused on making well structured relational APIs work. This makes the engineering effort harder but customers benefit from a performant store that can be easily queried and used with a wide variety of stores. For example, the query to retrieve name and accessibility of a particular CLR method using the universal schema approach would be something like:&lt;SPAN class=MsoPageNumber&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=Code&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; N&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Value] &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; [Name]&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; A&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Value] &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; [Accessibility]&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; [Properties] &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; N&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; [Properties] &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; A&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; N&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Id] &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; @id &lt;SPAN style="COLOR: gray"&gt;and&lt;/SPAN&gt; A&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Id] &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; @id &lt;/FONT&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: gray"&gt;and&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;N&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Property] &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; ‘82aba91a-ca89-4e4f-bd39-9b67ec02ab5a’ and -- Name Property&lt;/FONT&gt;&lt;SPAN style="COLOR: gray"&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;A&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Property] &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; ‘efad35c8-46bb-439e-8a5d-7bd0f695d27f’&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;-- Accessibility Property&lt;SPAN class=MsoPageNumber&gt;&lt;SPAN style="FONT-FAMILY: Consolas; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;SPAN class=MsoPageNumber&gt;&lt;SPAN style="FONT-FAMILY: 'Calibri','sans-serif'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-theme-font: minor-bidi; mso-ascii-theme-font: minor-latin; mso-hansi-theme-font: minor-latin"&gt;&lt;FONT size=3&gt;by contrast the repository query is:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=Code&gt;&lt;FONT face=Consolas&gt;&lt;SPAN style="COLOR: blue"&gt;select&lt;/SPAN&gt; M&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Name]&lt;SPAN style="COLOR: gray"&gt;,&lt;/SPAN&gt; M&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Accessibility]&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;from&lt;/SPAN&gt; [CLR]&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Methods] &lt;SPAN style="COLOR: blue"&gt;as&lt;/SPAN&gt; M&lt;BR&gt;&lt;SPAN style="COLOR: blue"&gt;where&lt;/SPAN&gt; M&lt;SPAN style="COLOR: gray"&gt;.&lt;/SPAN&gt;[Id] &lt;SPAN style="COLOR: gray"&gt;=&lt;/SPAN&gt; @id&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;which is a natural SQL query.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Reliance on universal schema are just one of the issues past repository implementations have suffered from. Now that the repository is announced I am free to talk about its design. &lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;In subsequent articles I will go through these design tradeoffs and how we resolve these issues.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;Last week, as part of the Oslo announcement, Microsoft announced that we are building a metadata repository that will ship in System Center, BizTalk and Visual Studio. If you are interested in reading more about Oslo and the repository then the &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/soa/products/oslo.aspx" mce_href="http://www.microsoft.com/soa/products/oslo.aspx"&gt;&lt;FONT size=3 face=Calibri&gt;Oslo site&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt;, &lt;/FONT&gt;&lt;A href="http://www.microsoft.com/presspass/press/2007/oct07/10-30OsloPR.mspx" mce_href="http://www.microsoft.com/presspass/press/2007/oct07/10-30OsloPR.mspx"&gt;&lt;FONT size=3 face=Calibri&gt;press release&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; and &lt;/FONT&gt;&lt;A href="http://www.directionsonmicrosoft.com/samples/Olso1107.pdf" mce_href="http://www.directionsonmicrosoft.com/samples/Olso1107.pdf"&gt;&lt;FONT size=3 face=Calibri&gt;Directions on Microsoft&lt;/FONT&gt;&lt;/A&gt;&lt;FONT size=3 face=Calibri&gt; articles are good starts.&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt" class=MsoNormal&gt;&lt;FONT size=3 face=Calibri&gt;We need great developers and testers to complete the repository team. If you are interested in helping change the way software is built and managed then please apply for one of the following positions:&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoListParagraphCxSpFirst&gt;&lt;A href="http://members.microsoft.com/careers/search/details.aspx?JobID=84D82BAB-F73D-49BF-B33C-0BB1EE38311B&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted" mce_href="http://members.microsoft.com/careers/search/details.aspx?JobID=84D82BAB-F73D-49BF-B33C-0BB1EE38311B&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted"&gt;&lt;FONT size=3 face=Calibri&gt;Development Manager (position #179184)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoListParagraphCxSpMiddle&gt;&lt;A href="http://members.microsoft.com/careers/search/details.aspx?JobID=66E508C6-B914-4786-8E50-BBB21E8300A3&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted" mce_href="http://members.microsoft.com/careers/search/details.aspx?JobID=66E508C6-B914-4786-8E50-BBB21E8300A3&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted"&gt;&lt;FONT color=#0000ff size=3 face=Calibri&gt;Software Developer (position #179188)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt 0.5in" class=MsoListParagraphCxSpMiddle&gt;&lt;A href="http://members.microsoft.com/careers/search/details.aspx?JobID=136F636A-72A3-488A-A1B2-07E0FBF8FEB0&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted" mce_href="http://members.microsoft.com/careers/search/details.aspx?JobID=136F636A-72A3-488A-A1B2-07E0FBF8FEB0&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted"&gt;&lt;FONT size=3 face=Calibri&gt;Modeler (position #213280)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 10pt 0.5in" class=MsoListParagraphCxSpLast&gt;&lt;A href="http://members.microsoft.com/careers/search/details.aspx?JobID=B2EC640A-4147-4D3B-A969-EFAF37DDF903&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted" mce_href="http://members.microsoft.com/careers/search/details.aspx?JobID=B2EC640A-4147-4D3B-A969-EFAF37DDF903&amp;amp;start=1&amp;amp;interval=10&amp;amp;SortCol=DatePosted"&gt;&lt;FONT size=3 face=Calibri&gt;Program Manager (position #185006)&lt;/FONT&gt;&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=5915277" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Oslo/default.aspx">Oslo</category><category domain="http://blogs.msdn.com/anthonybloesch/archive/tags/Repository/default.aspx">Repository</category></item></channel></rss>