<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="https://www.w3.org/2005/Atom" xmlns:sy="https://purl.org/rss/1.0/modules/syndication/" xmlns:dc="https://purl.org/dc/elements/1.1/" xmlns:content="https://purl.org/rss/1.0/modules/content/" xmlns:wfw="https://wellformedweb.org/CommentAPI/" xmlns:slash="https://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>An Architect Makes It To The Big Show</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/dave_langer/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/dave_langer/feed.xml</link>
    <description>A stagehand in The Big Show pontificates on Data Science, Big Data, Hadoop, and everything that is hot right now.</description>
    <lastBuildDate>Wed, 17 Apr 2019 03:21:09 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Thinking About SQL Server Developer Tools, Codename “Juneau”– Part 2</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/thinking-about-sql-server-developer-tools-codename-juneau-part-2</link>
      <pubDate>Sat, 16 Jul 2011 10:48:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2011/07/16/thinking-about-sql-server-developer-tools-codename-juneau-part-2/</guid>
      <description><![CDATA[This is the second post in my series on thinking about SQL Server Developer Tools, Codename...]]></description>
      <content:encoded><![CDATA[<p>This is the second post in my <a href="https://blogs.msdn.com/b/dave_langer/archive/tags/thinking+about+ssdt/">series</a> on thinking about <a href="https://msdn.microsoft.com/en-us/data/tools">SQL Server Developer Tools, Codename &ldquo;Juneau&rdquo;</a> (SSDT). The intent of this series is to orient new SSDT users with the product by comparing SSDT&rsquo;s <a href="https://www.joelonsoftware.com/uibook/fog0000000249.html">program model</a> to the program model of SQL Server Management Studio (SSMS). The following table, copied from the <a href="https://blogs.msdn.com/b/dave_langer/archive/2011/06/04/thinking-about-sql-server-developer-tools-codename-juneau-part-1.aspx">previous post</a> in this series, summarizes the comparisons:</p>
<table border="1" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top" width="56"><strong></strong></td>
<td valign="top" width="104">
<p align="center"><strong>Connected DB Development</strong></p>
</td>
<td valign="top" width="104">
<p align="center"><strong>Project DB Development</strong></p>
</td>
<td valign="top" width="120">
<p align="center"><strong>Querying the Database</strong></p>
</td>
</tr>
<tr>
<td valign="top" width="56">
<p><strong>SSMS</strong></p>
</td>
<td valign="top" width="104">
<p align="center">Imperative</p>
</td>
<td valign="top" width="104">
<p align="center">Imperative</p>
</td>
<td valign="top" width="120">
<p align="center">Declarative</p>
</td>
</tr>
<tr>
<td valign="top" width="56">
<p><strong>SSDT</strong></p>
</td>
<td valign="top" width="104">
<p align="center">Declarative</p>
</td>
<td valign="top" width="104">
<p align="center">Declarative</p>
</td>
<td valign="top" width="120">
<p align="center">Declarative</p>
</td>
</tr>
</tbody>
</table>
<p>As illustrated in the table above declarative database development is central to the SSDT product. In looking at the table above arguably the differences in connected database development between SSMS and SSDT will be the most common point of conceptual friction for new SSDT users (I know it was for me when I first joined the team), so I&rsquo;ll start there.</p>
<p><strong>Connected Declarative Database Development &ndash; The Happy Path</strong></p>
<p>One of the things that database developers will notice when firing up SSDT for the first time is the addition of the SQL Server node in the Server Explorer. The following screenshot illustrates how this looks in <a href="https://msdn.microsoft.com/en-us/data/hh297027">SSDT CTP3</a> integrated with <a href="https://www.microsoft.com/visualstudio/en-us/products/2010-editions/ultimate/overview">Visual Studio 2010 Ultimate</a> and connected to a <a href="https://www.microsoft.com/sqlserver/en/us/future-editions.aspx">SQL Server Code Name &ldquo;Denali&rdquo; CTP 3</a> instance:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/0412.Image1_16865255.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/0412.Image1_5F00_16865255.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Image1" border="0" alt="Image1" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/3632.Image1_thumb_35C8F928.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/3632.Image1_5F00_thumb_5F00_35C8F928.png" width="522" height="484" /></a></p>
<p>The SQL Server node has been purposefully designed to have an experience that closely mirrors SSMS. This was done to allow SQL Server database developers the luxury of using their existing SSMS &ldquo;muscle memory&rdquo; in SSDT. However, the experience in the SQL Server node has been optimized for the most common database developer tasks. As such, not all SSMS features are available from the SQL Server node. This reflects the product philosophy where SSMS is the manageability tool for DBAs and SSDT is focused on developers. Our intent with the SQL Server node was trying to target the sweet spot where most developers will not need to leave the Visual Studio shell most of the time while they are developing T-SQL code. Feedback on our success on this would be most appreciated.</p>
<p>Unlike SSMS, SSDT&rsquo;s default connected development experience is declarative. We can see this exhibited in the following screenshot where I&rsquo;ve navigated to the Customer table in the Northwind database and double-clicked on it in the SQL Server node:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/2664.Image2_6E73A335.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/2664.Image2_5F00_6E73A335.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Image2" border="0" alt="Image2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/0005.Image2_thumb_0DB64A09.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/0005.Image2_5F00_thumb_5F00_0DB64A09.png" width="550" height="434" /></a></p>
<p>By default tables are opened in the new SSDT Table Designer. The Table Designer is very cool because it allows an optimized experience for developing SQL Server tables. As a developer I can use the design grid in the top pane if that&rsquo;s the way I prefer to work or I can use T-SQL code in the bottom pane. Both panes are synchronized so I can leverage both if that&rsquo;s the way I like to work (more in-depth posts on developing using SSDT will be coming soon). Regardless of the pane used, the T-SQL code remains the source of truth (this is true in every feature of SSDT).</p>
<p>Declarative connected development is implemented using SSDT&rsquo;s Power Buffer technology. The easiest way to think about Power Buffer is to imagine that your connected development is done in a sort of database scratch pad. Using Power Buffer you can alter table structures, rename columns, add new tables, create new FKs, write sprocs, etc., all without actually altering the physically executing database. As an example, the following screenshots illustrate me adding a CustomerSegmentation table and adding a FK from Customer to Customer segmentation using Power Buffer:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/2158.Image3_1B1C5D0F.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/2158.Image3_5F00_1B1C5D0F.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Image3" border="0" alt="Image3" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/3323.Image3_thumb_5EF09166.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/3323.Image3_5F00_thumb_5F00_5EF09166.png" width="544" height="295" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/1072.Image4_1A43F725.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/1072.Image4_5F00_1A43F725.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Image4" border="0" alt="Image4" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/6355.Image4_thumb_5E182B7C.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/6355.Image4_5F00_thumb_5F00_5E182B7C.png" width="544" height="473" /></a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/8015.image_2BB457FD.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/8015.image_5F00_2BB457FD.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/6765.image_thumb_4B6331C5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/6765.image_5F00_thumb_5F00_4B6331C5.png" width="544" height="484" /></a></p>
<p>Notice how all the code in the above screenshots are based on CREATE (i.e., you don&rsquo;t see an ALTERs anywhere in the code). This is a core idea in SSDT. When I develop my database I target the desired end shape of the structures without worrying about the current shape of those structures. When the time comes to alter the physically running database I tell SSDT to take my scratch pad containing how the database should look and figure out how to change the running database to match my scratch pad. Clicking the Update Database button (which is present in all Power Buffer windows) tells SSDT to do exactly this. The following screenshot illustrates the result of requesting SSDT to update the Northwind database:</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/8424.Image6_78E45188.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/8424.Image6_5F00_78E45188.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Image6" border="0" alt="Image6" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/0027.Image6_thumb_23BCB59B.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/0027.Image6_5F00_thumb_5F00_23BCB59B.png" width="551" height="409" /></a></p>
<p>In looking at the Preview Database Updates dialog it is worthy to note that a Power Buffer scratch pad is scoped on a per-Database basis. This is a critical concept because, as we&rsquo;ve seen above, multiple Power Buffer document windows actually operate over the same scratch pad (i.e., each document window is a viewport into the same scratch pad). As such, clicking the Update Database on any Power Buffer window automatically incorporates all the changes from any dirty document window that is a viewport into the same scratch pad. In our example, I clicked Update Database on the Customers window and the changes from the CustomerSegmentation window were automatically incorporated.</p>
<p>Taking a closer look at the Preview Database Updates dialog we can see the net result of SSDT incorporating all the scratch pad changes and comparing them with the actual running database. As listed in the dialog, SSDT has determined that the Customers table needs to be altered (to add the new CustomerSegmentation column), that a new table needs to be created (CustomerSegmentation), and that a new FK needs to be created. The SSDT engine is very intelligent. The algorithms involved are deliberately engineered to produce changes that have minimal adverse impacts on the running database (e.g., using sp_rename to change the name of a column) and also prevent inadvertent data loss. Just in case you are still skeptical about how SSDT does things, the dialog offers the &ldquo;Generate Script&rdquo; button which allows you to see exactly what T-SQL SSDT will send to the running database to update it&rsquo;s structure . Since I trust the product, I&rsquo;ll just go ahead an click &ldquo;Update Database&rdquo; and voila! My running Northwind database is updated. No fuss, no muss.</p>
<p><strong>Next Time</strong></p>
<p>Having taken a very quick look at the happy path through SSDT declarative connected development, the next installment in the series will take a look at some of the alternate paths for connected development &ndash; namely how do you work imperatively against live databases with SSDT and some of the gotchas that arise when trying to use Power Buffers windows like SSMS-style T-SQL document windows.</p>
<p>As always, feedback much appreciated.</p>
<p>Until next time, thanx for reading!</p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server Developer Tools, Codename “Juneau” Available Now!</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/sql-server-developer-tools-codename-juneau-available-now</link>
      <pubDate>Wed, 13 Jul 2011 08:25:55 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2011/07/13/sql-server-developer-tools-codename-juneau-available-now/</guid>
      <description><![CDATA[&#160;  After a lot of hard work by the team, the CTP3 bits for SQL Server Developer Tools, Codename...]]></description>
      <content:encoded><![CDATA[<p>&#160;</p>  <p>After a lot of hard work by the team, the CTP3 bits for <a href="https://msdn.microsoft.com/en-us/data/tools">SQL Server Developer Tools, Codename “Juneau”</a> (SSDT) are now available for everyone to take for a spin. The SSDT install experience is based on Microsoft’s <a href="https://www.microsoft.com/web/downloads/platform.aspx">Web Platform Installer</a> (Web PI) and lays down all the SSDT goodness you need, including the new <a href="https://blogs.msdn.com/b/sqlexpress/archive/2011/07/12/introducing-localdb-a-better-sql-express.aspx">LocalDB engine</a>. I encourage everyone to take the bits for a spin and don’t hesitate to provide feedback to the team – either directly to me or via the <a href="https://social.msdn.microsoft.com/Forums/en-US/ssdt/threads">SSDT Forum</a>. </p>  <p>With the CTP3 bits now public I can continue my series on <a href="https://blogs.msdn.com/b/dave_langer/archive/tags/thinking+about+ssdt/">thinking about SSDT</a> since the screenshots are no longer super-secret.</p>  <p>For convenience, here are some helpful links:</p>  <ul>   <li><a href="https://msdn.microsoft.com/en-us/data/tools">Main SSDT page in Data Developer Center</a> </li>    <li><a href="https://msdn.microsoft.com/en-us/data/hh297027">SSDT Download/Install Page</a> </li>    <li><a href="https://social.msdn.microsoft.com/Forums/en-US/ssdt/threads">SSDT Forum</a> </li>    <li><a href="https://blogs.msdn.com/b/ssdt/">SSDT Team Blog</a> </li>    <li><a href="https://connect.microsoft.com/SQLServer/Feedback">SQL Server’s Connect Page</a> </li> </ul>  <p>Enjoy the bits and we look forward to feedback!</p>]]></content:encoded>
    </item>
    <item>
      <title>Thinking About SQL Server Developer Tools, Codename “Juneau”– Part 1</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/thinking-about-sql-server-developer-tools-codename-juneau-part-1</link>
      <pubDate>Sat, 04 Jun 2011 08:47:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2011/06/04/thinking-about-sql-server-developer-tools-codename-juneau-part-1/</guid>
      <description><![CDATA[&lt;Disclaimer&gt;  Folks that are familiar with Visual Studio 2010 SQL Server database projects...]]></description>
      <content:encoded><![CDATA[<p>&lt;Disclaimer&gt;</p>  <p>Folks that are familiar with <a href="https://msdn.microsoft.com/en-us/library/ff678491.aspx">Visual Studio 2010 SQL Server database projects</a> will find most of this post to be old hat. Additionally, the contents of this post are the opinions of one PM and don’t reflect the opinions of my Architect, GPM, GM, or Microsoft as a whole.&#160;&#160; ;-)</p>  <p>&lt;/Disclaimer&gt;</p>  <p>When I first joined the team, it took me a bit of time to grok <a href="https://msdn.microsoft.com/en-us/data/tools.aspx">SQL Server Developer Tools, Codename “Juneau”</a> (SSDT). I like to think that I’m a relatively intelligent guy, but in the beginning I just had a mental block on the product. I just didn’t “get it”. It took some time, and patience, from the other members of the team to get my head in the right space. At first this worried me, because if I didn’t get SSDT how would Microsoft expect our customers (many of which will have backgrounds like mine) to get it?</p>  <p>Enter the first of a <a href="https://blogs.msdn.com/b/dave_langer/archive/tags/thinking+about+ssdt/">series</a> of posts. I’m guessing that a lot of folks will be in a similar spot where I was when they start taking a look at/playing around with SSDT. I’m not going to lie, if you are like I was (i.e., <a href="https://en.wikipedia.org/wiki/SQL_Server_Management_Studio">SSMS</a> is/has been your SQL Server development tool) there’s a learning curve to SSDT. However, now that I’ve scaled the learning curve I can honestly say that the effort is well worth it – so much so that if I started consulting again tomorrow I would be advising my clients to adopt SSDT. The goal of these two posts is to begin the process of flattening the SSDT learning curve.</p>  <p>Being a big fan of <a href="https://www.joelonsoftware.com/">Joel Spolsky</a>, I’m going to use concepts from his most excellent <a href="https://www.amazon.com/User-Interface-Design-Programmers-Spolsky/dp/1893115941/ref=sr_1_8?ie=UTF8&amp;qid=1307160379&amp;sr=8-8">book on UI design</a> in describing, IMHO, the best way to think about SSDT. In Joel’s book the concepts of <a href="https://www.joelonsoftware.com/uibook/fog0000000249.html">program and user models</a> are key in designing a quality user experience. Not surprisingly, understanding SSDT in light of these concepts goes a long way in groking how to use SSDT and the UI decisions we’ve made in the product. Given the importance of these concepts, I’ll provide some definitions paraphrased from Joel’s book:</p>  <p><strong>User model: </strong>The collection of expectations a user has regarding how to interact with a new software user interface, resulting in the user’s mental model of how the software should function.</p>  <p><strong>Program model: </strong>How the software actually functions (i.e., how it is coded), which is a reflection of the user model of the team that developed the software.</p>  <p>The above concepts are simple, intuitive, and powerful. For example, given that the almost universal user model for word processors is <a href="https://en.wikipedia.org/wiki/Wysiwyg">WYSIWIG</a>, a team that writes a revolutionary new word processor that isn’t WYSIWIG is going to need to provide great facilities/guidance for their customers to shift their user models to the new program model.</p>  <p>When I started on the SSDT team my user model for developing SQL Server databases was formed by the program models of the development tools I used. This is only to be expected because the program models of SQL Server tooling has essentially remained the same from SQL Server 6.0 through <a href="https://www.microsoft.com/sqlserver/en/us/product-info/future-editions.aspx">SQL Server, Code Name “Denali”</a>. The following screenshots illustrate this model from SSMS 2008 R2:</p>  <p align="center"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/3348.SSMS1_6CBC0DA0.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/3348.SSMS1_5F00_6CBC0DA0.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: left; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SSMS1" border="0" alt="SSMS1" align="left" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/3240.SSMS1_thumb_24FA84B9.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/3240.SSMS1_5F00_thumb_5F00_24FA84B9.png" width="593" height="471" /></a></p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p>&#160;</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/8535.SSMS2_592EADFF.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/8535.SSMS2_5F00_592EADFF.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="SSMS2" border="0" alt="SSMS2" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/7633.SSMS2_thumb_3FC6AAC5.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/7633.SSMS2_5F00_thumb_5F00_3FC6AAC5.png" width="600" height="354" /></a></p>  <p>The program model of SQL Server tools is <a href="https://en.wikipedia.org/wiki/Imperative_programming">imperative</a> development. That is, when using SSMS the database developer crafts <a href="https://msdn.microsoft.com/en-us/library/bb510741.aspx">T-SQL</a> code instructing the SQL Server engine on what exactly to do to create, alter, drop, etc. the desired database objects. This is worthy to note as writing T-SQL queries is, by way of comparison, <a href="https://en.wikipedia.org/wiki/Declarative_programming">declarative</a> – the database developer tells the SQL Server engine what she wants done (e.g., SELECT * FROM Customer) and the engine figures out how to do it. As any application developer can attest, traditionally you spend a lot more time doing imperative SQL Server development early in the development lifecycle than you spend doing declarative development. Given the tools, it is easy to see how the typical developer’s user model for developing and querying SQL Server databases came to be in alignment with the underlying program model of the tools.</p>  <p>Because it serves my purposes for this post (which will be come clear in just a bit), I would also like to mention that SSMS supports two methods of performing database development – Connected and <a href="https://msdn.microsoft.com/en-us/library/ms174161.aspx">Project</a>. The first is a no-brainer that every SQL Server developer is familiar with and is illustrated by the screenshots above. The second is less well-known (I only learned about my self about a year and a half ago) and is illustrated by the following screenshots from SSMS 2008 R2:</p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/2768.image_58564815.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/2768.image_5F00_58564815.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/7462.image_thumb_505EA5B3.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/7462.image_5F00_thumb_5F00_505EA5B3.png" width="377" height="271" /></a></p>  <p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/4745.image_09094FC1.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/4745.image_5F00_09094FC1.png"><img style="background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/22/80/metablogapi/4338.image_thumb_28B82989.png" original-url="https://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-22-80-metablogapi/4338.image_5F00_thumb_5F00_28B82989.png" width="575" height="389" /></a></p>  <p>From a user/program model perspective, working with SSMS projects to develop a database isn’t that much different from doing connected development – the model is still imperative in nature.</p>  <p>All of this is important in thinking about SSDT because I can now construct the following table that lists the typical SQL Server database developer’s user model for various SQL Server database development activities and compare these with the user models needed to properly grok SSDT:</p>  <table border="1" cellspacing="0" cellpadding="0"><tbody>     <tr>       <td valign="top" width="56"><strong></strong></td>        <td valign="top" width="104">         <p align="center"><strong>Connected DB Development</strong></p>       </td>        <td valign="top" width="104">         <p align="center"><strong>Project DB Development</strong></p>       </td>        <td valign="top" width="120">         <p align="center"><strong>Querying the Database</strong></p>       </td>     </tr>      <tr>       <td valign="top" width="56">         <p><strong>SSMS</strong></p>       </td>        <td valign="top" width="104">         <p align="center">Imperative</p>       </td>        <td valign="top" width="104">         <p align="center">Imperative</p>       </td>        <td valign="top" width="120">         <p align="center">Declarative</p>       </td>     </tr>      <tr>       <td valign="top" width="56">         <p><strong>SSDT</strong></p>       </td>        <td valign="top" width="104">         <p align="center">Declarative</p>       </td>        <td valign="top" width="104">         <p align="center">Declarative</p>       </td>        <td valign="top" width="120">         <p align="center">Declarative</p>       </td>     </tr>   </tbody></table>  <p>As the table illustrates, we’re changing some things in SSDT. However, as I mention above, I’m fully convinced that we’re changing them for the better.</p>  <p>The subject of my next post will be to talk about the decisions we’ve made in SSDT based on the table above and how these decisions manifest in the UI.</p>  <p>Until next time, feedback most welcome and thanx for reading.</p>]]></content:encoded>
    </item>
    <item>
      <title>Reducing System TCO with Modifiability Analysis</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/reducing-system-tco-with-modifiability-analysis</link>
      <pubDate>Mon, 30 May 2011 16:15:09 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2011/05/30/reducing-system-tco-with-modifiability-analysis/</guid>
      <description><![CDATA[Even though I currently work as Program Manager I spent most of my career working as a software...]]></description>
      <content:encoded><![CDATA[<p>Even though I currently work as Program Manager I spent most of my career working as a software architect and architecture remains my first love. As such, I thought I would share a whitepaper I recently wrote for one of my <a href="https://www.uwb.edu/mscss">Master’s degree</a> classes. The subject is reducing the Total Cost of Ownership (TCO) of systems through architectural analyses focusing on <a href="https://en.wikipedia.org/wiki/List_of_system_quality_attributes">Modifiability</a>. If you dig architecture you should check the paper out. As always, feedback/thoughts most welcome. </p>  <p>Paper is located on my <a href="https://explore.live.com/windows-live-skydrive">skydrive</a>:</p> <iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="https://cid-e567e7658dedda1d.office.live.com/embedicon.aspx/.Public/Papers/ReducingTCOWhitepaper.docx" frameborder="0" marginwidth="0" scrolling="no"></iframe>]]></content:encoded>
    </item>
    <item>
      <title>See SQL Server Developer Tools, Codename “Juneau” In Action</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/see-sql-server-developer-tools-codename-juneau-in-action</link>
      <pubDate>Sat, 28 May 2011 19:37:23 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2011/05/28/see-sql-server-developer-tools-codename-juneau-in-action/</guid>
      <description><![CDATA[This blog has been dark for 7 months as I’ve been working on the next generation of Microsoft’s...]]></description>
      <content:encoded><![CDATA[<p>This blog has been dark for 7 months as I’ve been working on the next generation of Microsoft’s database development tools – <a href="https://msdn.microsoft.com/en-us/data/tools.aspx">SQL Server Developer Tools, Codename “Juneau”</a> (which I will abbreviate as SSDT for obvious reasons ;-). As SSDT has reached a point of public disclosure, I feel the time is right to open the blogging floodgates on SSDT. I know there is a lot of interest in the community, especially from those folks who are familiar with Visual Studio 2010 database projects (aka “Data Dude” or “TSData”), so I hope that folks will find my posts helpful/interesting and also generate community feedback.</p>  <p>As this is my inaugural post on SSDT, I figured I would talk a bit about my background and the philosophy I will be following in subsequent SSDT posts (hopefully this doesn’t seem overly egomaniacal). Additionally, there will be a collection of links for folks to presentations on SSDT so they can see the bits in action. </p>  <p><strong>About Me</strong></p>  <p>I’m a Program Manager on the SSDT team with a tenure of around 8 months. Previous to the SSDT team I worked for 10 months on the Oslo Repository team focusing on the UML Domain and spent a year in Microsoft IT as an Enterprise Architect. Before coming to Microsoft in October 2008 I worked for several years as a consulting software/solution architect for medium-large IT shops. Before that I spent a number of years working as an architect for a Fortune 500 insurance company. I’m not a T-SQL expert, nor am I an expert on administering SQL Server. However, I have designed and built many enterprise systems using SQL Server and I am intimately familiar with the enterprise space. Just for the sake of full disclosure, I’m a unabashed UML junkie, OOA/D bigot and a big fan of many Agile practices (e.g., <a href="https://en.wikipedia.org/wiki/Continuous_Integration">Continuous Integration</a>), but not necessarily a fan of all Agile methodologies (e.g., <a href="https://www.extremeprogramming.org/">XP</a>).</p>  <p><strong>My SSDT Blogging Philosophy</strong></p>  <p>The philosophy I will be taking regarding my SSDT blogging is this – if I started consulting again tomorrow how would I advise my clients to think about and adopt SSDT to make their SQL Server development better, cheaper, and faster. This view should, hopefully, give an air of credence to my posts. Quite frankly, a product as significant as SSDT isn’t going to be all things to all people in every situation. I fully plan on blogging about the features of SSDT that would appeal to my previous enterprise IT customers in a broad range of scenarios.</p>  <p>OK, enough blather. Some links to where you can see the SSDT bits in action are listed below. The subject of my next post will be how to think about the SSDT <a href="https://www.joelonsoftware.com/uibook/fog0000000249.html">program model</a> so as to get the most out of the product. Until then, feedback most welcome. </p>  <p><strong>SSDT Links</strong></p>  <ul>   <li>TechEd Atlanta, May 2011:      <ul>       <li><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV207">https://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV207</a> </li>        <li><a href="https://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV314">https://channel9.msdn.com/Events/TechEd/NorthAmerica/2011/DEV314</a> </li>     </ul>   </li>    <li>TechEd Europe, Nov 2010:      <ul>       <li><a href="https://www.msteched.com/2010/Europe/DAT314">https://www.msteched.com/2010/Europe/DAT314</a> </li>     </ul>   </li> </ul>]]></content:encoded>
    </item>
    <item>
      <title>And Now For Something Completely Different</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/and-now-for-something-completely-different</link>
      <pubDate>Fri, 01 Oct 2010 09:30:01 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2010/10/01/and-now-for-something-completely-different/</guid>
      <description><![CDATA[Unfortunately this blog has been quite dark in the past months as I’ve been heads down doing PM work...]]></description>
      <content:encoded><![CDATA[<p><font size="3" face="Calibri">Unfortunately this blog has been quite dark in the past months as I’ve been heads down doing PM work on the UML Domain of SQL Server Modeling Services (SSMoS). As Don Box documented <a href="https://blogs.msdn.com/b/modelcitizen/archive/2010/09/22/update-on-sql-server-modeling-ctp-repository-modeling-services-quot-quadrant-quot-and-quot-m-quot.aspx">here</a>, in the time since my last post there has been a change in product direction with respect to the technologies (i.e., Quadrant and Repository) that were originally part of “Oslo”. Essentially, development on Quadrant and Repository has been stopped to allow us to re-focus resources on the product “big bets”.</font></p>  <p><font size="3" face="Calibri"></font></p>  <p><font size="3" face="Calibri">As part of this logical, and necessary, business decision I’ve accepted a PM position working on one of these “big bets” – the next generation of development tools for SQL Server database architects and developers. While as a unrepentant UML junkie I’m a little sad to see development on the UML Domain stop, I would be lying if I said I wasn’t totally stoked for my new gig. As you might imagine, a “Big IT” modeling junkie like myself has a lot of hands-on experience modeling, designing, and developing SQL Server databases. As such, the opportunity to influence Microsoft tools in this space appeals to my ego.</font></p>  <p><font size="3" face="Calibri"></font></p>  <p><font size="3" face="Calibri">To this end, I’m hoping to fire up the blog posts again and target topics related to developing SQL Server databases and database-centric applications. Additionally, I’ll also be trolling for any community feedback regarding our current feature set for doing SQL Server database development. All feedback will be most welcome, especially feedback on where we need to improve.</font></p>  <p><font size="3" face="Calibri"></font></p>  <p><font size="3" face="Calibri">As always, thanx for reading.</font></p>]]></content:encoded>
    </item>
    <item>
      <title>SQL Server Modeling Nov 2009 CTP R3 Released!</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/sql-server-modeling-nov-2009-ctp-r3-released</link>
      <pubDate>Tue, 20 Apr 2010 18:29:36 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2010/04/20/sql-server-modeling-nov-2009-ctp-r3-released/</guid>
      <description><![CDATA[Just wanted to let everyone know that the SQL Server Modeling Nov 2009 CTP has been refreshed to R3...]]></description>
      <content:encoded><![CDATA[<p><font size="3" face="Calibri">Just wanted to let everyone know that the SQL Server Modeling Nov 2009 CTP has been refreshed to R3 and now works with <a href="https://www.microsoft.com/visualstudio/en-us/visual-studio-2010-launch?CR_CC=100340689&amp;WT.mc_id=SEARCH&amp;WT.srch=1&amp;CR_SCC=100340689">Visual Studio 2010</a> and <a href="https://www.microsoft.com/net/">.NET 4.0</a> RTM! Be sure to get the latest bits </font><a href="https://www.microsoft.com/downloads/details.aspx?FamilyID=29e4ead0-fd81-42ba-862b-f3589378466a&amp;displaylang=en"><font size="3" face="Calibri">here</font></a><font size="3" face="Calibri">.</font></p>  <p><font size="3" face="Calibri">Enjoy!</font></p>]]></content:encoded>
    </item>
    <item>
      <title>Query Microsoft.Uml2 for Class Data – Part 3</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/query-microsoft-uml2-for-class-data-part-3</link>
      <pubDate>Sat, 03 Apr 2010 11:52:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2010/04/03/query-microsoft-uml2-for-class-data-part-3/</guid>
      <description><![CDATA[Part 2 of this series provided a query, when combined with the query from Part 1 that allows for the...]]></description>
      <content:encoded><![CDATA[<P><A href="https://blogs.msdn.com/dave_langer/archive/2010/03/27/querying-microsoft-uml2-for-class-data-part-2.aspx" mce_href="https://blogs.msdn.com/dave_langer/archive/2010/03/27/querying-microsoft-uml2-for-class-data-part-2.aspx"><FONT size=3 face=Calibri>Part 2</FONT></A><FONT size=3 face=Calibri> of this series provided a query, when combined with the query from </FONT><A href="https://blogs.msdn.com/dave_langer/archive/2010/03/08/querying-microsoft-uml2-for-class-data-part-1.aspx" mce_href="https://blogs.msdn.com/dave_langer/archive/2010/03/08/querying-microsoft-uml2-for-class-data-part-1.aspx"><FONT size=3 face=Calibri>Part 1</FONT></A><FONT size=3 face=Calibri> that allows for the querying of UML class data from the <A href="https://msdn.microsoft.com/en-us/data/ee461169.aspx" mce_href="https://msdn.microsoft.com/en-us/data/ee461169.aspx">SQL Server Modeling Services</A> (SSMoS) <A href="https://msdn.microsoft.com/en-us/library/dd857485(VS.85).aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd857485(VS.85).aspx">UML Domain</A> in a manner analogous to the class data typically displayed on a UML canvas, where the queries illustrated in this series are compatible with the <A href="https://www.microsoft.com/downloads/details.aspx?FamilyID=29e4ead0-fd81-42ba-862b-f3589378466a&amp;displaylang=en" mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=29e4ead0-fd81-42ba-862b-f3589378466a&amp;displaylang=en">SSMoS Nov 2009 CTP R2</A> bits. As a refresher, the following UML class diagram illustrates the desired level of abstraction for data returned from the UML Domain:</FONT></P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/Indivudal1_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/Indivudal1_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/Indivudal1_2.jpg"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=Indivudal1 border=0 alt=Indivudal1 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/Indivudal1_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/Indivudal1_thumb.jpg" width=221 height=230 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/Indivudal1_thumb.jpg"></A> </P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri><STRONG>Querying Class Attributes</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>In Part 1, I walked through the construction of a query to retrieve the class attributes for the Individual class from the UML Domain. In keeping with the philosophy of this series, the results are geared to mimic the data typically displayed for UML class attributes on a prototypical UML tool’s diagram canvas. The following T-SQL query and result set summarize this work:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        P.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyId, P.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyName, P.[Visibility], </PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        T.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> TypeId, T.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> TypeName</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Properties] P <SPAN style="COLOR: #0000ff">on</SPAN> (C.[Id] = P.[<SPAN style="COLOR: #0000ff">Class</SPAN>])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Types] T <SPAN style="COLOR: #0000ff">on</SPAN> (T.[Id] = P.[Type])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = <SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P mce_keep="true"><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS3_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS3_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS3_2.jpg"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SSMS3 border=0 alt=SSMS3 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS3_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS3_thumb.jpg" width=888 height=147 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS3_thumb.jpg"></A> </P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri><STRONG>Querying for Class Operations</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>In Part 2, I walked through the construction of a query to retrieve the class operations for the Individual class from the UML Domain. As before, the results are geared to mimic the data typically displayed for UML class operations on a prototypical UML tool’s diagram canvas. The following T-SQL query and result set summarize this work:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        O.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> OperationId, O.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> OperationName, O.[Visibility], O.[ClassPosition],</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        Params.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ParameterID, Params.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamName, Params.[Direction] <SPAN style="COLOR: #0000ff">as</SPAN> ParamDirection,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN>        Params.[OwnerFormalParamPosition] <SPAN style="COLOR: #0000ff">as</SPAN> ParamPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN>        T.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamType</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Operations] O <SPAN style="COLOR: #0000ff">on</SPAN> (O.[<SPAN style="COLOR: #0000ff">Class</SPAN>] = C.[ID])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum8>   8:</SPAN>         <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[<SPAN style="COLOR: #0000ff">Parameters</SPAN>] Params <SPAN style="COLOR: #0000ff">on</SPAN> (Params.[<SPAN style="COLOR: #0000ff">Operation</SPAN>] = O.[Id])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum9>   9:</SPAN>             <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Types] T <SPAN style="COLOR: #0000ff">on</SPAN> (T.[Id] = Params.[Type])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum10>  10:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = <SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS6_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS6_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS6_2.jpg"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SSMS6 border=0 alt=SSMS6 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS6_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS6_thumb.jpg" width=1277 height=219 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS6_thumb.jpg"></A> </P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri><STRONG>Querying for Class Data – Better Together?</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>While the queries above are serviceable, they don’t quite mimic the same conceptual experience as working with a UML authoring tool. To that end, I started thinking about the shape of the data if I queried both class attributes and class operations in a single query. I won’t lie, I find this idea intriguing based on the fact that I’m an unrepentant Object-Oriented bigot. While I respect the power and mathematical beauty of the relational paradigm, I’m just more comfortable in OO land. In particular, I often visualize OO designs in my mind as UML (yes, I know that I’m sad and need to get a life ;-). As such, I was wondering how ugly it would be to bend SQL Server to my OO will.</FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri><STRONG>NOTE –</STRONG> I’ve no doubt that many of the ideas, and code, in my blogging on querying the UML Domain will offend my T-SQL/Relational/SQL Server betters. However, IMHO addressing those of us with minds crippled by OO might find dealing with suboptimal T-SQL an excellent way of deriving value from the UML Domain. Let the flame mail begin :-). </FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri>In kicking around these ideas at a high level with <A href="https://blogs.msdn.com/anthonybloesch/default.aspx" mce_href="https://blogs.msdn.com/anthonybloesch/default.aspx">Anthony Bloesch</A> (BTW, don’t hold Anthony accountable for the content of these blog posts, he is an aforementioned SQL Server better of mine), it seemed like going the route of T-SQL unions was a superior approach to using <A href="https://msdn.microsoft.com/en-us/library/ms131686.aspx" mce_href="https://msdn.microsoft.com/en-us/library/ms131686.aspx">Multiple Active Result Sets</A> (MARS). The use of unions will allow me to get all of the UML class data in a single call and will also return it as a single result set. The downside will be a large collection of columns with many NULL values scattered throughout the result set. </FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri>Accepting the potential ugliness factor of using a T-SQL union, my first requirement in the new combined query is to add the placeholder columns needed for the class operations to the class attributes query. The following T-SQL illustrates this handiwork:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassId, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        P.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyId, P.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyName, P.[Visibility] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyVisibility, </PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        T.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyTypeId, T.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyTypeName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN>        <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> OperationId, <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> OperationName, <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> OperationVisibility, <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> OperationPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN>        <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> ParameterID, <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> ParamName, <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> ParamDirection, <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> ParamPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN>        <SPAN style="COLOR: #0000ff">null</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> ParamTypeName</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum8>   8:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Properties] P <SPAN style="COLOR: #0000ff">on</SPAN> (C.[Id] = P.[<SPAN style="COLOR: #0000ff">Class</SPAN>])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum9>   9:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Types] T <SPAN style="COLOR: #0000ff">on</SPAN> (T.[Id] = P.[Type])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum10>  10:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = N<SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (N<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>Running the above T-SQL produces the following result set:</FONT></P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS7_4.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS7_4.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS7_4.jpg"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title=SSMS7 border=0 alt=SSMS7 align=left src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS7_thumb_1.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS7_thumb_1.jpg" width=1893 height=131 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS7_thumb_1.jpg"></A> </P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri>Modifying the class operations query </FONT></P>
<P><FONT size=3 face=Calibri>in the same </FONT><FONT size=3 face=Calibri>way gives the following T-SQL and result set:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassId, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyId, <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyName, <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyVisibility, <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyTypeId, </PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyTypeName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN>        O.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> OperationId, O.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> OperationName, O.[Visibility] <SPAN style="COLOR: #0000ff">as</SPAN> OperationVisibility, </PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN>        O.[ClassPosition] <SPAN style="COLOR: #0000ff">as</SPAN> OperationPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN>        Params.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ParameterID, Params.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamName, Params.[Direction] <SPAN style="COLOR: #0000ff">as</SPAN> ParamDirection,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN>        Params.[OwnerFormalParamPosition] <SPAN style="COLOR: #0000ff">as</SPAN> ParamPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum8>   8:</SPAN>        T.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamTypeName</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum9>   9:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum10>  10:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Operations] O <SPAN style="COLOR: #0000ff">on</SPAN> (O.[<SPAN style="COLOR: #0000ff">Class</SPAN>] = C.[ID])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum11>  11:</SPAN>         <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[<SPAN style="COLOR: #0000ff">Parameters</SPAN>] Params <SPAN style="COLOR: #0000ff">on</SPAN> (Params.[<SPAN style="COLOR: #0000ff">Operation</SPAN>] = O.[Id])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum12>  12:</SPAN>             <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Types] T <SPAN style="COLOR: #0000ff">on</SPAN> (T.[Id] = Params.[Type])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum13>  13:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = N<SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (N<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P mce_keep="true"><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS8_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS8_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS8_2.jpg"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; MARGIN-LEFT: 0px; BORDER-TOP: 0px; MARGIN-RIGHT: 0px; BORDER-RIGHT: 0px" title=SSMS8 border=0 alt=SSMS8 align=left src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS8_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS8_thumb.jpg" width=1877 height=188 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS8_thumb.jpg"></A> </P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>Note in the above T-SQL I made some minor changes to the alias names to standardize the result sets across queries. Simple enough, now I just sandwich the T-SQL union keyword between the above two queries to get all the data back in a single call. To make things a little more usable, I’ll add a column named “RowType” to provide some metadata denoting whether a result set row is a class property or class operation (got this idea from my Dev team – Thx to Steve and Thomas). Here’s the T-SQL and result set:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassId, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyId, <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyName, <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyVisibility, <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyTypeId, </PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        <SPAN style="COLOR: #0000ff">NULL</SPAN> <SPAN style="COLOR: #0000ff">as</SPAN> PropertyTypeName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN>        O.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> OperationId, O.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> OperationName, O.[Visibility] <SPAN style="COLOR: #0000ff">as</SPAN> OperationVisibility, </PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN>        O.[ClassPosition] <SPAN style="COLOR: #0000ff">as</SPAN> OperationPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN>        Params.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ParameterID, Params.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamName, Params.[Direction] <SPAN style="COLOR: #0000ff">as</SPAN> ParamDirection,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN>        Params.[OwnerFormalParamPosition] <SPAN style="COLOR: #0000ff">as</SPAN> ParamPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum8>   8:</SPAN>        T.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamTypeName</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum9>   9:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum10>  10:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Operations] O <SPAN style="COLOR: #0000ff">on</SPAN> (O.[<SPAN style="COLOR: #0000ff">Class</SPAN>] = C.[ID])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum11>  11:</SPAN>         <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[<SPAN style="COLOR: #0000ff">Parameters</SPAN>] Params <SPAN style="COLOR: #0000ff">on</SPAN> (Params.[<SPAN style="COLOR: #0000ff">Operation</SPAN>] = O.[Id])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum12>  12:</SPAN>             <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Types] T <SPAN style="COLOR: #0000ff">on</SPAN> (T.[Id] = Params.[Type])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum13>  13:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = N<SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (N<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P align=left><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS9_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS9_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS9_2.jpg"><IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=SSMS9 border=0 alt=SSMS9 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS9_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS9_thumb.jpg" width=1873 height=254 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryMicrosoft.Uml2forClassDataPart3_8E45/SSMS9_thumb.jpg"></A> </P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>OK, the above result set is a tad on the ugly side, but I’m still intrigued by the possibilities of getting all the data for a class (from the perspective of a UML diagram canvas, that is) in a single call. I’m thinking this is worthy of one more post’s worth of exploration.</FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri><STRONG>Next Time</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>Next time I’m going to explore using the above union query is even more interesting if it is converted to a SQL Server table-valued user-defined function (UDF). As always, any feedback from the community would be greatly appreciated.</FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri>Thanx for reading! </FONT></P>]]></content:encoded>
    </item>
    <item>
      <title>Querying Microsoft.Uml2 for Class Data – Part 2</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/querying-microsoft-uml2-for-class-data-part-2</link>
      <pubDate>Sat, 27 Mar 2010 10:37:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2010/03/27/querying-microsoft-uml2-for-class-data-part-2/</guid>
      <description><![CDATA[In part 1 of this series I illustrated querying the Microsoft.Uml2 domain to get class data. In...]]></description>
      <content:encoded><![CDATA[<P><FONT size=3 face=Calibri>In </FONT><A href="https://blogs.msdn.com/dave_langer/archive/2010/03/08/querying-microsoft-uml2-for-class-data-part-1.aspx" mce_href="https://blogs.msdn.com/dave_langer/archive/2010/03/08/querying-microsoft-uml2-for-class-data-part-1.aspx"><FONT size=3 face=Calibri>part 1</FONT></A><FONT size=3 face=Calibri> of this series I illustrated querying the </FONT><A href="https://msdn.microsoft.com/en-us/library/dd857485(VS.85).aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd857485(VS.85).aspx"><FONT size=3 face=Calibri>Microsoft.Uml2</FONT></A><FONT size=3 face=Calibri> domain to get class data. In particular, I demonstrated how to query Microsoft.Uml2 in such a way to return the data in a manner that is conceptually similar to the way UML class data is displayed on the canvas of a UML authoring tool. Part 1 was about querying Microsoft.Uml2 in a manner to retrieve the attributes of a class. </FONT><FONT size=3 face=Calibri>In this post I’ll continue along this path by building on the previous query work to include not just attribute data, but also operation data as well. As before, the T-SQL code in this post is authored to work with the <A href="https://msdn.microsoft.com/en-us/data/ee461169.aspx" mce_href="https://msdn.microsoft.com/en-us/data/ee461169.aspx">SQL Server Modeling Services</A> <A href="https://www.microsoft.com/downloads/details.aspx?FamilyID=29e4ead0-fd81-42ba-862b-f3589378466a&amp;displaylang=en" mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=29e4ead0-fd81-42ba-862b-f3589378466a&amp;displaylang=en">Nov 2009 CTP Release 2</A></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri><STRONG>Refresher</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>As a refresher from last time, the following UML class represents the running example for the queries against the UML domain:</FONT></P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/Indivudal1_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/Indivudal1_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/Indivudal1_2.jpg"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=Indivudal1 border=0 alt=Indivudal1 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/Indivudal1_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/Indivudal1_thumb.jpg" width=221 height=230 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/Indivudal1_thumb.jpg"></A> </P>
<P align=left><FONT size=3 face=Calibri>&nbsp;</FONT><FONT size=3 face=Calibri>Here’s the T-SQL from part 1:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        P.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyId, P.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> PropertyName, P.[Visibility], </PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        T.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> TypeId, T.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> TypeName</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Properties] P <SPAN style="COLOR: #0000ff">on</SPAN> (C.[Id] = P.[<SPAN style="COLOR: #0000ff">Class</SPAN>])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Types] T <SPAN style="COLOR: #0000ff">on</SPAN> (T.[Id] = P.[Type])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = <SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>As I mentioned in the last post, I’m purposefully giving up some efficiency in my queries with the goal of returning the data for a UML class that mimics the UML diagram above. The snippet above illustrates this concept by returning some redundant data with each class attribute. </FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri><STRONG>Querying for Operations</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>As one would expect, the <A href="https://www.omg.org/spec/UML/2.1.1/" mce_href="https://www.omg.org/spec/UML/2.1.1/">UML Superstructure</A> specifies that a class owns a collection of UML operations. Therefore, to get data relating to the GetFirstName(), SetFirstName(), or GetLastName() operations, I need to access the <A href="https://msdn.microsoft.com/en-us/library/dd857612(VS.85).aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd857612(VS.85).aspx">Microsoft.Uml2.Operations</A> view. With the following T-SQL I can start to get back the data I need regarding the Individual class’ operations:</FONT></P>
<P mce_keep="true">&nbsp;</P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        O.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> OperationId, O.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> OperationName, O.[Visibility], O.[ClassPosition]</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Operations] O <SPAN style="COLOR: #0000ff">on</SPAN> (O.[<SPAN style="COLOR: #0000ff">Class</SPAN>] = C.[ID])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = <SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>As the snippet above shows, I added some aliases to assist with readability. Executing the query above in Microsoft SQL Server Management Studio (SSMS) gives the following results:</FONT></P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS4_6.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS4_6.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS4_6.jpg"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SSMS4 border=0 alt=SSMS4 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS4_thumb_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS4_thumb_2.jpg" width=754 height=192 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS4_thumb_2.jpg"></A> </P>
<P><FONT size=3 face=Calibri>&nbsp; </FONT></P>
<P><FONT size=3 face=Calibri>Not bad, the results above illustrate the list of Operations on the Individual class. In case you were curious, the ClassPosition column denotes the order of the operations within the class. Now I just need to get the params for the operations.</FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri><STRONG>Adding Parameters</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>Getting the parameters for an operation is a straightforward join between the Microsoft.Uml2.Operations and <A href="https://msdn.microsoft.com/en-us/library/dd861862(VS.85).aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd861862(VS.85).aspx">Microsoft.Uml2.Parameters</A> views. The following T-SQL snippet illustrates:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        O.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> OperationId, O.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> OperationName, O.[Visibility], O.[ClassPosition],</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        Params.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ParameterID, Params.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamName, Params.[Direction] <SPAN style="COLOR: #0000ff">as</SPAN> ParamDirection,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN>        Params.[OwnerFormalParamPosition] <SPAN style="COLOR: #0000ff">as</SPAN> ParamPosition</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Operations] O <SPAN style="COLOR: #0000ff">on</SPAN> (O.[<SPAN style="COLOR: #0000ff">Class</SPAN>] = C.[ID])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN>         <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[<SPAN style="COLOR: #0000ff">Parameters</SPAN>] Params <SPAN style="COLOR: #0000ff">on</SPAN> (Params.[<SPAN style="COLOR: #0000ff">Operation</SPAN>] = O.[Id])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum8>   8:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = <SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P mce_keep="true"><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>The above query produces the following result set. Similar to the ClassPosition column, the ParamPosition column below denotes the position of the parameter within the operation:</FONT></P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS5_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS5_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS5_2.jpg"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SSMS5 border=0 alt=SSMS5 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS5_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS5_thumb.jpg" width=1171 height=193 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS5_thumb.jpg"></A> </P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>Sweet, if I add one last piece of data – the parameter type – then the returned data for operations on the class will be complete. One more quick join and I’ll be good to go. Here’s the updated T-SQL:</FONT></P>
<DIV style="BORDER-BOTTOM: silver 1px solid; TEXT-ALIGN: left; BORDER-LEFT: silver 1px solid; PADDING-BOTTOM: 4px; LINE-HEIGHT: 12pt; BACKGROUND-COLOR: #f4f4f4; MARGIN: 20px 0px 10px; PADDING-LEFT: 4px; WIDTH: 97.5%; PADDING-RIGHT: 4px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; HEIGHT: 200px; MAX-HEIGHT: 200px; FONT-SIZE: 8pt; OVERFLOW: auto; BORDER-TOP: silver 1px solid; CURSOR: text; BORDER-RIGHT: silver 1px solid; PADDING-TOP: 4px" id=codeSnippetWrapper>
<DIV style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px" id=codeSnippet><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum1>   1:</SPAN> <SPAN style="COLOR: #0000ff">select</SPAN> C.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName, C.[Folder] <SPAN style="COLOR: #0000ff">as</SPAN> FolderId, C.[ElementKind] <SPAN style="COLOR: #0000ff">as</SPAN> ClassKind, C.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ClassName,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum2>   2:</SPAN>        O.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> OperationId, O.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> OperationName, O.[Visibility], O.[ClassPosition],</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum3>   3:</SPAN>        Params.[Id] <SPAN style="COLOR: #0000ff">as</SPAN> ParameterID, Params.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamName, Params.[Direction] <SPAN style="COLOR: #0000ff">as</SPAN> ParamDirection,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum4>   4:</SPAN>        Params.[OwnerFormalParamPosition] <SPAN style="COLOR: #0000ff">as</SPAN> ParamPosition,</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum5>   5:</SPAN>        T.[Name] <SPAN style="COLOR: #0000ff">as</SPAN> ParamType</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum6>   6:</SPAN> <SPAN style="COLOR: #0000ff">from</SPAN> [Microsoft.Uml2].[Classes] C</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum7>   7:</SPAN>     <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Operations] O <SPAN style="COLOR: #0000ff">on</SPAN> (O.[<SPAN style="COLOR: #0000ff">Class</SPAN>] = C.[ID])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum8>   8:</SPAN>         <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[<SPAN style="COLOR: #0000ff">Parameters</SPAN>] Params <SPAN style="COLOR: #0000ff">on</SPAN> (Params.[<SPAN style="COLOR: #0000ff">Operation</SPAN>] = O.[Id])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: white; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum9>   9:</SPAN>             <SPAN style="COLOR: #0000ff">inner</SPAN> <SPAN style="COLOR: #0000ff">join</SPAN> [Microsoft.Uml2].[Types] T <SPAN style="COLOR: #0000ff">on</SPAN> (T.[Id] = Params.[Type])</PRE><!--CRLF--><PRE style="BORDER-BOTTOM-STYLE: none; TEXT-ALIGN: left; PADDING-BOTTOM: 0px; LINE-HEIGHT: 12pt; BORDER-RIGHT-STYLE: none; BACKGROUND-COLOR: #f4f4f4; MARGIN: 0em; PADDING-LEFT: 0px; WIDTH: 100%; PADDING-RIGHT: 0px; FONT-FAMILY: 'Courier New', courier, monospace; DIRECTION: ltr; BORDER-TOP-STYLE: none; COLOR: black; FONT-SIZE: 8pt; BORDER-LEFT-STYLE: none; OVERFLOW: visible; PADDING-TOP: 0px"><SPAN style="COLOR: #606060" id=lnum10>  10:</SPAN> <SPAN style="COLOR: #0000ff">where</SPAN> C.[Name] = <SPAN style="COLOR: #006080">'individual'</SPAN> <SPAN style="COLOR: #0000ff">and</SPAN> C.[Folder] = [Repository.Item].[PathsFolder] (<SPAN style="COLOR: #006080">'MyModels/FourPlusOne'</SPAN>)</PRE><!--CRLF--></DIV></DIV>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>And the complete Operations result set:</FONT></P>
<P align=center><A href="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS6_2.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS6_2.jpg" mce_href="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS6_2.jpg"><IMG style="BORDER-RIGHT-WIDTH: 0px; DISPLAY: inline; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" title=SSMS6 border=0 alt=SSMS6 src="https://msdnshared.blob.core.windows.net/media/TNBlogsFS/BlogFileStorage/blogs_msdn/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS6_thumb.jpg" original-url="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS6_thumb.jpg" width=1277 height=219 mce_src="https://blogs.msdn.com/blogfiles/dave_langer/WindowsLiveWriter/QueryingMicrosoft.Uml2forClassDataPart2_B9C3/SSMS6_thumb.jpg"></A> </P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri>Right, the above result set conceptually maps to the data that is typically displayed for a class’ operations on a diagramming canvas.</FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri><STRONG></STRONG></FONT>&nbsp;</P>
<P><FONT size=3 face=Calibri><STRONG>Next Time</STRONG></FONT></P>
<P><FONT size=3 face=Calibri>I’ve now got two queries that, taken together, represent the complete picture of a UML class – complete from the perspective of UML diagramming canvas, that is. However, I think it might be interesting to combine the two queries and play around with the idea of what a combined query would look like.</FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri>As the Program Manager for the UML Domain, I’d be highly interested in any feedback (good, bad, or indifferent) from the community about making the UML domain more usable. </FONT><FONT size=3 face=Calibri>Do the two queries I’ve built so far seem interesting? Useful? Could you see them being used in SQL Server Reporting Services (SSRS) reports? If not, what queries would be useful?</FONT></P>
<P><FONT size=3 face=Calibri></FONT></P>
<P><FONT size=3 face=Calibri>Until next time, thanx for reading!</FONT></P>
<P><FONT size=3 face=Calibri></FONT>&nbsp;</P>]]></content:encoded>
    </item>
    <item>
      <title>Sample Data for the System.Identity Domain</title>
      <link>https://docs.microsoft.com/archive/blogs/dave_langer/sample-data-for-the-system-identity-domain</link>
      <pubDate>Fri, 26 Mar 2010 13:38:00 GMT</pubDate>
      <dc:creator><![CDATA[Dave Langer]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/dave_langer/2010/03/26/sample-data-for-the-system-identity-domain/</guid>
      <description><![CDATA[As I’ve written about previously, I’m a big fan of the possibilities of the System.Identity domain...]]></description>
      <content:encoded><![CDATA[<P><FONT size=3 face=Calibri>As I’ve written about <A href="https://blogs.msdn.com/dave_langer/archive/tags/System.Identity/default.aspx" mce_href="https://blogs.msdn.com/dave_langer/archive/tags/System.Identity/default.aspx">previously</A>, I’m a big fan of the possibilities of the </FONT><A href="https://msdn.microsoft.com/en-us/library/dd129509(VS.85).aspx" mce_href="https://msdn.microsoft.com/en-us/library/dd129509(VS.85).aspx"><FONT size=3 face=Calibri>System.Identity</FONT></A><FONT size=3 face=Calibri> domain of </FONT><A href="https://msdn.microsoft.com/en-us/data/ee461169.aspx" mce_href="https://msdn.microsoft.com/en-us/data/ee461169.aspx"><FONT size=3 face=Calibri>SQL Server Modeling Services</FONT></A><FONT size=3 face=Calibri> (SSMoS). System.Identity’s Party Model implementation elegantly addresses so many scenarios that modern enterprise <A href="https://en.wikipedia.org/wiki/Line_of_Business" mce_href="https://en.wikipedia.org/wiki/Line_of_Business">LOB applications</A> face. So, I’m pretty stoked that I was able to help out in bringing some sample data for System.Identity to the community. </FONT><A href="https://www.kraigbrockschmidt.com/luminarity/" mce_href="https://www.kraigbrockschmidt.com/luminarity/"><FONT size=3 face=Calibri>Kraig Brockschmidt</FONT></A><FONT size=3 face=Calibri> has posted a downloadable sample that you can get </FONT><A href="https://code.msdn.microsoft.com/SQLModCTPIdentity" mce_href="https://code.msdn.microsoft.com/SQLModCTPIdentity"><FONT size=3 face=Calibri>here</FONT></A><FONT size=3 face=Calibri>. The sample illustrates a limited, but interesting, subset of System.Identity’s capabilities and works with the SSMoS </FONT><A href="https://www.microsoft.com/downloads/details.aspx?FamilyID=29e4ead0-fd81-42ba-862b-f3589378466a&amp;displaylang=en" mce_href="https://www.microsoft.com/downloads/details.aspx?FamilyID=29e4ead0-fd81-42ba-862b-f3589378466a&amp;displaylang=en"><FONT size=3 face=Calibri>Nov 2009 CTP Release 2</FONT></A><FONT size=3 face=Calibri> bits. Please take the sample for a spin. If you find yourself intrigued and are interested in more illustrative examples of what System.Identity can do, then drop me a line.</FONT></P>]]></content:encoded>
    </item>
  </channel>
</rss>