<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://drowningintechnicaldebt.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Drowning In Technical Debt</title><link>http://drowningintechnicaldebt.com/blogs/</link><description>C# | ASP.NET | SharePoint | SQL | Architecture | SOA |  </description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>'net' command (net user, net localgroup, etc)</title><link>http://drowningintechnicaldebt.com/blogs/royashbrook/archive/2008/07/29/net-command-net-user-net-localgroup-etc.aspx</link><pubDate>Tue, 29 Jul 2008 17:25:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:626</guid><dc:creator>royashbrook</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;it&amp;#39;s depressing to me how many people that i run into today that have an excrutiatingly limited knowledge about the command line in windows, and yet they are considered experts on the platform. that aside, i figured i would share a couple of very simple uses.&lt;/p&gt;&lt;p&gt;something people ask a lot is what domain groups they are in. you can run &amp;#39;net user %username% /domain&amp;#39; from the command line to see what domain groups you are in. it does cut off the names if they are too long, so the ad tools are better or using vbscript to query, but this is quick and easy for general use. there are other uses for this command, but this is the one i use the most often. you can replace %username% with anyone in the domain&amp;#39;s ids to view this info. there are some limitations, but it&amp;#39;s useful.&lt;/p&gt;&lt;p&gt;another thing that comes up in minor administration tasks is the ability to add a bunch of people at once. you can of course use this with the gui, but if you are already at the command line, you could do something like this on the machine:&lt;/p&gt;&lt;p&gt;net localgroup somegroup /add&lt;/p&gt;&lt;p&gt;net localgroup somegroup user1 user2 user3 user4 user5 /add&lt;/p&gt;&lt;p&gt;the above commands will add somegroup as a localgroup and then add users 1 through 5 to that localgroup. you can add local users or domain users (via domain\user) or domain groups. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;if it was a sql box, you could then osql locally and run some commands to add them as some role.&lt;/p&gt;&lt;p&gt;CREATE LOGIN [%whatever your machien name is%\%whatever your local group name is%] FROM WINDOWS WITH DEFAULT_DATABASE=[tempdb]&lt;br /&gt;EXEC master..sp_addsrvrolemember @loginame = N&amp;#39;%whatever your machien name is%\%whatever your local group name is%&amp;#39;, @rolename = N&amp;#39;sysadmin&amp;#39; (or whatever role you want to give them)&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;there you go. how to add a local group, a bunch of users, and even set them up in sql as some role in like 2 minutes from the command line without waiting for stupid computer manager or sql mgmt studio to open. =) &lt;br /&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=626" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/sql/default.aspx">sql</category><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/Tips-n-Tricks/default.aspx">Tips-n-Tricks</category><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/sa/default.aspx">sa</category></item><item><title>The MOST acronym for strategy planning</title><link>http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/2008/07/20/the-most-acronym-for-strategy-planning.aspx</link><pubDate>Sun, 20 Jul 2008 15:36:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:624</guid><dc:creator>David Strommer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I came across an interesting acronym called MOST – Mission, Objectives, Strategies, and Tactics.&amp;nbsp; Original source - &lt;a href="http://www.strategy.nildram.co.uk/most.html"&gt;http://www.strategy.nildram.co.uk/most.html&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MOST helps to clarify where the business intends to go (&lt;strong&gt;Mission&lt;/strong&gt;), they key goals which will help to achieve this (&lt;strong&gt;Objectives&lt;/strong&gt;), analyses what options there are for proceeding forward (&lt;strong&gt;Strategies&lt;/strong&gt;) and how these strategies are going to be put into action (&lt;strong&gt;Tactics&lt;/strong&gt;). &lt;/p&gt;
&lt;p&gt;The key is for this whole process to hang together from top to bottom and in reverse. From the top, clarifying the mission drives the objectives, which creates strategic options, which forces tactical actions. From the bottom, every action at tactical level should help to make the strategies work, all strategies should help to achieve the objectives, and all the objectives should take the business towards the mission.&lt;/p&gt;&lt;span style="FONT-SIZE:10pt;COLOR:black;FONT-FAMILY:&amp;#39;Arial&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;I like easy to remember heuristic acronyms.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;My three favorite acronyms are &lt;a class="" href="http://en.wikipedia.org/wiki/KISS_principle" target="_blank"&gt;KISS&lt;/a&gt;, &lt;a class="" href="http://en.wikipedia.org/wiki/You_Ain&amp;#39;t_Gonna_Need_It"&gt;YAGNI&lt;/a&gt; and &lt;a class="" href="http://en.wikipedia.org/wiki/BYOB"&gt;BYOB&lt;/a&gt;.&lt;/span&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=624" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>partial trust, permcalc, and caspol, OH MY!</title><link>http://drowningintechnicaldebt.com/blogs/royashbrook/archive/2008/07/18/partial-trust-permcalc-and-caspol-oh-my.aspx</link><pubDate>Fri, 18 Jul 2008 15:54:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:623</guid><dc:creator>royashbrook</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;
 
  Normal
  0
  
  
  
  
  false
  false
  false
  
  EN-US
  X-NONE
  X-NONE
  
   
   
   
   
   
   
   
   
   
   
   
  
  MicrosoftInternetExplorer4
  
   
   
   
   
   
   
   
   
   
   
   
  

 
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
 




 /* Style Definitions */
 table.MsoNormalTable
	{mso-style-name:&amp;quot;Table Normal&amp;quot;;
	mso-tstyle-rowband-size:0;
	mso-tstyle-colband-size:0;
	mso-style-noshow:yes;
	mso-style-priority:99;
	mso-style-qformat:yes;
	mso-style-parent:&amp;quot;&amp;quot;;
	mso-padding-alt:0in 5.4pt 0in 5.4pt;
	mso-para-margin:0in;
	mso-para-margin-bottom:.0001pt;
	mso-pagination:widow-orphan;
	font-size:11.0pt;
	font-family:&amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;;
	mso-ascii-font-family:Calibri;
	mso-ascii-theme-font:minor-latin;
	mso-fareast-font-family:&amp;quot;Times New Roman&amp;quot;;
	mso-fareast-theme-font:minor-fareast;
	mso-hansi-font-family:Calibri;
	mso-hansi-theme-font:minor-latin;
	mso-bidi-font-family:&amp;quot;Times New Roman&amp;quot;;
	mso-bidi-theme-font:minor-bidi;}



&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;System.Security.SecurityExceptions will always be … well some
kind of security problem ;) &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;Running .net exes over the network requires different .net
perms. You can see the perms an assembly requires using permcalc from the .net
sdk. It used to be called… I think permview.&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;You can run caspol –rs[g/p] %path to assembly% to see some info
on the permissions. G will show you the groups it belongs to in the gac, P will
list the permissions. &lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&lt;span style="font-size:11pt;font-family:&amp;#39;Calibri&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&lt;b&gt;&lt;span style="font-family:&amp;#39;Tahoma&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;From:&lt;/span&gt;&lt;/b&gt;&lt;span style="font-family:&amp;#39;Tahoma&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt; xxxxxxxxxxxxxxx&lt;br /&gt;
&lt;b&gt;Sent:&lt;/b&gt; Thursday, July 17, 2008 5:40 PM&lt;br /&gt;
&lt;b&gt;To:&lt;/b&gt; Ashbrook, Roy&lt;br /&gt;
&lt;b&gt;Subject:&lt;/b&gt; question&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Whats up roy… any idea why I’m getting this error xxxxxxxxxxxx&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Microsoft Windows XP [Version 5.1.2600]&lt;/p&gt;

&lt;p class="MsoNormal"&gt;(C) Copyright 1985-2001 Microsoft Corp.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;C:\WINNT&amp;gt;\\server\dotnetapp.exe&lt;a&gt;&lt;/a&gt;&lt;/p&gt;



&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;Unhandled Exception: System.Security.SecurityException: That
assembly does not a&lt;/p&gt;

&lt;p class="MsoNormal"&gt;llow partially trusted callers.&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp; at
System.Security.CodeAccessSecurityEngine.ThrowSecurityException(Assembly a&lt;/p&gt;

&lt;p class="MsoNormal"&gt;sm, PermissionSet granted, PermissionSet refused,
RuntimeMethodHandle rmh, Secur&lt;/p&gt;

&lt;p class="MsoNormal"&gt;ityAction action, Object demand, IPermission permThatFailed)&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&amp;nbsp; at ....&lt;span style="font-family:&amp;#39;Verdana&amp;#39;,&amp;#39;sans-serif&amp;#39;;"&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;

&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=623" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Crazy Architects</title><link>http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/2008/07/12/crazy-architects.aspx</link><pubDate>Sat, 12 Jul 2008 04:33:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:620</guid><dc:creator>David Strommer</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font size="2"&gt;Pest control is a constant battle especially if you live in Florida.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;A few months ago, while tending the lawn I noticed several ants.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I promptly called the pest control service.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;I learned later that the ants are known as crazy ants (&lt;/font&gt;&lt;a href="http://creatures.ifas.ufl.edu/urban/ants/crazy_ant.htm"&gt;&lt;font size="2"&gt;Paratrechina longicornis&lt;/font&gt;&lt;/a&gt;&lt;font size="2"&gt;) and common in Florida.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The name &amp;quot;crazy ant&amp;quot; arises from its characteristics of erratic, rapid movement and not following trails as often as other ants while foraging for food.&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font size="2"&gt;Similar to the characteristics of crazy ants, the term crazy architect describes an antipattern of enterprise architects.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;Instead of foraging for food, crazy architects forage for information in an erratic, rapid and seemingly irrational way.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;The crazy architect antipattern is typical of an architecture team that does not prescribe to an architectural framework and follow architecture processes.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;font size="2"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;font size="2"&gt;Are you a crazy architect?&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;If so, you are not alone.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Let’s face it; you have to be a bit crazy to be an architect.&lt;/font&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=620" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>A comprehensive analysis of BPM Suites</title><link>http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/2008/06/29/a-comprehensive-analysis-of-bpm-suites.aspx</link><pubDate>Sun, 29 Jun 2008 06:47:32 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:619</guid><dc:creator>David Strommer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;After months of tweaking and review, our coverage of IBM&amp;#39;s BPM technology offering is now live. It joins our coverage of &lt;a href="http://www.mwdadvisors.com/articles/detail.php?id=113"&gt;Appian&lt;/a&gt;, &lt;a href="http://www.mwdadvisors.com/articles/detail.php?id=108"&gt;BEA&lt;/a&gt; (we&amp;#39;re keeping an eye on this, of course, and will update it as soon as is practical), &lt;a href="http://www.mwdadvisors.com/articles/detail.php?id=109"&gt;Lombardi&lt;/a&gt;, &lt;a href="http://www.mwdadvisors.com/articles/detail.php?id=110"&gt;Software AG&lt;/a&gt; and &lt;a href="http://www.mwdadvisors.com/articles/detail.php?id=111"&gt;TIBCO&lt;/a&gt;.      &lt;br /&gt;We&amp;#39;ve been working on this assessment since the autumn of 2007: the delay is mostly due to the breadth of IBM&amp;#39;s portfolio (the assessment report runs to 33 pages, whereas most of the others come in around 20 pages) - combined with the fact that, just as we were about to finalise the report, IBM changed its portfolio positioning, introducing the &lt;a href="http://www-03.ibm.com/press/us/en/pressrelease/23821.wss"&gt;BPM Suite&lt;/a&gt;. Anyhow the effort has been worth it - we think the result is pretty comprehensive and definitely worth reading if you&amp;#39;re in the process of selecting a BPM technology vendor.      &lt;br /&gt;The IBM BPM assessment report is available as part of our &lt;a href="http://www.mwdadvisors.com/articles/detail.php?id=118"&gt;Guest Pass library, here&lt;/a&gt;; the detailed comparative scoring information, which you can personalise in line with your preferences and constraints, lives in the online vendor comparison tool that&amp;#39;s part of our &lt;a href="http://services.mwdadvisors.com/bpm/"&gt;BPM continuous advisory service&lt;/a&gt;. Although this service isn&amp;#39;t free, you can get a 7-day free trial, so you can use the tool now to see how IBM stacks up in the context of your own environment and preferences - &lt;a href="http://services.mwdadvisors.com/trial_request.php"&gt;just fill in this form&lt;/a&gt;.      &lt;br /&gt;Next up is Pegasystems - the assessment process is already underway.&lt;img src="http://feeds.feedburner.com/~r/ITbizalignment/~4/318928610" width="1" height="1" alt="" /&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://www.mwdadvisors.com/blog/" target="_blank"&gt;http://www.mwdadvisors.com/blog/&lt;/a&gt;&lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons  license.&lt;/a&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=619" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>INETA Champs Program</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/06/22/ineta-champs-program.aspx</link><pubDate>Sun, 22 Jun 2008 18:24:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:617</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;h3&gt;An XBox or MSDN Subscription to the 10 Most Active Contributors in the User Group Community each quarter.&lt;/h3&gt;
&lt;h5&gt;How?&amp;nbsp; By doing what you are doing already, you stand to win:&lt;/h5&gt;
&lt;h5&gt;a) Valuable Prizes: An MSDN Subscription.&amp;nbsp; And, if you already have one, you can choose an XBox instead.&lt;/h5&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;img height="210" alt="XBox" src="http://www.ineta.org/images/prizes/xbox.jpg" width="200" border="0" /&gt;&lt;img height="147" alt="MSDN Subscription" src="http://www.ineta.org/images/prizes/MSDNProf.jpg" width="144" border="0" /&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;h5&gt;b) The Fame and Prestige of having an award to hang on your wall that shows that &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; recognizes your contributions to the User Group Community.&lt;/h5&gt;
&lt;p&gt;&lt;img height="322" alt="Champion Award" src="http://www.ineta.org/images/prizes/ChampionFrameSmall.jpg" width="370" /&gt;&lt;/p&gt;
&lt;h5&gt;c) Official Recognition on the &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; Website&amp;nbsp; for one year. &lt;/h5&gt;
&lt;p&gt;All of your peers will be able to see that you stand out above the crowd. If the opportunity presents itself for you to show your dedication to the User Group Community in a public way, there is no better way than to show off your name highlighted on the website of a highly respected organization like &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt;. &lt;/p&gt;
&lt;h5&gt;d) A Badge for your website showing that you are a Community Champion.&lt;/h5&gt;
&lt;p&gt;When folks visit your website, blog or any other place where you publicly post your work, they will see that you are a Community Champion. &lt;/p&gt;
&lt;h3&gt;Oooohhhh. Recognition by &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt;? Valuable Prizes? An award to hang on my wall? A Badge?&amp;nbsp; How can I participate?&lt;/h3&gt;
&lt;p&gt;Well, I am glad that you asked.&lt;/p&gt;
&lt;p&gt;&lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; has long been known for it&amp;#39;s support of User Groups and this year, there are a number of great new programs supporting the User Group Community.&amp;nbsp; The &lt;a href="http://www.ineta.org/Champions/CommunityChampionInfo.aspx"&gt;Community Champs program&lt;/a&gt; is one of them.&amp;nbsp; &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; wants to recognize individuals who are demonstrating their involvement in the User Group community.&amp;nbsp; The program is aimed at rewarding those that are the most active with the prizes and award mentioned above.&amp;nbsp; It is &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt;&amp;#39;s way of recognizing the ones that really bring the community together.&amp;nbsp; So, in short, if you are the kind of person who helps to run user group meetings, codecamps, or helps out in any number of other ways, you should let &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; know the kind of activities that you are involved in.&amp;nbsp; If you are very active, you may be recognized by &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; in a very public and spectacular way for the activities that you currently do to help the user group community.&lt;/p&gt;
&lt;h3&gt;&lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; and Community-Credit are making it happen.&lt;/h3&gt;
&lt;p&gt;Community Credit has been helping to recognize fellow developers for the past number of years for their accomplishments and &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; has been the mainstay of User Groups for many years, so it is no surprise that the two would be working together to make this great program possible.&amp;nbsp; Best of all, the contributions that you record will also count toward Community Credit prizes, so you may even have a chance to be rewarded with a &lt;a href="http://www.community-credit.com/CommunityCreditPrizePage.aspx"&gt;Geeky, Community Credit prize&lt;/a&gt; as an added bonus.&lt;/p&gt;
&lt;h3&gt;How do I submit my contributions?&lt;/h3&gt;
&lt;p&gt;Visit the &lt;a href="http://www.ineta.org/"&gt;INETA&lt;/a&gt; website and go to the &lt;a href="http://www.ineta.org/Champions/CommunityChampionInfo.aspx"&gt;Champions section&lt;/a&gt;, sign in and let &lt;a title="INETA" href="http://www.ineta.org/" target="_blank" rel=""&gt;INETA&lt;/a&gt; know what you are doing by recording your contributions.&amp;nbsp; The current quarterly period counts for contributions during period of&amp;nbsp; June 30th, 2007 to June 30th, 2008.&amp;nbsp; The final submissions can be made until July 14th.&amp;nbsp; Keep in mind that the end of this current quarter is coming up pretty soon, so if you have been very active over the last year, be sure to enter them soon so that you don&amp;#39;t miss this great opportunity. &lt;/p&gt;
&lt;h3&gt;What are the benefits of participating?&lt;/h3&gt;
&lt;p&gt;If you are an individual who is always contributing to the User Group Community, you do it because you like it.&amp;nbsp; You don&amp;#39;t do it because you expect to be rewarded.&amp;nbsp; At the same time, if you just happen to be rewarded and recognized then that makes it that much better.&amp;nbsp; Imagine playing on an XBox that you received as a thanks for all of your hard work.&amp;nbsp; It makes the games just a little bit more fun.&amp;nbsp; Using your MSDN subscription that you &amp;quot;earned&amp;quot; makes the tools just a little bit better and seeing the award hanging on your wall is a reminder to you and your colleagues just how committed you are.&lt;/p&gt;
&lt;h3&gt;Can anybody participate?&lt;/h3&gt;
&lt;p&gt;Unfortunately, the current period (being our first) is for participants in North America only.&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=617" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Community/default.aspx">Community</category></item><item><title>File Type and IFILTER Reference For SharePoint Office Server 2007</title><link>http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/2008/06/18/file-type-and-ifilter-reference-for-sharepoint-office-server-2007.aspx</link><pubDate>Thu, 19 Jun 2008 02:11:14 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:616</guid><dc:creator>dbottjer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I see customers expressing more interest in is SharePoint Search.&amp;nbsp; Many clients are shocked to learn SharePoint has a powerful and very configurable search engine built in.&amp;nbsp; Search can crawl anything from network shares to public web sites.&amp;nbsp; Out of the box SharePoint supports the crawling and indexing of many file types which of course include Microsoft Office Documents.&amp;nbsp; However, SharePoint can be made aware of additional file types such as PDF&amp;#39;s and DWG&amp;#39;s. Furthermore, IFilters can be installed which allow search to index the content contained within files.&amp;nbsp; &lt;/p&gt; &lt;p&gt;For more information concerning supported file types and IFilters read this &lt;a href="http://technet.microsoft.com/en-us/library/cc179442(TechNet.10).aspx"&gt;Technet Article&lt;/a&gt;.&amp;nbsp; The article lists all default file types and commonly added file types.&amp;nbsp; There are also links to configuration instructions.&amp;nbsp; This is a good article to keep book marked as a reference.&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b320f8ce-a90b-48b8-b12f-475f7d30bf87" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint%20Office%20Server%202007" rel="tag"&gt;SharePoint Office Server 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MOSS%202007" rel="tag"&gt;MOSS 2007&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint%20Search" rel="tag"&gt;SharePoint Search&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MOSS%20Search" rel="tag"&gt;MOSS Search&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint%20File%20Types" rel="tag"&gt;SharePoint File Types&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint%20IFilters" rel="tag"&gt;SharePoint IFilters&lt;/a&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=616" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>Disposing of SharePoint Objects</title><link>http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/2008/06/18/disposing-of-sharepoint-objects.aspx</link><pubDate>Wed, 18 Jun 2008 04:09:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:615</guid><dc:creator>dbottjer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The .NET Framework allows developers to write &lt;strong&gt;&lt;em&gt;managed&lt;/em&gt;&lt;/strong&gt; code.&amp;nbsp; The term &lt;strong&gt;&lt;em&gt;managed&lt;/em&gt;&lt;/strong&gt; refers to how memory is handled by a computer system.&amp;nbsp; For example, C/C++ code is commonly known as &lt;strong&gt;&lt;em&gt;unmanaged&lt;/em&gt;&lt;/strong&gt; because developers must allocate and de-allocate memory.&amp;nbsp; In contrast, the .NET Framework provide a mechanism known as the &lt;strong&gt;&lt;em&gt;Garbage Collector (GC)&lt;/em&gt;&lt;/strong&gt; to de-allocate or collect object no longer in use.&lt;/p&gt;
&lt;p&gt;I have found it particularly helpful to consider SharePoint a very large ASP.NET Application.&amp;nbsp; If you can visualize SharePoint as an ASP.NET application it becomes familiar and relatable.&amp;nbsp; If you begin to deconstruct SharePoint you will notice that it is comprised of Active Server Pages (ASPX), Master Pages, Style Sheets (CSS), User Controls (ASCX), Server Controls, Web Services (ASMX), Handlers, etc.&amp;nbsp; All these artifacts are common to ASP.NET developers.&lt;/p&gt;
&lt;p&gt;SharePoint provides a rich API for developers to program against and extend this large &amp;quot;&lt;strong&gt;&lt;em&gt;ASP.NET Application&lt;/em&gt;&lt;/strong&gt;.&amp;quot;&amp;nbsp; Two object commonly used in SharePoint development are &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; Despite the names of these objects it must be understood that an &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; object represents a &lt;strong&gt;&lt;em&gt;site collection&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; While an &lt;strong&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;/strong&gt; object represent a &lt;strong&gt;&lt;em&gt;site&lt;/em&gt;&lt;/strong&gt; beneath a &lt;strong&gt;&lt;em&gt;site collection&lt;/em&gt;&lt;/strong&gt;.&amp;nbsp; Both of these object are managed wrappers of unmanaged code.&amp;nbsp; Furthermore, both of these object implement IDisposible.&amp;nbsp; So now for the million dollar question... When should you as a developer explicitly dispose of these object?&amp;nbsp; Well, the answer is, it depends.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;div style="BORDER-RIGHT:gray 1px solid;PADDING-RIGHT:4px;BORDER-TOP:gray 1px solid;PADDING-LEFT:4px;FONT-SIZE:8pt;PADDING-BOTTOM:4px;MARGIN:20px 0px 10px;OVERFLOW:auto;BORDER-LEFT:gray 1px solid;WIDTH:97.5%;CURSOR:text;MAX-HEIGHT:200px;LINE-HEIGHT:12pt;PADDING-TOP:4px;BORDER-BOTTOM:gray 1px solid;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BACKGROUND-COLOR:#f4f4f4;"&gt;
&lt;div style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:white;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   1:&lt;/span&gt; String title;&lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   2:&lt;/span&gt;&amp;nbsp; &lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:white;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt;(SPSite siteCollection = &lt;span style="COLOR:#0000ff;"&gt;new&lt;/span&gt; SPSite(&lt;span style="COLOR:#006080;"&gt;&amp;quot;http://mossdev&amp;quot;&lt;/span&gt;))&lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   4:&lt;/span&gt; {&lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:white;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   5:&lt;/span&gt;   &lt;span style="COLOR:#0000ff;"&gt;using&lt;/span&gt;(SPWeb site = siteCollection.OpenWeb())&lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   6:&lt;/span&gt;    {&lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:white;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   7:&lt;/span&gt;        title = site.Title;&lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:#f4f4f4;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   8:&lt;/span&gt;    }&lt;/pre&gt;&lt;pre style="PADDING-RIGHT:0px;PADDING-LEFT:0px;FONT-SIZE:8pt;PADDING-BOTTOM:0px;MARGIN:0em;OVERFLOW:visible;WIDTH:100%;COLOR:black;BORDER-TOP-STYLE:none;LINE-HEIGHT:12pt;PADDING-TOP:0px;FONT-FAMILY:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;BORDER-RIGHT-STYLE:none;BORDER-LEFT-STYLE:none;BACKGROUND-COLOR:white;BORDER-BOTTOM-STYLE:none;"&gt;&lt;span style="COLOR:#606060;"&gt;   9:&lt;/span&gt; }  &lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the example above we created a new &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;/strong&gt; object.&amp;nbsp; We explicitly created a new &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; object while we called the &lt;strong&gt;&lt;em&gt;OpenWeb()&lt;/em&gt;&lt;/strong&gt; method of &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; to return a new &lt;strong&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;/strong&gt; Object.&amp;nbsp; Since in effect we created new instances of both object we should dispose of both objects.&amp;nbsp;&amp;nbsp; Note that, wrapping the objects within a using statement will automatically dispose of that object when it is no longer needed.&amp;nbsp;&amp;nbsp; A good example of when not to dispose of an &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; or &lt;strong&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;/strong&gt; object is when a reference to an existing object is returned from a method call.&amp;nbsp; For example, the method call &lt;strong&gt;&lt;em&gt;SPControl.GetContextSite()&lt;/em&gt;&lt;/strong&gt; will return a reference to an &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; object we did not create therefore we should not dispose of this particular &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; object.&amp;nbsp; Disposing of this particular instance will crash current page and possibly the site.&lt;/p&gt;
&lt;p&gt;Disposing of SharePoint objects such as &lt;strong&gt;&lt;em&gt;SPSite&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;SPWeb&lt;/em&gt;&lt;/strong&gt; will free both managed and unmanaged resources as soon as possible which will increase system performance and scalability.&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:51797397-9d94-4bc7-bd69-fd571effa2a9" style="PADDING-RIGHT:0px;DISPLAY:inline;PADDING-LEFT:0px;PADDING-BOTTOM:0px;MARGIN:0px;PADDING-TOP:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/SharePoint%20Object%20Model" rel="tag"&gt;SharePoint Object Model&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SharePoint%20Object" rel="tag"&gt;SharePoint Object&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SPSite" rel="tag"&gt;SPSite&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SPWeb" rel="tag"&gt;SPWeb&lt;/a&gt;,&lt;a href="http://technorati.com/tags/Disposing%20of%20SharePoint%20Objects" rel="tag"&gt;Disposing of SharePoint Objects&lt;/a&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=615" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/tags/SharePoint/default.aspx">SharePoint</category></item><item><title>count lines with linq</title><link>http://drowningintechnicaldebt.com/blogs/royashbrook/archive/2008/06/11/count-lines-with-linq.aspx</link><pubDate>Wed, 11 Jun 2008 14:07:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:614</guid><dc:creator>royashbrook</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;so i needed to count the lines of a bunch of different filetypes in a folder. i decided to try using linq for this. here&amp;#39;s what i came up with. basically a single linq statement =P&lt;/p&gt;&lt;p&gt;you can tune the regex to taste. i just said (i think, i&amp;#39;m not a regex wizard) something that isn&amp;#39;t a newline (.+) and the line terminators i&amp;#39;m using (\r\n).&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;using System;&lt;br /&gt;using System.Collections;&lt;br /&gt;using System.IO;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text.RegularExpressions;&lt;br /&gt;&lt;br /&gt;namespace LineCounter&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; class LineCounter&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; static void Main(string[] args)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // dir to search&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string d = @&amp;quot;c:\pathtocode&amp;quot;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // regex match for newlines&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string lf = @&amp;quot;.+\r\n&amp;quot;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // get the file list with directory&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string[] f = Directory.GetFiles(d, &amp;quot;*.*&amp;quot;, SearchOption.AllDirectories);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // filter to only get these files&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string filter = &amp;quot;.cs,.resx,.sql,.htm,.html,.xml,.xsl,.xslt&amp;quot;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // count total lines&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int lines = (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; from name in f&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where filter.Contains(Path.GetExtension(name.ToLower()))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select new&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; length = Regex.Matches(&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; new StreamReader(name).ReadToEnd(), lf).Count&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ).Sum(a =&amp;gt; a.length);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // write out the total lines&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(lines);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.ReadLine();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=614" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/snippet/default.aspx">snippet</category></item><item><title>directory list with a stack instead of recursion</title><link>http://drowningintechnicaldebt.com/blogs/royashbrook/archive/2008/06/10/directory-list-with-a-stack-instead-of-recursion.aspx</link><pubDate>Tue, 10 Jun 2008 18:41:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:613</guid><dc:creator>royashbrook</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Stack q = new Stack();&lt;br /&gt;q.Push(argument);&lt;br /&gt;while (q.Count &amp;gt; 0)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; string d = q.Pop().ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console.WriteLine(d);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach (string sd in Directory.GetDirectories(d))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; q.Push(sd);&lt;br /&gt;} &lt;br /&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=613" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/snippet/default.aspx">snippet</category></item><item><title>Generics , Extension Methods, and  XML Serialization</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/06/05/generics-extension-methods-and-xml-serialization.aspx</link><pubDate>Thu, 05 Jun 2008 15:42:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:608</guid><dc:creator>sweisfeld</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;At the Jax SQL Saturday I was asked to turn a .NET object into an xml file and then reverse the process. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Step 1: Serialization with extension methods&lt;br /&gt;C# 3.0 comes with this cool feature called extension methods. This is syntactical sugar for static methods that allows for you to “add” methods to other objects. To write one of these write a static class with a static method that takes the type you want to extend as the first parameter. The only difference from what you would do normally is to add the keyword “this” before the first parameter. The beauty is that it feels very natural for developers to just type the variable name and press dot and they get your new method in the statement completion in VS. (BTW you can still call the method the way you would in C# 2.0) So with the method below we now have added a Serialize method to Object thus it is inherited everywhere in the entire object model!&lt;/p&gt;
&lt;p&gt;public static void Serialize(this object o, string filename)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Type t = o.GetType();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (t.IsSerializable)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer serializer = new XmlSerializer(t);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (TextWriter tw = new StreamWriter(filename))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; serializer.Serialize(tw, o);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tw.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new InvalidOperationException(string.Format(&amp;quot;Objects of type {0} are not serializable.&amp;quot;, t.Name));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Step 2: De-serialization with generics&lt;br /&gt;I like generics for the process of de-serializing, this allows my method to return a strongly typed copy of the object that was serialized to the file. &lt;/p&gt;
&lt;p&gt;public static T DeSerializeObject&amp;lt;T&amp;gt;(string filename)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; T t;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; XmlSerializer serializer = new XmlSerializer(typeof(T));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; using (TextReader tr = new StreamReader(filename))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = (T)serializer.Deserialize(tr);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; tr.Close();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return t;&lt;br /&gt;}&lt;/p&gt;
&lt;p&gt;Use the method like this:&lt;br /&gt;Serializer.DeSerializeObject&amp;lt;Customer&amp;gt;(&amp;quot;customer.xml&amp;quot;)&lt;/p&gt;
&lt;p&gt;Customer c = new Customer { FirstName = &amp;quot;Shawn&amp;quot;, LastName = &amp;quot;Weisfeld&amp;quot; };&lt;br /&gt;c.Serialize(&amp;quot;customer.xml&amp;quot;);&lt;br /&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=608" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category></item><item><title>C# 3.0 (.NET 3.5) Language Features &amp; Delegates</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/06/05/c-3-0-net-3-5-language-features-amp-delegates.aspx</link><pubDate>Thu, 05 Jun 2008 11:52:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:607</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Two more questions from the floor at TechEd. &lt;br /&gt;Perhaps the most frequent question at TechEd is “What are the new features of C# 3.0?” Here is the short list:&lt;br /&gt;•&amp;nbsp;Implicitly typed local variables&amp;nbsp;&lt;br /&gt;•&amp;nbsp;Extension methods&amp;nbsp;&lt;br /&gt;•&amp;nbsp;Lambda expressions&amp;nbsp;&lt;br /&gt;•&amp;nbsp;Object and collection initializers&amp;nbsp;&lt;br /&gt;•&amp;nbsp;Anonymous types&amp;nbsp;&lt;br /&gt;•&amp;nbsp;Implicitly typed arrays&amp;nbsp;&lt;br /&gt;•&amp;nbsp;Query expressions&amp;nbsp;&lt;br /&gt;•&amp;nbsp;Expression trees&amp;nbsp;&lt;br /&gt;Check out Anders presentation from last years TechEd here: &lt;a href="http://www.microsoft.com/emea/msdn/spotlight/sessionh.aspx?videoid=319"&gt;http://www.microsoft.com/emea/msdn/spotlight/sessionh.aspx?videoid=319&lt;/a&gt;&lt;br /&gt;And all the details in this word document:&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/5/8/6/5868081c-68aa-40de-9a45-a3803d8134b8/CSharp_3.0_Specification.doc"&gt;http://download.microsoft.com/download/5/8/6/5868081c-68aa-40de-9a45-a3803d8134b8/CSharp_3.0_Specification.doc&lt;/a&gt;&amp;nbsp;or this URL &lt;a href="http://msdn.microsoft.com/en-us/library/bb383815.aspx"&gt;http://msdn.microsoft.com/en-us/library/bb383815.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Also got a question about what a Delegate was. Here is the definition from the documentation. A delegate is a type that references a method. Once a delegate is assigned a method, it behaves exactly like that method. The delegate method can be invoked like any other method, with parameters and a return value. (&lt;a href="http://msdn.microsoft.com/en-us/library/ms173171.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms173171.aspx&lt;/a&gt;)&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=607" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category></item><item><title>REST Services and Metadata EndPoints in WCF</title><link>http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/2008/06/05/rest-services-and-metadata-endpoints-in-wcf.aspx</link><pubDate>Thu, 05 Jun 2008 04:26:02 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:606</guid><dc:creator>David Strommer</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a title="http://www.danrigsby.com/blog/index.php/2008/05/29/rest-services-and-metadata-endpoints-in-wcf/" href="http://www.danrigsby.com/blog/index.php/2008/05/29/rest-services-and-metadata-endpoints-in-wcf/"&gt;http://www.danrigsby.com/blog/index.php/2008/05/29/rest-services-and-metadata-endpoints-in-wcf/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Dan Rigsby posted an approach to exposing REST services metadata using mexHttpBinding.&amp;#160; &lt;/p&gt;&lt;div class="wlWriterHeaderFooter" style="margin:0px;padding:0px 0px 0px 0px;"&gt;This work is licensed under a &lt;a href="http://creativecommons.org/licenses/by/3.0/"&gt;Creative Commons  license.&lt;/a&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=606" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/tags/.Net/default.aspx">.Net</category></item><item><title>Silverlight Deep Zoom (aka SeaDragon)</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/06/04/silverlight-deep-zoom-aka-seadragon.aspx</link><pubDate>Wed, 04 Jun 2008 12:03:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:605</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;In my second in the series of TechEd Questions I have a good one. Unfortunately it had nothing to do with C#, but that doesn’t diminish its cool factor. &lt;/p&gt;
&lt;p&gt;The attendee, lets call her Suzie, volunteered to help organization working with an artist that recently passed away catalogue his work on the internet. She wanted a good way to post high resolution images on the web allowing the public to enjoy this persons artistic contribution. The first thing that jumped to mind with the Hard Rock Demo from Mix (&lt;a href="http://memorabilia.hardrock.com/"&gt;http://memorabilia.hardrock.com&lt;/a&gt;) you have got to check this out! You can see the scratches on the guitars. Scott Hanselman has a great blog post with a how to if you want to create your own deep zoom images (&lt;a href="http://www.hanselman.com/blog/DeepZoomSeadragonSilverlight2MultiScaleImagesAtMix.aspx"&gt;http://www.hanselman.com/blog/DeepZoomSeadragonSilverlight2MultiScaleImagesAtMix.aspx&lt;/a&gt;). Remember to note that this technology is only as good as the original image so you will need good HighRes images to start with.&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=605" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>Building a solution with many projects is SLOWWWWWWW</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/06/04/building-a-solution-with-many-projects-is-slowwwwwww.aspx</link><pubDate>Wed, 04 Jun 2008 11:47:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:604</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;This week I am attending TechEd in Orlando FL and I was honored to be requested to work the C# booth by the MVP and C# teams. I got many great questions from attendees and I thought I would post some of the more interesting ones. So here goes. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;An attendee, let’s call him Bob, came up and said that his builds were very slow. After some chatting Bob told me that he has a huge number of projects in his solution all “joined” together using project references. This is a convent feature of Visual Studio that provides for “cascading” builds. By that I mean if you change some code in a business library when VS does the build it will build that library first, copy the dll into any projects that reference it, then build those projects. This is very convent but as Bob noted when he changes one line of code in a method it causes the entire project to rebuild. This is not a big deal if the project is small and the builds are quick but if the project is large this could be a very painful experience. So we tossed around some things I would classify as workarounds like for example writing some post build steps that would move dll’s around and the like. But in my opinion the best solution is a properly architected solution. To that end I pointed Bob to an article put together by the P&amp;amp;P group at Microsoft that provides guidance for the architecture of large application with many projects and how to break them up into manageable chunks. &lt;br /&gt;&lt;/p&gt;
&lt;p&gt;Structuring Projects and Solutions &lt;br /&gt;&lt;a href="http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Chapter%203%20-%20Structuring%20Projects%20and%20Solutions%20in%20Source%20Control"&gt;http://www.codeplex.com/VSTSGuidance/Wiki/View.aspx?title=Chapter%203%20-%20Structuring%20Projects%20and%20Solutions%20in%20Source%20Control&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=604" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Architecture/default.aspx">Architecture</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/VB.NET/default.aspx">VB.NET</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/Microsoft/default.aspx">Microsoft</category></item><item><title>SQL Saturday Jax May 3 2008</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/05/02/sql-saturday-jax-may-3-2008.aspx</link><pubDate>Fri, 02 May 2008 15:50:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:602</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Tomorrow will be the long awaited third installment of SQL Saturday in Jacksonville FL. I want to thank Brian, Andy and the team for all their hard work putting the event together. If you attended my talk or just want to see some cool stuff about using the CLR in SQL Server check out my presentation (&lt;a href="http://cid-e6edc1213d79e105.skydrive.live.com/self.aspx/Public/2008_05_03_SQL_CLR.zip"&gt;http://cid-e6edc1213d79e105.skydrive.live.com/self.aspx/Public/2008_05_03_SQL_CLR.zip&lt;/a&gt;). &lt;br /&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=602" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Need to delete lots of data, do it in small chunks</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/04/25/need-to-delete-lots-of-data-do-it-in-small-chunks.aspx</link><pubDate>Fri, 25 Apr 2008 18:55:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:601</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>By adding a top clause to your delete statement you can delete a chunk of records at a time. By combining it with a while you can put it in a loop and wipe the entire table. &lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;WHILE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;EXISTS&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;SELECT&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#808080" size="2"&gt;*&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;FROM&lt;/font&gt;&lt;font size="2"&gt; Foo&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;BEGIN&lt;/p&gt;&lt;/font&gt;&lt;font size="2"&gt;
&lt;p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;DELETE&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;TOP&lt;/font&gt;&lt;font color="#808080" size="2"&gt;(&lt;/font&gt;&lt;font size="2"&gt;100&lt;/font&gt;&lt;font color="#808080" size="2"&gt;)&lt;/font&gt;&lt;font size="2"&gt; &lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;FROM&lt;/font&gt;&lt;font size="2"&gt; Foo&lt;/p&gt;&lt;/font&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;END&lt;/p&gt;&lt;/font&gt;
&lt;p&gt;Had someone send me an email telling me that it might be better to use a TRUNCATE TABLE command then this method, and in most cases this is preferable. Conversly not always do us &amp;quot;evil&amp;quot; developers get TRUNCATE permissions from our DBA&amp;#39;s. You can read more about TRUNCATE here (&lt;a href="http://msdn2.microsoft.com/en-us/library/aa260621.aspx"&gt;http://msdn2.microsoft.com/en-us/library/aa260621.aspx&lt;/a&gt;).&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=601" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Chage the colors on a button</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/04/25/chage-the-colors-on-a-button.aspx</link><pubDate>Fri, 25 Apr 2008 15:51:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:600</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Got a question from an attendee at the Orlando Launch Event, he wanted to know how to change the colors of a button from code (i.e. the click event). Both of these items are properties on the button and can be changed easily with the following code.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;button1.ForeColor = System.Drawing.Color.Blue;&lt;br /&gt;button1.BackColor = System.Drawing.Color.Yellow;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=600" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/C_2300_/default.aspx">C#</category><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/.NET/default.aspx">.NET</category></item><item><title>Forcing Windows Auth on WCF services</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/04/23/forcing-windows-auth-on-wcf-services.aspx</link><pubDate>Wed, 23 Apr 2008 13:26:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:598</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;At the last ONETUG meeting a question came up how to force WCF to use Windows Auth (i.e. Kerberos). By default WCF is in negotiate mode. While this is good for many cases where you cannot ensure that Kerberos will be available if you are in an intranet environment where you know it will be you can speed up your service by skipping the negotiation phase.&amp;nbsp; Matevz Gacnik has a good sample in his blog (&lt;a href="http://www.request-response.com/blog/PermaLink,guid,4b5f46cd-3c15-4213-9570-1a235c4a615e.aspx"&gt;http://www.request-response.com/blog/PermaLink,guid,4b5f46cd-3c15-4213-9570-1a235c4a615e.aspx&lt;/a&gt;) using certificates, the only change is to set the clientCredentialType to “Windows”.&lt;/p&gt;
&lt;p&gt;&amp;lt;bindings&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;wsHttpBinding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;binding name=&amp;quot;MySecureBinding&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;security mode =&amp;quot;Message&amp;quot;&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;message clientCredentialType=&amp;quot;Windows&amp;quot; negotiateServiceCredential=&amp;quot;false&amp;quot;/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/security&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/binding&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/wsHttpBinding&amp;gt;&lt;br /&gt;&amp;lt;/bindings&amp;gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=598" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/WCF/default.aspx">WCF</category></item><item><title>It Channel News: MVP Summit Interview</title><link>http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/2008/04/21/it-channel-news-mvp-summit-interview.aspx</link><pubDate>Tue, 22 Apr 2008 03:06:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:595</guid><dc:creator>dbottjer</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Last week I was in Redmond, WA from April 13th to April 18th attending the Microsoft MVP Global Summit.&amp;nbsp; This was my second year attending the event and it was quite amazing.&amp;nbsp; Some of the highlights included participating in Open Spaces Sessions and seeing both Ray Ozzie and Steve Ballmer speak.&amp;nbsp; Steve is quite energetic to say the least.&lt;/p&gt;
&lt;p&gt;A few days prior to the event I received a phone call from SearchITChannel.com&amp;#39;s, senior news editor, Barbara Darrow wanting to interview me about being an MVP and the up coming summit.&amp;nbsp; I was flattered by her call and took time to answer her questions.&amp;nbsp; On Monday the 14th she sent me this link &lt;a title="http://searchitchannel.techtarget.com/news/article/0,289142,sid96_gci1309724,00.html" href="http://searchitchannel.techtarget.com/news/article/0,289142,sid96_gci1309724,00.html"&gt;http://searchitchannel.techtarget.com/news/article/0,289142,sid96_gci1309724,00.html&lt;/a&gt; to her story in which I am quoted.&amp;nbsp; The story includes quotes from several fellow MVP&amp;#39;s including Shane Young.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;I have really enjoyed attending the MVP summit twice now because it is an opportunity for MVP&amp;#39;s to give Microsoft direct product feedback and boy do we.&amp;nbsp; The event is also a great opportunity to network with other MVP&amp;#39;s and Microsoft Employees.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:9c324048-63b9-4b54-bc58-625c8309fb06" style="PADDING-RIGHT:0px;DISPLAY:inline;PADDING-LEFT:0px;PADDING-BOTTOM:0px;MARGIN:0px;PADDING-TOP:0px;"&gt;Technorati Tags: &lt;a href="http://technorati.com/tags/MVP" rel="tag"&gt;MVP&lt;/a&gt;,&lt;a href="http://technorati.com/tags/MVP%20SUMMIT" rel="tag"&gt;MVP SUMMIT&lt;/a&gt;,&lt;a href="http://technorati.com/tags/SearchITChannel" rel="tag"&gt;SearchITChannel&lt;/a&gt;&lt;/div&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=595" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/tags/News/default.aspx">News</category><category domain="http://drowningintechnicaldebt.com/blogs/dennisbottjer/archive/tags/Community/default.aspx">Community</category></item><item><title>Drop Me!</title><link>http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/2008/04/12/drop-me.aspx</link><pubDate>Sat, 12 Apr 2008 22:03:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:594</guid><dc:creator>sweisfeld</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I was trying to get rid of all the objects (tables, procedures, views) in my database and whipped up this little script and while it is far from perfect it is well worth sharing. . . &lt;/p&gt;
&lt;p&gt;SELECT &lt;br /&gt;&amp;nbsp;CASE WHEN type = &amp;#39;P&amp;#39; THEN &amp;#39;DROP PROCEDURE &amp;#39; + name &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN type = &amp;#39;U&amp;#39; THEN &amp;#39;DROP TABLE &amp;#39; + name&lt;br /&gt;&amp;nbsp;&amp;nbsp; WHEN type = &amp;#39;V&amp;#39; THEN &amp;#39;DROP VIEW &amp;#39; + name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHEN type = &amp;#39;FN&amp;#39; THEN &amp;#39;DROP FUNCTION &amp;#39; + name&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ELSE &amp;#39;&amp;#39; END AS dropSQL, * &lt;br /&gt;FROM sys.objects &lt;br /&gt;WHERE type != &amp;#39;S&amp;#39; AND type != &amp;#39;IT&amp;#39; AND type != &amp;#39;SQ&amp;#39;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=594" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/shawnweisfeld/archive/tags/SQL/default.aspx">SQL</category></item><item><title>Free book samples from MS Press</title><link>http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/2008/03/26/free-book-samples-from-ms-press.aspx</link><pubDate>Wed, 26 Mar 2008 20:23:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:593</guid><dc:creator>David Strommer</dc:creator><slash:comments>0</slash:comments><description>&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Linq&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Ajax&lt;/font&gt;&lt;/p&gt;
&lt;p class="MsoListParagraph" style="MARGIN:0in 0in 0pt 0.5in;TEXT-INDENT:-0.25in;mso-list:l0 level1 lfo1;"&gt;&lt;span style="FONT-FAMILY:Symbol;mso-fareast-font-family:Symbol;mso-bidi-font-family:Symbol;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;font size="3"&gt;·&lt;/font&gt;&lt;span style="FONT:7pt &amp;#39;Times New Roman&amp;#39;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;font face="Calibri" size="3"&gt;Silverlight&lt;/font&gt;&lt;/p&gt;&lt;font face="Calibri" size="3"&gt;&amp;nbsp;&lt;/font&gt; 
&lt;p class="MsoNormal" style="MARGIN:0in 0in 0pt;"&gt;&lt;a href="http://csna01.libredigital.com/"&gt;&lt;font face="Calibri" color="#800080" size="3"&gt;http://csna01.libredigital.com/&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=593" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/davidstrommer/archive/tags/.Net/default.aspx">.Net</category></item><item><title>how can i get some performance statistics on my stored procedures in sql2005?</title><link>http://drowningintechnicaldebt.com/blogs/royashbrook/archive/2008/03/21/how-can-i-get-some-performance-statistics-on-my-stored-procedures-in-sql2005.aspx</link><pubDate>Fri, 21 Mar 2008 20:57:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:591</guid><dc:creator>royashbrook</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;select&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; case when dbid = 32767&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; then &amp;#39;resource&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else db_name(dbid)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; end [db_name]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , object_schema_name(objectid,dbid) [schema_name]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , object_name(objectid,dbid) [object_name]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , sum(usecounts) [executions]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , max(max_execution_time) [last_execution_time]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , sum(total_logical_reads) [total_logical_reads]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , sum(total_logical_reads) / sum(usecounts) * 1.0 [avg_logical_reads]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , sum(total_elapsed_time) / 1000 [total_elapsed_time_ms]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , ( sum(total_elapsed_time) / sum(usecounts) * 1.0 ) / 1000 [avg_elapsed_time_ms]&lt;br /&gt;from&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.dm_exec_cached_plans cp&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cross apply sys.dm_exec_sql_text(cp.plan_handle) qt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; join (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; select&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; plan_handle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , max(last_execution_time) [max_execution_time]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , sum(total_elapsed_time) [total_elapsed_time]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; , sum(total_logical_reads) [total_logical_reads]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; from&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; sys.dm_exec_query_stats&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; group by&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; plan_handle&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; ) r on r.plan_handle = cp.plan_handle&lt;br /&gt;where&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; objtype = &amp;#39;Proc&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and qt.text LIKE &amp;#39;%create%proc%&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --and db_name(dbid) = &amp;#39;some_database&amp;#39;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; --and object_name(objectid,dbid) = &amp;#39;some_stored_procedure&amp;#39;&lt;br /&gt;group by&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dbid, objectid&lt;br /&gt;order by&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; db_name(dbid), object_name(objectid,dbid) &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;thanks to &lt;a href="http://www.sql-server-performance.com/articles/per/Monitor_Stored_Procedure_Performance_p1.aspx"&gt;this&lt;/a&gt; article for the inspiration. &lt;br /&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=591" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/sql/default.aspx">sql</category><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/snippet/default.aspx">snippet</category></item><item><title>SQL Server 2005 Emergency Diagnostic and Performance Queries</title><link>http://drowningintechnicaldebt.com/blogs/royashbrook/archive/2008/03/21/sql-server-2005-emergency-diagnostic-and-performance-queries.aspx</link><pubDate>Fri, 21 Mar 2008 19:19:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:590</guid><dc:creator>royashbrook</dc:creator><slash:comments>0</slash:comments><description>&lt;pre&gt;Great useful base diag scripts! Snipped from http://glennberrysqlperformance.spaces.live.com/blog/cns!45041418ECCAA960!893.entry &lt;br /&gt;&lt;/pre&gt;&lt;pre&gt;&lt;span&gt;-- SQL Server 2005 Emergency Diagnostic and Performance Queries&lt;br /&gt;-- Glenn Berry 3-17-2008&lt;br /&gt;&lt;/span&gt;      &lt;br /&gt;&lt;br /&gt;&lt;span&gt;-- Step 1 - Check Task Manager. Are all CPUs above 90-95% for an extended period of time?&lt;br /&gt;-- If yes, run HIGH CPU queries below:&lt;br /&gt;&lt;br /&gt;-- Step 2 - Check Performance Monitor&lt;br /&gt;-- SQL Server Buffer Manager: Buffer Cache Hit Ratio and Page Life Expectancy&lt;br /&gt;-- SQL Server Memory Manager: Memory Grants Pending and Memory Grants Pending&lt;br /&gt;-- Physical Disk: Avg disk sec/Read and Avg disk sec/Write&lt;br /&gt;&lt;br /&gt;-- Step 3 - Check for locking, blocking and missing indexes&lt;br /&gt;-- Run the BLOCKING queries below: &lt;br /&gt;&lt;br /&gt;-- Step 4 - Is the transaction log full?&lt;br /&gt;-- Run the TRANSACTION LOG FULL queries below:&lt;br /&gt;&lt;br /&gt;-- Step 5 - Check for IO Problems&lt;br /&gt;-- Run the IO ISSUES queries below&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;-- HIGH CPU *******&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;-- Get the most CPU intensive queries&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;SET&lt;/span&gt; &lt;span&gt;NOCOUNT&lt;/span&gt; &lt;span&gt;ON&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;DECLARE&lt;/span&gt; @SpID &lt;span&gt;smallint&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;DECLARE&lt;/span&gt; spID_Cursor &lt;span&gt;CURSOR&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;FAST_FORWARD&lt;/span&gt; &lt;span&gt;FOR&lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;    &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;TOP&lt;/span&gt; 25 spid&lt;br /&gt;    &lt;span&gt;FROM&lt;/span&gt; master&lt;span&gt;..&lt;/span&gt;sysprocesses&lt;br /&gt;    &lt;span&gt;WHERE&lt;/span&gt; &lt;span&gt;status&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;&amp;#39;runnable&amp;#39;&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;AND&lt;/span&gt; spid &lt;span&gt;&amp;gt;&lt;/span&gt; 50   &lt;span&gt;-- Eliminate system SPIDs&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;AND&lt;/span&gt; spid &lt;span&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span&gt;@@SPID&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; CPU &lt;span&gt;DESC&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;OPEN&lt;/span&gt; spID_Cursor&lt;br /&gt;&lt;br /&gt;    &lt;span&gt;FETCH&lt;/span&gt; &lt;span&gt;NEXT&lt;/span&gt; &lt;span&gt;FROM&lt;/span&gt; spID_Cursor&lt;br /&gt;    &lt;span&gt;INTO&lt;/span&gt; @spID&lt;br /&gt;        &lt;span&gt;WHILE&lt;/span&gt; &lt;span&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; 0&lt;br /&gt;        &lt;span&gt;BEGIN&lt;br /&gt;&lt;/span&gt;            &lt;span&gt;PRINT&lt;/span&gt; &lt;span&gt;&amp;#39;Spid #:&amp;#39;&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; &lt;span&gt;STR&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;@spID&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;            &lt;span&gt;EXEC&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;&lt;span&gt;&amp;#39;DBCC INPUTBUFFER (&amp;#39;&lt;/span&gt; &lt;span&gt;+&lt;/span&gt; @spID &lt;span&gt;+&lt;/span&gt; &lt;span&gt;&amp;#39;)&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;               &lt;span&gt;FETCH&lt;/span&gt; &lt;span&gt;NEXT&lt;/span&gt; &lt;span&gt;FROM&lt;/span&gt; spID_Cursor&lt;br /&gt;            &lt;span&gt;INTO&lt;/span&gt; @spID&lt;br /&gt;        &lt;span&gt;END&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;-- Close and deallocate the cursor&lt;br /&gt;&lt;/span&gt;    &lt;span&gt;CLOSE&lt;/span&gt; spID_Cursor&lt;br /&gt;    &lt;span&gt;DEALLOCATE&lt;/span&gt; spID_Cursor&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      &lt;span&gt;-- HIGH CPU *******&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Isolate top waits for server instance&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;WITH&lt;/span&gt; Waits &lt;span&gt;AS&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;(&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;SELECT&lt;br /&gt;&lt;/span&gt;            wait_type&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;            wait_time_ms &lt;span&gt;/&lt;/span&gt; 1000. &lt;span&gt;AS&lt;/span&gt; wait_time_s&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;            100. &lt;span&gt;*&lt;/span&gt; wait_time_ms &lt;span&gt;/&lt;/span&gt; &lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;wait_time_ms&lt;span&gt;)&lt;/span&gt; &lt;span&gt;OVER&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; pct&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;            &lt;span&gt;ROW_NUMBER&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; &lt;span&gt;OVER&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; wait_time_ms &lt;span&gt;DESC&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; rn&lt;br /&gt;        &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_os_wait_stats&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;WHERE&lt;/span&gt; wait_type &lt;span&gt;NOT&lt;/span&gt; &lt;span&gt;LIKE&lt;/span&gt; &lt;span&gt;&amp;#39;%SLEEP%&amp;#39;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;)&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;br /&gt;&lt;/span&gt;        W1&lt;span&gt;.&lt;/span&gt;wait_type&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;        &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;W1&lt;span&gt;.&lt;/span&gt;wait_time_s &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;12&lt;span&gt;,&lt;/span&gt; 2&lt;span&gt;))&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; wait_time_s&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;W1&lt;span&gt;.&lt;/span&gt;pct &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;12&lt;span&gt;,&lt;/span&gt; 2&lt;span&gt;))&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; pct&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;W2&lt;span&gt;.&lt;/span&gt;pct&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;12&lt;span&gt;,&lt;/span&gt; 2&lt;span&gt;))&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; running_pct&lt;br /&gt;      &lt;span&gt;FROM&lt;/span&gt; Waits &lt;span&gt;AS&lt;/span&gt; W1&lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; Waits &lt;span&gt;AS&lt;/span&gt; W2&lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; W2&lt;span&gt;.&lt;/span&gt;rn &lt;span&gt;&amp;lt;=&lt;/span&gt; W1&lt;span&gt;.&lt;/span&gt;rn&lt;br /&gt;      &lt;span&gt;GROUP&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; W1&lt;span&gt;.&lt;/span&gt;rn&lt;span&gt;,&lt;/span&gt; W1&lt;span&gt;.&lt;/span&gt;wait_type&lt;span&gt;,&lt;/span&gt; W1&lt;span&gt;.&lt;/span&gt;wait_time_s&lt;span&gt;,&lt;/span&gt; W1&lt;span&gt;.&lt;/span&gt;pct&lt;br /&gt;      &lt;span&gt;HAVING&lt;/span&gt; &lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;W2&lt;span&gt;.&lt;/span&gt;pct&lt;span&gt;)&lt;/span&gt; &lt;span&gt;-&lt;/span&gt; W1&lt;span&gt;.&lt;/span&gt;pct &lt;span&gt;&amp;lt;&lt;/span&gt; 90 &lt;span&gt;-- percentage threshold&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; W1&lt;span&gt;.&lt;/span&gt;rn&lt;span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- HIGH CPU *******&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Total waits are wait_time_ms (high signal waits indicates CPU pressure)&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;&amp;#39;%signal (cpu) waits&amp;#39;&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;100.0 &lt;span&gt;*&lt;/span&gt; &lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;signal_wait_time_ms&lt;span&gt;)&lt;/span&gt; &lt;span&gt;/&lt;/span&gt; &lt;span&gt;SUM&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;wait_time_ms&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;NUMERIC&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;20&lt;span&gt;,&lt;/span&gt;2&lt;span&gt;)),&lt;br /&gt;&lt;/span&gt;           &lt;span&gt;&amp;#39;%resource waits&amp;#39;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt; &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;100.0 &lt;span&gt;*&lt;/span&gt; &lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;wait_time_ms &lt;span&gt;-&lt;/span&gt; signal_wait_time_ms&lt;span&gt;)&lt;/span&gt; &lt;span&gt;/&lt;/span&gt; &lt;span&gt;SUM&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;wait_time_ms&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;NUMERIC&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;20&lt;span&gt;,&lt;/span&gt;2&lt;span&gt;))&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_os_wait_stats&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- HIGH CPU *******&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Check SQL Server Schedulers to see if they are waiting on CPU (runnable tasks above 10 is very bad)&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; scheduler_id&lt;span&gt;,&lt;/span&gt; current_tasks_count&lt;span&gt;,&lt;/span&gt; runnable_tasks_count&lt;br /&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_os_schedulers&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;WHERE&lt;/span&gt; scheduler_id &lt;span&gt;&amp;lt;&lt;/span&gt; 255&lt;br /&gt;&lt;br /&gt;      &lt;span&gt;-- HIGH CPU *******&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;--  Who is running what at this instant &lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; st&lt;span&gt;.&lt;/span&gt;text &lt;span&gt;AS&lt;/span&gt; [Command text]&lt;span&gt;,&lt;/span&gt; login_time&lt;span&gt;,&lt;/span&gt; [host_name]&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;      [program_name]&lt;span&gt;,&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;session_id&lt;span&gt;,&lt;/span&gt; client_net_address&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;sys.dm_exec_requests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;status&lt;span&gt;,&lt;/span&gt; command&lt;span&gt;,&lt;/span&gt; &lt;span&gt;db_name&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;database_id&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; DatabaseName&lt;br /&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt; &lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.dm_exec_connections&lt;/span&gt; &lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;=&lt;/span&gt; &lt;span&gt;sys.dm_exec_connections&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;session_id&lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.dm_exec_sessions&lt;/span&gt; &lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; &lt;span&gt;sys.dm_exec_sessions&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;=&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;session_id&lt;br /&gt;      &lt;span&gt;CROSS&lt;/span&gt; &lt;span&gt;APPLY&lt;/span&gt; sys.dm_exec_sql_text&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sql_handle&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; st&lt;br /&gt;      &lt;span&gt;WHERE&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;&amp;gt;=&lt;/span&gt; 51&lt;br /&gt;      &lt;span&gt;AND&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span&gt;@@spid&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt;&lt;span&gt;.&lt;/span&gt;status&lt;br /&gt;&lt;br /&gt;      &lt;span&gt;-- HIGH CPU *******&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Get a snapshot of current activity&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;LTRIM&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;st&lt;span&gt;.&lt;/span&gt;text&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Command Text&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;[host_name]&lt;span&gt;,&lt;/span&gt; der&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;SPID&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      der&lt;span&gt;.&lt;/span&gt;status&lt;span&gt;,&lt;/span&gt; &lt;span&gt;db_name&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;database_id&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; DatabaseName&lt;span&gt;,&lt;/span&gt; &lt;span&gt;ISNULL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;der&lt;span&gt;.&lt;/span&gt;wait_type&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&amp;#39;None&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt;&lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Wait Type&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; der&lt;span&gt;.&lt;/span&gt;logical_reads &lt;br /&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; der&lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.dm_exec_connections&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; dexc&lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; der&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;=&lt;/span&gt; dexc&lt;span&gt;.&lt;/span&gt;session_id&lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.dm_exec_sessions&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; dexs&lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; dexs&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;=&lt;/span&gt; der&lt;span&gt;.&lt;/span&gt;session_id&lt;br /&gt;      &lt;span&gt;CROSS&lt;/span&gt; &lt;span&gt;APPLY&lt;/span&gt; sys.dm_exec_sql_text&lt;span&gt;(&lt;/span&gt;&lt;span&gt;sql_handle&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; st&lt;br /&gt;      &lt;span&gt;WHERE&lt;/span&gt; der&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;&amp;gt;=&lt;/span&gt; 51&lt;br /&gt;      &lt;span&gt;AND&lt;/span&gt; der&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;&amp;lt;&amp;gt;&lt;/span&gt; &lt;span&gt;@@spid&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; der&lt;span&gt;.&lt;/span&gt;status&lt;br /&gt;&lt;br /&gt;      &lt;span&gt;-- BLOCKING ************&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Detect blocking&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; blocked_query&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;AS&lt;/span&gt; blocked_session_id&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      blocking_query&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;AS&lt;/span&gt; blocking_session_id&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      sql_text&lt;span&gt;.&lt;/span&gt;text &lt;span&gt;AS&lt;/span&gt; blocked_text&lt;span&gt;,&lt;/span&gt; sql_btext&lt;span&gt;.&lt;/span&gt;text &lt;span&gt;AS&lt;/span&gt; blocking_text&lt;span&gt;,&lt;/span&gt; waits&lt;span&gt;.&lt;/span&gt;wait_type &lt;span&gt;AS&lt;/span&gt; blocking_resource&lt;br /&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; blocked_query&lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.dm_exec_requests&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; blocking_query &lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; blocked_query&lt;span&gt;.&lt;/span&gt;blocking_session_id &lt;span&gt;=&lt;/span&gt; blocking_query&lt;span&gt;.&lt;/span&gt;session_id&lt;br /&gt;      &lt;span&gt;CROSS&lt;/span&gt; &lt;span&gt;APPLY&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;(&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;FROM&lt;/span&gt; sys.dm_exec_sql_text&lt;span&gt;(&lt;/span&gt;blocking_query&lt;span&gt;.&lt;/span&gt;sql_handle&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;)&lt;/span&gt; sql_btext&lt;br /&gt;      &lt;span&gt;CROSS&lt;/span&gt; &lt;span&gt;APPLY&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;(&lt;/span&gt;&lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;*&lt;/span&gt; &lt;span&gt;FROM&lt;/span&gt; sys.dm_exec_sql_text&lt;span&gt;(&lt;/span&gt;blocked_query&lt;span&gt;.&lt;/span&gt;sql_handle&lt;span&gt;)&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;)&lt;/span&gt; sql_text&lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.dm_os_waiting_tasks&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; waits &lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; waits&lt;span&gt;.&lt;/span&gt;session_id &lt;span&gt;=&lt;/span&gt; blocking_query&lt;span&gt;.&lt;/span&gt;session_id&lt;br /&gt;&lt;br /&gt;      &lt;span&gt;-- BLOCKING ************&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Index Contention&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;dbid&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;database_id&lt;span&gt;,&lt;/span&gt; objectname&lt;span&gt;=&lt;/span&gt;&lt;span&gt;object_name&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;s&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object_id&lt;/span&gt;&lt;span&gt;),&lt;br /&gt;&lt;/span&gt;      indexname&lt;span&gt;=&lt;/span&gt;i&lt;span&gt;.&lt;/span&gt;name&lt;span&gt;,&lt;/span&gt; i&lt;span&gt;.&lt;/span&gt;index_id&lt;span&gt;,&lt;/span&gt; row_lock_count&lt;span&gt;,&lt;/span&gt; row_lock_wait_count&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      [block %]&lt;span&gt;=&lt;/span&gt; &lt;span&gt;CAST&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;100.0 &lt;span&gt;*&lt;/span&gt; row_lock_wait_count &lt;span&gt;/&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;1 &lt;span&gt;+&lt;/span&gt; row_lock_count&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;NUMERIC&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;15&lt;span&gt;,&lt;/span&gt;2&lt;span&gt;)),&lt;br /&gt;&lt;/span&gt;      row_lock_wait_in_ms&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      [avg row lock waits in ms]&lt;span&gt;=&lt;/span&gt; &lt;span&gt;CAST&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;1.0 &lt;span&gt;*&lt;/span&gt; row_lock_wait_in_ms &lt;span&gt;/&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;1 &lt;span&gt;+&lt;/span&gt; row_lock_wait_count&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;NUMERIC&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;15&lt;span&gt;,&lt;/span&gt;2&lt;span&gt;))&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;FROM&lt;/span&gt; sys.dm_db_index_operational_stats &lt;span&gt;(&lt;/span&gt;&lt;span&gt;db_id&lt;/span&gt;&lt;span&gt;(),&lt;/span&gt; &lt;span&gt;NULL,&lt;/span&gt; &lt;span&gt;NULL,&lt;/span&gt; &lt;span&gt;NULL)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; s&lt;br /&gt;      &lt;span&gt;INNER&lt;/span&gt; &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.indexes&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; i&lt;br /&gt;      &lt;span&gt;ON&lt;/span&gt; i&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object_id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; s&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object_id&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;WHERE&lt;/span&gt; &lt;span&gt;objectproperty&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;s&lt;span&gt;.&lt;/span&gt;&lt;span&gt;object_id&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&amp;#39;IsUserTable&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; 1&lt;br /&gt;      &lt;span&gt;AND&lt;/span&gt; i&lt;span&gt;.&lt;/span&gt;index_id &lt;span&gt;=&lt;/span&gt; s&lt;span&gt;.&lt;/span&gt;index_id&lt;br /&gt;      &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; row_lock_wait_count &lt;span&gt;DESC&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- TRANSACTION LOG FULL *****&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Find the log reuse description for the transaction log&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; database_id&lt;span&gt;,&lt;/span&gt; log_reuse_wait_desc &lt;br /&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.databases&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- TRANSACTION LOG FULL *****&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Individual File Size query&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;name&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;File Name&amp;#39;&lt;/span&gt; &lt;span&gt;,&lt;/span&gt; physical_name &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Physical Name&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;size&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;128 &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Total Size in MB&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;size&lt;/span&gt;&lt;span&gt;/&lt;/span&gt;128.0 &lt;span&gt;-&lt;/span&gt; &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;FILEPROPERTY&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;name&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;span&gt;&amp;#39;SpaceUsed&amp;#39;&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;int&lt;/span&gt;&lt;span&gt;)/&lt;/span&gt;128.0 &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Available Space In MB&amp;#39;&lt;/span&gt;&lt;span&gt;--, *&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.database_files&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- IO ISSUES *****************&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Analyze DB IO, ranked by IO Stall %&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;WITH&lt;/span&gt; DBIO &lt;span&gt;AS&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;(&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;SELECT&lt;br /&gt;&lt;/span&gt;            &lt;span&gt;DB_NAME&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;IVFS&lt;span&gt;.&lt;/span&gt;database_id&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; db&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;            &lt;span&gt;CASE&lt;/span&gt; &lt;span&gt;WHEN&lt;/span&gt; MF&lt;span&gt;.&lt;/span&gt;type &lt;span&gt;=&lt;/span&gt; 1 &lt;span&gt;THEN&lt;/span&gt; &lt;span&gt;&amp;#39;log&amp;#39;&lt;/span&gt; &lt;span&gt;ELSE&lt;/span&gt; &lt;span&gt;&amp;#39;data&amp;#39;&lt;/span&gt; &lt;span&gt;END&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; file_type&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;            &lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;IVFS&lt;span&gt;.&lt;/span&gt;num_of_bytes_read &lt;span&gt;+&lt;/span&gt; IVFS&lt;span&gt;.&lt;/span&gt;num_of_bytes_written&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;io&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;            &lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;IVFS&lt;span&gt;.&lt;/span&gt;io_stall&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; io_stall&lt;br /&gt;        &lt;span&gt;FROM&lt;/span&gt; sys.dm_io_virtual_file_stats&lt;span&gt;(NULL,&lt;/span&gt; &lt;span&gt;NULL)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; IVFS&lt;br /&gt;            &lt;span&gt;JOIN&lt;/span&gt; &lt;span&gt;sys.master_files&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; MF&lt;br /&gt;              &lt;span&gt;ON&lt;/span&gt; IVFS&lt;span&gt;.&lt;/span&gt;database_id &lt;span&gt;=&lt;/span&gt; MF&lt;span&gt;.&lt;/span&gt;database_id&lt;br /&gt;              &lt;span&gt;AND&lt;/span&gt; IVFS&lt;span&gt;.&lt;/span&gt;&lt;span&gt;file_id&lt;/span&gt; &lt;span&gt;=&lt;/span&gt; MF&lt;span&gt;.&lt;/span&gt;&lt;span&gt;file_id&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;GROUP&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; &lt;span&gt;DB_NAME&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;IVFS&lt;span&gt;.&lt;/span&gt;database_id&lt;span&gt;),&lt;/span&gt; MF&lt;span&gt;.&lt;/span&gt;type&lt;br /&gt;      &lt;span&gt;)&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; db&lt;span&gt;,&lt;/span&gt; file_type&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;        &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;1. &lt;span&gt;*&lt;/span&gt; &lt;span&gt;io&lt;/span&gt; &lt;span&gt;/&lt;/span&gt; &lt;span&gt;(&lt;/span&gt;1024 &lt;span&gt;*&lt;/span&gt; 1024&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;12&lt;span&gt;,&lt;/span&gt; 2&lt;span&gt;))&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; io_mb&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;io_stall &lt;span&gt;/&lt;/span&gt; 1000. &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;12&lt;span&gt;,&lt;/span&gt; 2&lt;span&gt;))&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; io_stall_s&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;CAST&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;100. &lt;span&gt;*&lt;/span&gt; io_stall &lt;span&gt;/&lt;/span&gt; &lt;span&gt;SUM&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;io_stall&lt;span&gt;)&lt;/span&gt; &lt;span&gt;OVER&lt;/span&gt;&lt;span&gt;()&lt;br /&gt;&lt;/span&gt;               &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;DECIMAL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;10&lt;span&gt;,&lt;/span&gt; 2&lt;span&gt;))&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; io_stall_pct&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;        &lt;span&gt;ROW_NUMBER&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; &lt;span&gt;OVER&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; io_stall &lt;span&gt;DESC&lt;/span&gt;&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; rn&lt;br /&gt;      &lt;span&gt;FROM&lt;/span&gt; DBIO&lt;br /&gt;      &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; io_stall &lt;span&gt;DESC&lt;/span&gt;&lt;span&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- HIGH CPU ************&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Get Top 100 executed SP&amp;#39;s ordered by execution count&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;TOP&lt;/span&gt; 100 qt&lt;span&gt;.&lt;/span&gt;text &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;SP Name&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;execution_count &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Execution Count&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;  &lt;br /&gt;      qs&lt;span&gt;.&lt;/span&gt;execution_count&lt;span&gt;/&lt;/span&gt;&lt;span&gt;DATEDIFF&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Second&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;creation_time&lt;span&gt;,&lt;/span&gt; &lt;span&gt;GetDate&lt;/span&gt;&lt;span&gt;())&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Calls/Second&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      qs&lt;span&gt;.&lt;/span&gt;total_worker_time&lt;span&gt;/&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;execution_count &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;AvgWorkerTime&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      qs&lt;span&gt;.&lt;/span&gt;total_worker_time &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;TotalWorkerTime&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      qs&lt;span&gt;.&lt;/span&gt;total_elapsed_time&lt;span&gt;/&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;execution_count &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;AvgElapsedTime&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      qs&lt;span&gt;.&lt;/span&gt;max_logical_reads&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;max_logical_writes&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;total_physical_reads&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;      &lt;span&gt;DATEDIFF&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Minute&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;creation_time&lt;span&gt;,&lt;/span&gt; &lt;span&gt;GetDate&lt;/span&gt;&lt;span&gt;())&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Age in Cache&amp;#39;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_exec_query_stats&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; qs&lt;br /&gt;      &lt;span&gt;CROSS&lt;/span&gt; &lt;span&gt;APPLY&lt;/span&gt; sys.dm_exec_sql_text&lt;span&gt;(&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;sql_handle&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; qt&lt;br /&gt;      &lt;span&gt;WHERE&lt;/span&gt; qt&lt;span&gt;.&lt;/span&gt;dbid &lt;span&gt;=&lt;/span&gt; &lt;span&gt;db_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; &lt;span&gt;-- Filter by current database&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;execution_count &lt;span&gt;DESC&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- HIGH CPU *************&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;-- Get Top 20 executed SP&amp;#39;s ordered by total worker time (CPU pressure)&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;SELECT&lt;/span&gt; &lt;span&gt;TOP&lt;/span&gt; 20 qt&lt;span&gt;.&lt;/span&gt;text &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;SP Name&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;total_worker_time &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;TotalWorkerTime&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;      qs&lt;span&gt;.&lt;/span&gt;total_worker_time&lt;span&gt;/&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;execution_count &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;AvgWorkerTime&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      qs&lt;span&gt;.&lt;/span&gt;execution_count &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Execution Count&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;      &lt;span&gt;ISNULL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;execution_count&lt;span&gt;/&lt;/span&gt;&lt;span&gt;DATEDIFF&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Second&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;creation_time&lt;span&gt;,&lt;/span&gt; &lt;span&gt;GetDate&lt;/span&gt;&lt;span&gt;()),&lt;/span&gt; 0&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Calls/Second&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;ISNULL&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;total_elapsed_time&lt;span&gt;/&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;execution_count&lt;span&gt;,&lt;/span&gt; 0&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;AvgElapsedTime&amp;#39;&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;      qs&lt;span&gt;.&lt;/span&gt;max_logical_reads&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;max_logical_writes&lt;span&gt;,&lt;/span&gt; &lt;br /&gt;      &lt;span&gt;DATEDIFF&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;Minute&lt;/span&gt;&lt;span&gt;,&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;creation_time&lt;span&gt;,&lt;/span&gt; &lt;span&gt;GetDate&lt;/span&gt;&lt;span&gt;())&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; &lt;span&gt;&amp;#39;Age in Cache&amp;#39;&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;FROM&lt;/span&gt; &lt;span&gt;sys.dm_exec_query_stats&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; qs&lt;br /&gt;      &lt;span&gt;CROSS&lt;/span&gt; &lt;span&gt;APPLY&lt;/span&gt; sys.dm_exec_sql_text&lt;span&gt;(&lt;/span&gt;qs&lt;span&gt;.&lt;/span&gt;sql_handle&lt;span&gt;)&lt;/span&gt; &lt;span&gt;AS&lt;/span&gt; qt&lt;br /&gt;      &lt;span&gt;WHERE&lt;/span&gt; qt&lt;span&gt;.&lt;/span&gt;dbid &lt;span&gt;=&lt;/span&gt; &lt;span&gt;db_id&lt;/span&gt;&lt;span&gt;()&lt;/span&gt; &lt;span&gt;-- Filter by current database&lt;br /&gt;&lt;/span&gt;      &lt;span&gt;ORDER&lt;/span&gt; &lt;span&gt;BY&lt;/span&gt; qs&lt;span&gt;.&lt;/span&gt;total_worker_time &lt;span&gt;DESC&lt;br /&gt;&lt;/span&gt;      &lt;br /&gt;&lt;br /&gt;      &lt;/pre&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=590" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/sql/default.aspx">sql</category><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/snippet/default.aspx">snippet</category></item><item><title>how can i find when a stored procedure was last executed in sql 2005?</title><link>http://drowningintechnicaldebt.com/blogs/royashbrook/archive/2008/03/21/how-can-i-find-when-a-stored-procedure-was-last-executed-in-sql-2005.aspx</link><pubDate>Fri, 21 Mar 2008 18:22:00 GMT</pubDate><guid isPermaLink="false">4fe7e88d-b128-4946-bef2-079055b364e8:589</guid><dc:creator>royashbrook</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;select top 10&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.text&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , s.last_execution_time&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; , *&lt;br /&gt;from&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.dm_exec_query_stats s&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cross apply sys.dm_exec_sql_text(s.sql_handle) t&lt;br /&gt;where&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t.objectid is not null&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; and text like &amp;#39;%procname%&amp;#39;&lt;br /&gt;order by&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; s.last_execution_time desc&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;obviously replace procname with the procname you want to find. you might get multiple results, and you can probably clean it up some, but it works fine for what i generally need to get the info for. while i was researching this, i also came accross this pretty cool query:&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span id="ctl00_MainContentPlaceholder_ctl01_ctl00_lblEntry"&gt;&lt;p&gt;&lt;font color="#008040"&gt;-- Get Top 200 executed SP&amp;#39;s ordered by calls/minute&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;SELECT TOP&lt;/font&gt; 200 qt.text &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;SP Name&amp;#39;, qs.execution_count &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;Execution Count&amp;#39;, &lt;br /&gt;qs.total_worker_time/ISNULL(qs.execution_count, 1) &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;AvgWorkerTime&amp;#39;,&lt;br /&gt;qs.total_worker_time &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;TotalWorkerTime&amp;#39;,&lt;br /&gt;qs.total_elapsed_time/ISNULL(qs.execution_count, 1) &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;AvgElapsedTime&amp;#39;,&lt;br /&gt;qs.max_logical_reads, qs.max_logical_writes, qs.creation_time,&lt;br /&gt;&lt;font color="#ff80ff"&gt;DATEDIFF&lt;/font&gt;(Minute, qs.creation_time, GetDate()) &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;Age in Cache&amp;#39;,&lt;br /&gt;qs.execution_count/ISNULL(&lt;font color="#ff80ff"&gt;DATEDIFF&lt;/font&gt;(Minute, qs.creation_time, GetDate()), 1) &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;Calls/Minute&amp;#39;,&lt;br /&gt;qs.execution_count/ISNULL(&lt;font color="#ff80ff"&gt;DATEDIFF&lt;/font&gt;(Second, qs.creation_time, GetDate()), 1) &lt;font color="#0000ff"&gt;AS&lt;/font&gt; &amp;#39;Calls/Second&amp;#39;&lt;br /&gt;&lt;font color="#0000ff"&gt;FROM&lt;/font&gt; sys.dm_exec_query_stats &lt;font color="#0000ff"&gt;AS&lt;/font&gt; qs&lt;br /&gt;&lt;font color="#0000ff"&gt;CROSS APPLY&lt;/font&gt; sys.dm_exec_sql_text(qs.sql_handle) &lt;font color="#0000ff"&gt;AS&lt;/font&gt; qt&lt;br /&gt;&lt;font color="#0000ff"&gt;WHERE&lt;/font&gt; qt.dbid = 5 &lt;font color="#008000"&gt;-- Change this for the database you are interested in&lt;/font&gt;&lt;br /&gt;&lt;font color="#0000ff"&gt;ORDER BY&lt;/font&gt; qs.execution_count/ISNULL(&lt;font color="#ff80ff"&gt;DATEDIFF&lt;/font&gt;(Minute, qs.creation_time, GetDate()), 1) &lt;font color="#0000ff"&gt;DESC&lt;/font&gt;&lt;/p&gt;&lt;p&gt;quoted from: http://glennberrysqlperformance.spaces.live.com/blog/cns!45041418ECCAA960!248.entry&amp;nbsp; &lt;/p&gt;&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://drowningintechnicaldebt.com/aggbug.aspx?PostID=589" width="1" height="1"&gt;</description><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/sql/default.aspx">sql</category><category domain="http://drowningintechnicaldebt.com/blogs/royashbrook/archive/tags/snippet/default.aspx">snippet</category></item></channel></rss>