<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-5790493286190870944</id><updated>2012-01-25T13:17:18.320-08:00</updated><category term='Book Review'/><category term='Quotes'/><category term='TV'/><category term='Microsoft'/><category term='SQL'/><category term='SQL Videos'/><category term='TIG'/><category term='Code Camp'/><category term='SQL Server'/><category term='Replication'/><category term='TimeMatters'/><category term='Fatherhood'/><category term='Reporting Services'/><category term='Business Intelligence'/><category term='Interview'/><category term='Programming'/><category term='ASP.NET'/><category term='Productivity'/><category term='Life of Change'/><category term='TDD'/><category term='Agile'/><category term='SQL MCM'/><category term='tips'/><category term='Lightswitch'/><category term='SQL Administration'/><category term='SQL Azure'/><category term='User Group'/><category term='T-SQL'/><category term='San Diego .NET User Group'/><category term='SQL Azure Data Sync'/><category term='.NET'/><category term='Database Design'/><category term='Excel'/><title type='text'>Ike Ellis' Blog</title><subtitle type='html'>My thoughts on SQL, software development, technology, life, the universe, and everything.  Also, I make tons of mistakes, and I document them here.  Sometimes hilarious.  Sometimes off-color.  Always authentic.  I intend no offense.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>96</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5336096556358419637</id><published>2011-12-12T06:20:00.000-08:00</published><updated>2011-12-12T06:27:59.539-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life of Change'/><title type='text'>Woot Makes Me Think</title><content type='html'>I got an email from &lt;a href="http://www.woot.com"&gt;Woot&lt;/a&gt; today.  At the bottom they had this silly graphic:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-bGOA8i4FQzI/TuYN2lzT3dI/AAAAAAAAAJU/Lia1gJmyYEw/s1600/WootQuote.JPG"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 640px; height: 246px;" src="http://2.bp.blogspot.com/-bGOA8i4FQzI/TuYN2lzT3dI/AAAAAAAAAJU/Lia1gJmyYEw/s1600/WootQuote.JPG" border="0" alt=""id="BLOGGER_PHOTO_ID_5685246811113250258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been minimalizing a lot of stuff in my life lately: Possessions, bills, work, Facebook friends (yeah, I got rid of people I didn't really know and it simplified my Facebook experience.)  I'm enjoying freedom from life's unnecessary burdens, and it's freeing up my time so I can focus on the things that really matter to me. &lt;br /&gt;&lt;br /&gt;I never thought about freedom from knowledge before, but it really makes sense.  Freedom from knowing what other people expect me to know.  I don't need to know the meaning of every inside joke.  What happens if I never watch the most popular TV shows and I don't get references?  Will my life be less meaningful?  Will I be less happy?  What happens if I stop watching the news?  Will my vote count less?  Will I be less of an American?&lt;br /&gt;&lt;br /&gt;I really don't have the answers to these questions, but the woot monkeys made me think about it.  I'll let you know if I land on anything brilliant.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5336096556358419637?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5336096556358419637/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5336096556358419637' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5336096556358419637'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5336096556358419637'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/12/woot-makes-me-think.html' title='Woot Makes Me Think'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-bGOA8i4FQzI/TuYN2lzT3dI/AAAAAAAAAJU/Lia1gJmyYEw/s72-c/WootQuote.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8826394078075926035</id><published>2011-12-12T06:07:00.000-08:00</published><updated>2011-12-13T18:44:24.041-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life of Change'/><title type='text'>Planning Into Minimalism</title><content type='html'>I'm on &lt;a href="http://www.theminimalists.com/21days/day2/"&gt;day 2&lt;/a&gt; of my journey into &lt;a href="http://www.theminimalists.com/"&gt;Minimalism.&lt;/a&gt;  I'm planning.  I didn't buy a calendar like they recommend, but instead used Microsoft Outlook.  I'm thinking Outlook might be the problem.  That software is expensive.  I'm planning my digital minimalist life.  I have a lot of monthly, quarterly, and yearly fees for digital services, when free ones are just as good or nearly just as good.  I think I'll spend my free time during Christmas transitioning to the free services, like using GMail instead of Outlook/Exchange.&lt;br /&gt;&lt;br /&gt;I pay for source control, when I could just host it myself for free.&lt;br /&gt;&lt;br /&gt;I pay for web hosting from several different companies, but I should consolidate and make my expenses cheaper.&lt;br /&gt;&lt;br /&gt;I canceled GOTOMeeting (which I use primarily to remote control computers or show someone my screen), because I can just use &lt;a href="http://www.mikogo.com/"&gt;mikogo&lt;/a&gt; for free.&lt;br /&gt;&lt;br /&gt;I'm going to comb over my cell phone bill and cancel unneeded phones and services.  My phone bill is typically $330 a month.  YES, YOU READ THAT RIGHT!  I know, I know...it's embarrassing.  But I have three sons.  Little buggers are expensive.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8826394078075926035?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8826394078075926035/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8826394078075926035' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8826394078075926035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8826394078075926035'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/12/planning-into-minimalism.html' title='Planning Into Minimalism'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8327161948337104162</id><published>2011-12-11T15:59:00.000-08:00</published><updated>2011-12-13T18:42:53.892-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life of Change'/><title type='text'>My Must List for the Next 90 Days</title><content type='html'>I read Day 1 of the journey from &lt;a href="http://www.theminimalists.com/"&gt;The Minimalist Blog&lt;/a&gt;.  They mention that I need to turn &lt;a href="http://www.theminimalists.com/21days/day1-2/"&gt;shoulds into musts &lt;/a&gt; and I totally agree.&lt;br /&gt;&lt;br /&gt;This is who I am for the next 90 days.&lt;br /&gt;&lt;br /&gt;I must do P90X first thing in the morning.&lt;br /&gt;&lt;br /&gt;I must write 1000 words a day on my book.&lt;br /&gt;&lt;br /&gt;I must complete projects for work.&lt;br /&gt;&lt;br /&gt;I must listen to podcasts to and from work.&lt;br /&gt;&lt;br /&gt;I must be available for my sons for surfing, golf, and bonding time.&lt;br /&gt;&lt;br /&gt;I must eat healthy for every meal.&lt;br /&gt;&lt;br /&gt;I must not watch TV, HULU, etc.&lt;br /&gt;&lt;br /&gt;I must not go on the Internet unless it's to research or write.&lt;br /&gt;&lt;br /&gt;I must not hold on to my fucking phone like I'm Gollum and it's the goddamn One Ring.&lt;br /&gt;&lt;br /&gt;&lt;iframe width="420" height="315" src="http://www.youtube.com/embed/Gk4Ntcq5uNg" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;I must watch a technology video every day.&lt;br /&gt;&lt;br /&gt;I must make time for making good friends.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8327161948337104162?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8327161948337104162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8327161948337104162' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8327161948337104162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8327161948337104162'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/12/my-must-list-for-next-90-days.html' title='My Must List for the Next 90 Days'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/Gk4Ntcq5uNg/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3955939527184675922</id><published>2011-11-16T12:24:00.001-08:00</published><updated>2011-11-16T12:27:24.304-08:00</updated><title type='text'>New BunkSpeed Site is Amazing!</title><content type='html'>Brad Cunningham just showed me the new website for his company, Bunkspeed.  This site was created with Javascript and CSS.  I'm  flabbergasted how seamless the scroll in and scroll out works without losing any graphical detail.  Brad and his team did some breathtaking work here and they should be proud.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.bunkspeed.com/"&gt;www.bunkspeed.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3955939527184675922?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3955939527184675922/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3955939527184675922' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3955939527184675922'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3955939527184675922'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/11/new-bunkspeed-site-is-amazing.html' title='New BunkSpeed Site is Amazing!'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5355231613758007011</id><published>2011-11-16T11:28:00.002-08:00</published><updated>2011-11-16T11:29:42.013-08:00</updated><title type='text'>How To Reconcile Belief in God with Morals</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-QLlkY2GfW9Y/TsQPF0CcMoI/AAAAAAAAAI0/_YIUJRNlSHc/s1600/GoodLife.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://2.bp.blogspot.com/-QLlkY2GfW9Y/TsQPF0CcMoI/AAAAAAAAAI0/_YIUJRNlSHc/s320/GoodLife.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5675678022936310402" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5355231613758007011?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5355231613758007011/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5355231613758007011' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5355231613758007011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5355231613758007011'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/11/how-to-reconcile-belief-in-god-with_16.html' title='How To Reconcile Belief in God with Morals'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-QLlkY2GfW9Y/TsQPF0CcMoI/AAAAAAAAAI0/_YIUJRNlSHc/s72-c/GoodLife.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1267790127274849220</id><published>2011-11-02T11:09:00.000-07:00</published><updated>2011-11-02T11:10:15.793-07:00</updated><title type='text'>Slides for SQL in the City Presentation on SQL Azure</title><content type='html'>Here's the promised slide deck:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_9962519"&gt; &lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/ellisike/developing-on-sql-azure" title="Developing on SQL Azure" target="_blank"&gt;Developing on SQL Azure&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9962519" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ellisike" target="_blank"&gt;Ike Ellis&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1267790127274849220?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1267790127274849220/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1267790127274849220' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1267790127274849220'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1267790127274849220'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/11/slides-for-sql-in-city-presentation-on.html' title='Slides for SQL in the City Presentation on SQL Azure'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3321945603931635233</id><published>2011-10-20T15:05:00.001-07:00</published><updated>2011-11-01T10:17:20.653-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interview'/><category scheme='http://www.blogger.com/atom/ns#' term='TV'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>My Interview with SSWUG</title><content type='html'>SSWUG just released an interview I did with them back in August.  You can see it here:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;   &lt;iframe src="http://www.sswug.org/slplayer/Ike.aspx" frameborder="0" height="456" width="640" &gt;&lt;/iframe&gt;&lt;br /&gt;    &lt;br /&gt;&lt;br /&gt;Thanks, SSWUG! I totally enjoyed the experience and look forward to doing it again&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3321945603931635233?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3321945603931635233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3321945603931635233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3321945603931635233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3321945603931635233'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/10/my-interview-with-sswug.html' title='My Interview with SSWUG'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8232303940930775096</id><published>2011-10-11T11:40:00.000-07:00</published><updated>2011-10-11T11:45:36.035-07:00</updated><title type='text'>clemens vasters discusses lack of dtc on the azure platform</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-v2hSEKfEyGc/TpSOppi7ryI/AAAAAAAAAIY/BURcMzD2zlg/s1600/christian_rings.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/-v2hSEKfEyGc/TpSOppi7ryI/AAAAAAAAAIY/BURcMzD2zlg/s320/christian_rings.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5662307477689708322" /&gt;&lt;/a&gt;&lt;br /&gt;clemens vasters responded to complaints on the azure nda list this week.  he addresses the lack of a distributed transaction coordinator on the azure platform.  i thought his response was interesting, told him that, and he turned it into a public blog post.&lt;br /&gt;&lt;br /&gt;he still got skewered by the mvps, but he gets an "a" for effort.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/clemensv/archive/2011/10/06/achieving-transactional-behavior-with-messaging.aspx"&gt;http://blogs.msdn.com/b/clemensv/archive/2011/10/06/achieving-transactional-behavior-with-messaging.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;below is my favorite part:&lt;br /&gt;&lt;br /&gt;"The grand canonical example for 2PC transactions is a bank account transfer. You debit one account and credit another. These two operations need to succeed or fail together because otherwise you are either creating or destroying money (which is illegal, by the way). So that’s the example that’s very commonly used to illustrate 2PC transactions. The catch is – that’s not how it really works, at all. Getting money from one bank account to another bank account is a fairly complicated affair that touches a ton of other accounts. More importantly, it’s not a synchronous fail-together/success-together scenario. Instead, principles of accounting apply (surprise!). When a transfer is initiated, let’s say in online banking, the transfer is recorded in form of a message for submission into the accounting system and the debit is recorded in the account as a ‘pending’ transaction that affects the displayed balance. From the user’s perspective, the transaction is ’done’, but factually nothing has happened, yet. Eventually, the accounting system will get the message and start performing the transfer, which often causes a cascade of operations, many of them yielding further messages, including booking into clearing accounts and notifying the other bank of the transfer. The principle here is that all progress is forward. If an operation doesn’t work for some technical reason it can be retried once the technical reason is resolved. If operation fails for a business reason, the operation can be aborted – but not by annihilating previous work, but by doing the inverse of previous work. If an account was credited, that credit is annulled with a debit of the same amount. For some types of failed transactions,  the ‘inverse’ operation may not be fully symmetric but may result in extra actions like imposing penalty fees. In fact, in accounting, annihilating any work is illegal – ‘delete’ and ‘update’ are a great way to end up in prison."&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8232303940930775096?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8232303940930775096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8232303940930775096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8232303940930775096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8232303940930775096'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/10/clemens-vasters-discusses-lack-of-dtc.html' title='clemens vasters discusses lack of dtc on the azure platform'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/-v2hSEKfEyGc/TpSOppi7ryI/AAAAAAAAAIY/BURcMzD2zlg/s72-c/christian_rings.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1977398675858900631</id><published>2011-09-19T05:58:00.001-07:00</published><updated>2011-09-19T05:58:25.836-07:00</updated><title type='text'>SQL Quick and Easy Tips - SQL Saturday San Diego</title><content type='html'>Here is the slide deck for two of my SQL Saturday presentations.  Enjoy!&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_9321555"&gt; &lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/ellisike/quick-easy-sql-tips-9321555" title="Quick &amp;amp; Easy SQL Tips" target="_blank"&gt;Quick &amp;amp; Easy SQL Tips&lt;/a&gt;&lt;/strong&gt; &lt;iframe src="http://www.slideshare.net/slideshow/embed_code/9321555" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"&gt;&lt;/iframe&gt; &lt;div style="padding:5px 0 12px"&gt; View more &lt;a href="http://www.slideshare.net/" target="_blank"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ellisike" target="_blank"&gt;Ike Ellis&lt;/a&gt; &lt;/div&gt; &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1977398675858900631?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1977398675858900631/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1977398675858900631' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1977398675858900631'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1977398675858900631'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/09/sql-quick-and-easy-tips-sql-saturday.html' title='SQL Quick and Easy Tips - SQL Saturday San Diego'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3440485004062150935</id><published>2011-09-06T16:35:00.001-07:00</published><updated>2011-09-06T16:35:55.820-07:00</updated><title type='text'>Create a Numbers Table with Buckets Using a Recursive CTE</title><content type='html'>I needed a numbers table from –400 to 5000.  I needed every number to be in a specific bucket for a report.  For instance number 55 would be in the bucket "31 – 60".&lt;br /&gt; &lt;br /&gt;This code elegantly creates the data for the number ranges (without listing each of them) and for those buckets.  &lt;br /&gt; &lt;br /&gt; &lt;br /&gt;with myNumberCounts as&lt;br /&gt;(&lt;br /&gt;select CAST(-400 as int) NumValue&lt;br /&gt;union all&lt;br /&gt;select NumValue + 1&lt;br /&gt;from mynumberCounts&lt;br /&gt;where numvalue + 1 &lt;= 5000&lt;br /&gt;)&lt;br /&gt;select NumValue&lt;br /&gt;            , case &lt;br /&gt;                        when NumValue &lt;= 30 then '0 - 30'&lt;br /&gt;                        when NumValue &gt;30 and NumValue &lt;= 60 then '31 - 60'&lt;br /&gt;                        when NumValue &gt; 60 and NumValue &lt;= 90 then '61 - 90'&lt;br /&gt;                        when NumValue &gt; 90 and NumValue &lt;= 120 then '91 - 120'&lt;br /&gt;                        when NumValue &gt; 120 and NumValue &lt;= 150 then '121 - 150'&lt;br /&gt;                        when NumValue &gt; 150 and NumValue &lt;= 180 then '151 - 180'&lt;br /&gt;                        when NumValue &gt; 180 and NumValue &lt;= 365 then '181 - 365'&lt;br /&gt;                        else '365+' &lt;br /&gt;              end AS DayBucket&lt;br /&gt;from myNumberCounts&lt;br /&gt;option (maxRecursion 0)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3440485004062150935?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3440485004062150935/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3440485004062150935' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3440485004062150935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3440485004062150935'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/09/create-numbers-table-with-buckets-using.html' title='Create a Numbers Table with Buckets Using a Recursive CTE'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3093538436101407383</id><published>2011-06-28T13:15:00.001-07:00</published><updated>2011-06-28T13:17:12.357-07:00</updated><title type='text'>San Diego Code Camp Slides</title><content type='html'>Here is the link for the slides for the T-SQL Tips and Tricks presentation at code camp:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.slideshare.net/ellisike/quick-easy-sql-tips"&gt;http://www.slideshare.net/ellisike/quick-easy-sql-tips&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3093538436101407383?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3093538436101407383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3093538436101407383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3093538436101407383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3093538436101407383'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/06/san-diego-code-camp-slides.html' title='San Diego Code Camp Slides'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6684701438279723861</id><published>2011-05-26T04:46:00.000-07:00</published><updated>2011-05-26T04:56:11.618-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><title type='text'>A Bug Using INTERSECT and ORDER BY</title><content type='html'>I was teaching a TSQL course to Total Jobs Group in London, UK, and we stumbled on the following bug.  This script uses the Northwind sample database on SQL Server 2008 R2.&lt;br /&gt;&lt;br /&gt;use northwind&lt;br /&gt;&lt;br /&gt;select contactName, Phone&lt;br /&gt;from customers&lt;br /&gt;intersect&lt;br /&gt;select lastname + ', ' + firstname&lt;br /&gt;, homephone&lt;br /&gt;from employees&lt;br /&gt;order by contactName&lt;br /&gt;&lt;br /&gt;If you execute this statement with INTERSECT and ORDER BY, you get the following error:&lt;br /&gt;&lt;br /&gt;Msg 0, Level 11, State 0, Line 0&lt;br /&gt;A severe error occurred on the current command.  The results, if any, should be discarded.&lt;br /&gt;Msg 0, Level 20, State 0, Line 0&lt;br /&gt;A severe error occurred on the current command.  The results, if any, should be discarded.&lt;br /&gt;&lt;br /&gt;If you remove the ORDER BY, it works just fine.  This is definitely a bug and I found that it was reported on Connect.  I'll test this out to see if they've fixed this in Denali.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6684701438279723861?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6684701438279723861/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6684701438279723861' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6684701438279723861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6684701438279723861'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/05/bug-using-intersect-and-order-by.html' title='A Bug Using INTERSECT and ORDER BY'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-341671131226549038</id><published>2011-04-21T08:34:00.000-07:00</published><updated>2011-04-21T08:40:35.535-07:00</updated><title type='text'>Find All The Columns in Indexes with SQL Azure</title><content type='html'>In SQL Server on-premise, this query is often used to find all the columns that are currently participating in an index:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.id&lt;/span&gt;&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;span style="color:black"&gt;Table_Name&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;syscolumns.name Column_Name&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.name Index_Name&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:magenta"&gt;CASE &lt;/span&gt;&lt;span style="color:blue"&gt;WHEN&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;&lt;/span&gt;&lt;span style="color:magenta"&gt;INDEXKEY_PROPERTY&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.id&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.indid&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.keyno&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'IsDescending'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;0&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:red"&gt;'Ascending'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:red"&gt;'Descending'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;END &lt;/span&gt;&lt;span style="color:black"&gt;SORT_ORDER&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;FROM &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys&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;&lt;/span&gt;&lt;span style="color:blue"&gt;INNER JOIN &lt;/span&gt;&lt;span style="color:black"&gt;syscolumns&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;&lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.colid&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;syscolumns.colid &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;AND &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.id&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;syscolumns.id&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;&lt;/span&gt;&lt;span style="color:blue"&gt;INNER JOIN &lt;/span&gt;&lt;span style="color:black"&gt;sysindexes&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;&lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.indid&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.indid &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;AND &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.id&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.id&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;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In SQL Azure, we don't have sysindexes or sysindexkeys.  Instead, we use sys.indexes and sys.index_columms.  It looks like this:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta"&gt;OBJECT_NAME&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.&lt;/span&gt;&lt;span style="color:magenta"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;span style="color:black"&gt;Table_Name&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;syscolumns.name Column_Name&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.name Index_Name&lt;/span&gt;&lt;span style="color:gray"&gt;,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:magenta"&gt;CASE &lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:black"&gt;is_descending_key &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:red"&gt;'Ascending'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE &lt;/span&gt;&lt;span style="color:red"&gt;'Descending'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;END AS &lt;/span&gt;&lt;span style="color:black"&gt;SORT_ORDER&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;type_desc &lt;/span&gt;&lt;span style="color:blue"&gt;AS &lt;/span&gt;&lt;span style="color:black"&gt;indexType&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;FROM &lt;/span&gt;&lt;span style="color:black"&gt;sys.index_columns sysindexkeys&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;&lt;/span&gt;&lt;span style="color:blue"&gt;INNER JOIN &lt;/span&gt;&lt;span style="color:black"&gt;syscolumns&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;&lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.index_column_id&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;syscolumns.colid&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;AND &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.&lt;/span&gt;&lt;span style="color:magenta"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;syscolumns.id&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;&lt;/span&gt;&lt;span style="color:blue"&gt;INNER JOIN &lt;/span&gt;&lt;span style="color:black"&gt;sys.indexes sysindexes&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;&lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.index_id&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.index_id&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;AND &lt;/span&gt;&lt;span style="color:black"&gt;sysindexkeys.&lt;/span&gt;&lt;span style="color:magenta"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;/span&gt;&lt;span style="color:black"&gt;sysindexes.&lt;/span&gt;&lt;span style="color:magenta"&gt;OBJECT_ID&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;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-341671131226549038?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/341671131226549038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=341671131226549038' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/341671131226549038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/341671131226549038'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/04/find-all-columns-in-indexes-with-sql.html' title='Find All The Columns in Indexes with SQL Azure'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-7456224576870473555</id><published>2011-04-17T18:39:00.000-07:00</published><updated>2011-04-17T18:54:13.976-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Fatherhood'/><category scheme='http://www.blogger.com/atom/ns#' term='Code Camp'/><title type='text'>Father of the Year Candidate at Desert Code Camp 2011</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-dqURcgHiJFg/TauZZxcZ-rI/AAAAAAAAAG8/DUxTkmZozbc/s1600/FatherOfTheYear.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 199px; height: 300px;" src="http://2.bp.blogspot.com/-dqURcgHiJFg/TauZZxcZ-rI/AAAAAAAAAG8/DUxTkmZozbc/s320/FatherOfTheYear.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5596735629986233010" /&gt;&lt;/a&gt;&lt;br /&gt;As I was walking around the campus at Desert Code Camp last month, a man stopped me.  This guy had tattoos riding up his arm, a flat-brim hat, baggy jeans, and looked like he just walked off the construction site...not your typical code camp attendee.  Trailing him was a skinny 12-year-old boy wearing a pacman t-shirt.&lt;br /&gt;&lt;br /&gt;"Excuse me, I have no idea what my son is saying.  Can you please translate?"&lt;br /&gt;&lt;br /&gt;His son wanted to go to a specific class.  I found one close enough on the schedule and pointed them on their way.  Later, as I was running around after my own sons, I saw the man walk out of the class his son was in.  He found a chair by the door, sat down, and waited.  As I walked around code camp that day, I saw the same sight over and over again.  This guy was either walking his son to the next class, or waiting outside the door.&lt;br /&gt;&lt;br /&gt;I wonder what he was thinking about with all that free time that day.  Perhaps, "why doesn't my boy like to throw the football?"  Or, "why can't we make furniture together?"  I wonder how many super smart kids are born to parents that are not as generous and thoughtful as that man.  I wonder how many brilliant minds the world has lost out on because of bad luck or circumstance.  &lt;br /&gt;&lt;br /&gt;On the flip side, maybe one of my sons was meant to be an NFL Quarterback, but we'll never know.  They're stuck in code camp classes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-7456224576870473555?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/7456224576870473555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=7456224576870473555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7456224576870473555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7456224576870473555'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/04/father-of-year-candidate-at-desert-code.html' title='Father of the Year Candidate at Desert Code Camp 2011'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-dqURcgHiJFg/TauZZxcZ-rI/AAAAAAAAAG8/DUxTkmZozbc/s72-c/FatherOfTheYear.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-7029696448428012919</id><published>2011-03-25T16:47:00.000-07:00</published><updated>2011-03-25T16:51:21.910-07:00</updated><title type='text'>Outlook 2011 for Mac (OsX) Won't Open New Email Window and Reply All Doesn't Work</title><content type='html'>Today, none of my email buttons would work in Outlook.  After some digging, I  found this solution:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://jimmyblake.com/2010/11/09/microsoft-outlook-2011-not-opening-e-mail-compose-window/"&gt;http://jimmyblake.com/2010/11/09/microsoft-outlook-2011-not-opening-e-mail-compose-window/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I reinstalled Safari and it finally fixed it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-7029696448428012919?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/7029696448428012919/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=7029696448428012919' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7029696448428012919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7029696448428012919'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/03/outlook-2011-for-mac-osx-wont-open-new.html' title='Outlook 2011 for Mac (OsX) Won&apos;t Open New Email Window and Reply All Doesn&apos;t Work'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-2065159084856852161</id><published>2011-03-17T19:48:00.000-07:00</published><updated>2011-03-17T20:19:24.016-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Database Design'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL'/><title type='text'>Database Design Fundamentals - Louis Davidson's SQL Pass 2010 Talk</title><content type='html'>I've been watching old SQL Pass talks from last year's conference.  Today I watched Louis Davidson's talk, found here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://sqlpass.eventpoint.com/topic/details/AD270S"&gt;http://sqlpass.eventpoint.com/topic/details/AD270S&lt;br /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;He is an interesting speaker, who talks funny because he's from Tennessee.  My favorite is the pronounciation of varchar(max) as vare care (max).  That rhymes, by-the-way.&lt;br /&gt;&lt;br /&gt;His presentation covers database normalization from first normal form through Boyce/Codd normal form.  He also talks about de-normalization and offers tips and techniques for good design.  Forty-nine minutes into his presentation, he has a brilliant slide:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-INo7gxLQ6nU/TYLJEBk4KPI/AAAAAAAAAGk/Znnwi_a7cW8/s1600/SQL%2BCode%2BSmells.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 205px;" src="http://1.bp.blogspot.com/-INo7gxLQ6nU/TYLJEBk4KPI/AAAAAAAAAGk/Znnwi_a7cW8/s320/SQL%2BCode%2BSmells.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5585247558872606962" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;He says that if you find a lot of parsing and function calls in queries, particularly on the same column over and over again, you have strong evidence of a design that needs to be revisited.  I totally agree.  As soon as he said it, it hit me like a ton of bricks.  If you see parsing functions over and over again, you have opened yourself up to bad data and inconsistant results.  You are overly-relying on report authors and developers to get the parsing formulas right every time they touch that data.  That won't happen.  The database needs to be refactored so that data is easy to retrieve and store.&lt;br /&gt;&lt;br /&gt;I've thought about this specifically, but I've never considered it as a good general rule.&lt;br /&gt;&lt;br /&gt;Here are links for Louis Davidson:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.drsql.org"&gt;His Website&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlblog.com/blogs/louis_davidson"&gt;His Blog&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Server-Relational-Database-Design-Implementation/dp/143020866X/ref=sr_1_1?ie=UTF8&amp;qid=1300417593&amp;sr=8-1"&gt;His Latest Book on Database Design for SQL Server 2008&lt;/a&gt;&lt;br /&gt;His Twitter: @SqlDr&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-2065159084856852161?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/2065159084856852161/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=2065159084856852161' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2065159084856852161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2065159084856852161'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/03/database-design-fundamentals-louis.html' title='Database Design Fundamentals - Louis Davidson&apos;s SQL Pass 2010 Talk'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-INo7gxLQ6nU/TYLJEBk4KPI/AAAAAAAAAGk/Znnwi_a7cW8/s72-c/SQL%2BCode%2BSmells.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5931882669475314759</id><published>2011-02-25T10:44:00.000-08:00</published><updated>2011-03-31T19:10:02.127-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL MCM'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>The SQL MCM Might Not Be For Me</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-GRMm_s_SIIo/TWavIpJErYI/AAAAAAAAAGc/kf-xB6zNCs0/s1600/Kilt.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 229px; height: 320px;" src="http://3.bp.blogspot.com/-GRMm_s_SIIo/TWavIpJErYI/AAAAAAAAAGc/kf-xB6zNCs0/s320/Kilt.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5577337751562661250" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I've been thinking a lot about the &lt;a href="http://www.microsoft.com/learning/en/us/certification/master-sql.aspx"&gt; Microsoft Certified Master Certification &lt;/a&gt; recently, trying to decide if it's worth it.&lt;br /&gt;&lt;br /&gt;On one hand, I really like being identified as a smart guy, and perhaps MCM will help that effort.  I can picture it now - I walk into &lt;a href="http://www.sqlpass.org/summit/2011/"&gt;SQL Pass&lt;/a&gt;, standing proud and tall in my &lt;a href="http://www.flickr.com/photos/asylumphoto/4075141409/"&gt;scottish kilt&lt;/a&gt;, legs hairy, smiling brightly...and I hear hushed whispers of "There's Ike...the Microsoft Certified Master."  Reverence on their faces as I stride into the room...right up to the point where I trip, legs sprawling and they realize I'm wearing that kilt as a &lt;a href="http://en.wikipedia.org/wiki/True_Scotsman"&gt;true scotsman&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Also, I seem to learn better when I have a goal.  It gives the learning purpose, context, and urgency, which I (and many people) require in order to learn.&lt;br /&gt;&lt;br /&gt;On the other hand, my clients do not care about this certification.  I doubt I would ever even mention it.  My clients are not SQL DBAs.  They are corporations and institutions that don't have great SQL knowledge in-house.  Some of them are large software companies that just haven't found the right SQL resource.  They've never heard of MCM and therefore, wouldn't add to my bill rate by a single dollar.  MCM = time-consuming = expensive and &lt;&gt; cost-justified.  Basically, I'd be going against the advice I constantly give my customers.  If it doesn't make you more money, it's not worth it.&lt;br /&gt;&lt;br /&gt;My clients employ me for one basic reason.  I'm always concerned about their profitability, efficiency, and productiveness.  Getting better at making them money will make me more money.  I'm unconvinced that MCM helps me achieve that.&lt;br /&gt;&lt;br /&gt;Is ego enough of a reason to pursue this?&lt;br /&gt;&lt;br /&gt;EDIT - 3/31/2011:  Joe Sack, acting PM for MCM:SQL, has been talking to me about this post for quite some time.  He gave me the details of a study done to prove the value of MCM...the non-ego-driven value.  Here is a link to the study:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://download.microsoft.com/download/7/9/5/795B3672-1B65-49DE-9180-7B7BEB0E1F52/MCM_Research_and_Evidence.pdf"&gt;http://download.microsoft.com/download/7/9/5/795B3672-1B65-49DE-9180-7B7BEB0E1F52/MCM_Research_and_Evidence.pdf&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Looks like my SQL MCM journey is going to begin today.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5931882669475314759?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5931882669475314759/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5931882669475314759' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5931882669475314759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5931882669475314759'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/02/sql-mcm-might-not-be-for-me.html' title='The SQL MCM Might Not Be For Me'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-GRMm_s_SIIo/TWavIpJErYI/AAAAAAAAAGc/kf-xB6zNCs0/s72-c/Kilt.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4706499041080839537</id><published>2011-02-15T12:44:00.000-08:00</published><updated>2011-02-15T15:31:33.784-08:00</updated><title type='text'>Webcast for DevelopMentor - Top 5 Things for Developers to Know about SQL Azure</title><content type='html'>Thanks for coming, today.  Here's the link for the slide deck:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_6938019"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/ellisike/top-5-things-to-know-about-sql-azure-for-developers" title="Top 5 things to know about sql azure for developers"&gt;Top 5 things to know about sql azure for developers&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse6938019" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=top5thingstoknowaboutsqlazurefordevelopers-110215144200-phpapp01&amp;stripped_title=top-5-things-to-know-about-sql-azure-for-developers&amp;userName=ellisike" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse6938019" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=top5thingstoknowaboutsqlazurefordevelopers-110215144200-phpapp01&amp;stripped_title=top-5-things-to-know-about-sql-azure-for-developers&amp;userName=ellisike" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ellisike"&gt;Ike Ellis&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;One thing I wanted to cover, and didn't is that you can analyze query plans while using SQL Azure.  Here's a photo to jog your memory:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/-If7qRT-xsaA/TVrmN31fz9I/AAAAAAAAAGM/K9Unm90Vnv0/s1600/Untitled.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 234px;" src="http://3.bp.blogspot.com/-If7qRT-xsaA/TVrmN31fz9I/AAAAAAAAAGM/K9Unm90Vnv0/s320/Untitled.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5574020614825430994" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also, here are the links to the audio portions of the webcast:&lt;br /&gt;&lt;br /&gt;Streaming Video (WMV):&lt;br /&gt;&lt;a href="http://developmentor.s3.amazonaws.com/webcasts/Top-5-Things-to-Know-About-SQL-Azure-for-Developers-by-Ike-Ellis-Feb-15-2011.wvx"&gt;http://developmentor.s3.amazonaws.com/webcasts/Top-5-Things-to-Know-About-SQL-Azure-for-Developers-by-Ike-Ellis-Feb-15-2011.wvx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Video Download for WMV:&lt;br /&gt;&lt;a href="http://developmentor.s3.amazonaws.com/webcasts/Top-5-Things-to-Know-About-SQL-Azure-for-Developers-by-Ike-Ellis-Feb-15-2011.zip"&gt;http://developmentor.s3.amazonaws.com/webcasts/Top-5-Things-to-Know-About-SQL-Azure-for-Developers-by-Ike-Ellis-Feb-15-2011.zip&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4706499041080839537?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4706499041080839537/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4706499041080839537' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4706499041080839537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4706499041080839537'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/02/webcast-for-developmentor-top-5-things.html' title='Webcast for DevelopMentor - Top 5 Things for Developers to Know about SQL Azure'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/-If7qRT-xsaA/TVrmN31fz9I/AAAAAAAAAGM/K9Unm90Vnv0/s72-c/Untitled.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1977470717182069338</id><published>2011-02-10T12:29:00.001-08:00</published><updated>2011-02-10T12:30:52.598-08:00</updated><title type='text'>SSRS 2008 Execution Log - Report Auditing</title><content type='html'>I wrote this query to tell me how many times a report gets excecuted, who ran it last, and when it was ran last.  It's a simple, but effective query:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:blue"&gt;USE &lt;/span&gt;&lt;span style="color:black"&gt;reportserver&lt;/span&gt;&lt;span style="color:gray"&gt;;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;WITH &lt;/span&gt;&lt;span style="color:black"&gt;LastExecution&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;AS&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:black"&gt;e.ReportID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray"&gt;,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:magenta"&gt;MAX&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;e.timestart&lt;/span&gt;&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;span style="color:blue"&gt;AS &lt;/span&gt;&lt;span style="color:black"&gt;LastExecution&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;FROM &lt;/span&gt;&lt;span style="color:black"&gt;ExecutionLog&amp;nbsp;&amp;nbsp;e&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;GROUP BY &lt;/span&gt;&lt;span style="color:black"&gt;e.ReportID&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, &lt;br&gt;&lt;/span&gt;&lt;span style="color:black"&gt;ExecutionCount&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;AS&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:black"&gt;e.ReportID&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray"&gt;,&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:magenta"&gt;COUNT&lt;/span&gt;&lt;span style="color:gray"&gt;(*) &lt;/span&gt;&lt;span style="color:blue"&gt;AS &lt;/span&gt;&lt;span style="color:black"&gt;ExecutionCount&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;FROM &lt;/span&gt;&lt;span style="color:black"&gt;ExecutionLog&amp;nbsp;&amp;nbsp;e&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;GROUP BY &lt;/span&gt;&lt;span style="color:black"&gt;e.ReportID&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:black"&gt;c.Path&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;c.Name &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;le.LastExecution &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;ec.ExecutionCount &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;e.UserName &lt;/span&gt;&lt;span style="color:blue"&gt;AS &lt;/span&gt;&lt;span style="color:black"&gt;LastExecutingUser&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;FROM &lt;/span&gt;&lt;span style="color:black"&gt;ExecutionLog e &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;JOIN &lt;/span&gt;&lt;span style="color:black"&gt;Catalog c &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:black"&gt;e.ReportID &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:black"&gt;c.ItemID &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;JOIN &lt;/span&gt;&lt;span style="color:black"&gt;LastExecution le &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:black"&gt;e.ReportID &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:black"&gt;le.ReportID &lt;/span&gt;&lt;span style="color:gray"&gt;AND &lt;/span&gt;&lt;span style="color:black"&gt;e.TimeStart &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:black"&gt;le.LastExecution &lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;JOIN &lt;/span&gt;&lt;span style="color:black"&gt;ExecutionCount ec &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:black"&gt;e.ReportID &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:black"&gt;ec.ReportID&lt;/span&gt;&lt;span style="color:gray"&gt;; &lt;br&gt;&lt;br&gt;&lt;br&gt; &lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1977470717182069338?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1977470717182069338/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1977470717182069338' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1977470717182069338'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1977470717182069338'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/02/ssrs-2008-execution-log-report-auditing.html' title='SSRS 2008 Execution Log - Report Auditing'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4656337216274014643</id><published>2011-01-27T16:28:00.000-08:00</published><updated>2011-02-25T07:36:00.353-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><title type='text'>T-SQL Script: Finding the First Monday of the Month</title><content type='html'>I recently had a reporting requirement to find the first Monday of the month.  I used the dateadd/datediff method introduced to me by Itzik Ben-Gan.  This is the single line of code, but it might help to break it down into multiple lines of code.&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;wk&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;wk&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'20101206'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;dbo.FormatDateTime&lt;/span&gt;&lt;span style="color:gray"&gt;( &lt;/span&gt;&lt;span style="color:magenta"&gt;GETDATE&lt;/span&gt;&lt;span style="color:gray"&gt;(), &lt;/span&gt;&lt;span style="color:red"&gt;'[MM]/07/[YYYY]'&lt;/span&gt;&lt;span style="color:gray"&gt;)), &lt;/span&gt;&lt;span style="color:red"&gt;'20101206'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;1) Working from the inside out, we have this line:&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:black"&gt;&lt;br&gt;dbo.FormatDateTime&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;GETDATE&lt;/span&gt;&lt;span style="color:gray"&gt;(), &lt;/span&gt;&lt;span style="color:red"&gt;'[MM]/07/[YYYY]'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This line uses a function that I wrote (or stole off the Internet) called FormatDateTime.  Here's a blog post of mine about it: &lt;a href="http://ellisteam.blogspot.com/2007/09/format-dates-and-times-in-t-sql.html"&gt;FormatDateTime Script&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;This line assumes that the first Monday of the month needs to be in the first seven days.  It chooses the seventh day of the month of the current month.&lt;br /&gt;&lt;br /&gt;2)  Next comes this line:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:magenta"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;wk&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'20101206'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;dbo.FormatDateTime&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;GETDATE&lt;/span&gt;&lt;span style="color:gray"&gt;(), &lt;/span&gt;&lt;span style="color:red"&gt;'[MM]/07/[YYYY]'&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This line chooses an anchor date that is the first Monday of a chosen month.  12/6/2010 was the first Monday of December 2010.  It then takes that seventh day of the current month and finds out how many weeks (wk) are between 12/6/2010 and the seventh of the current month.  If today is January 26th, 2011, then the answer will be 5 weeks.&lt;br /&gt;&lt;br /&gt;Finally, when you put the whole statement together, it adds five weeks only to 12/6/2010, which will be the first Monday of January 2011 which is 1/3/2011.&lt;br /&gt;&lt;br /&gt;If you want to find out the first Monday of next month, or any month, then replace the getdate() call with a dateadd call like this:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:magenta"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;m&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;1&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;GETDATE&lt;/span&gt;&lt;span style="color:gray"&gt;())&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;which will create this:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:magenta"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;wk&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;wk&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'20101206'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;dbo.FormatDateTime&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;DATEADD&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;m&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;1&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;GETDATE&lt;/span&gt;&lt;span style="color:gray"&gt;()), &lt;/span&gt;&lt;span style="color:red"&gt;'[MM]/07/[YYYY]'&lt;/span&gt;&lt;span style="color:gray"&gt;)), &lt;/span&gt;&lt;span style="color:red"&gt;'20101206'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4656337216274014643?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4656337216274014643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4656337216274014643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4656337216274014643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4656337216274014643'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2011/01/finding-first-monday-of-month.html' title='T-SQL Script: Finding the First Monday of the Month'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5729116431432418805</id><published>2010-12-13T09:18:00.000-08:00</published><updated>2010-12-13T10:26:16.323-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><title type='text'>SQL AZURE - A Warning to Those Using sys.dm_exec_query_stats</title><content type='html'>Today, I read Dinakar Nethi's blog post on &lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/troubleshooting-and-optimizing-queries-with-sql-azure.aspx"&gt;Troubleshooting and Optimizing Queries with SQL Azure&lt;/a&gt;.  In that article, he discusses how we can use SQL Azure DMVs to troubleshoot poor performing queries.  He relies heavily on sys.dm_exec_query_stats DMV, which I use all the time with on-premise SQL Servers.&lt;br /&gt;&lt;br /&gt;While reading it, I remembered reading a &lt;a href="http://sqlblog.com/blogs/adam_machanic/archive/2010/04/22/a-warning-to-those-using-sys-dm-exec-query-stats.aspx"&gt;blog post from Adam Mechanic&lt;/a&gt; about how if there is an alter statement in a batch, sys.dm_exec_query_stats will not pick up any of the statements in the batch.  This might be because some DDL statements do not generate query plans, but I'm not sure.&lt;br /&gt;&lt;br /&gt;I wanted to see if SQL Azure had the same issue.  I was hopeful it wouldn't because they change the implementation of many of their views.  Nope...the issue is still there in SQL Azure.  I re-wrote Adam's script, because SQL Azure does not support SELECT..INTO.  Also, tables in SQL Azure require a primary key.&lt;br /&gt;&lt;br /&gt;Here's the script:&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:black"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;--BATCH #1&lt;br&gt;--In this batch, the select does not appear in sys.dm_exec_query_stats&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;create table &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;a &lt;/span&gt;&lt;span style="color:blue"&gt;int primary key&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;b &lt;/span&gt;&lt;span style="color:blue"&gt;varchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;100&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;--This is the alter statement that causes the issue.&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;alter table &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;add unique &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;a&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;insert into &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;values&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;1&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'getstuff'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'getMoreStuff'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:black"&gt;3&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'getEvenMoreStuff'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;select &lt;/span&gt;&lt;span style="color:gray"&gt;*&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;from &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;select &lt;/span&gt;&lt;span style="color:gray"&gt;*&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;from &lt;/span&gt;&lt;span style="color:black"&gt;sys.dm_exec_query_stats&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;plan_handle &lt;/span&gt;&lt;span style="color:blue"&gt;IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;plan_handle&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;from &lt;/span&gt;&lt;span style="color:black"&gt;sys.dm_exec_requests&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;session_id &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:#434343"&gt;@@spid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;drop table &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:black"&gt;GO&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;--BATCH #2&lt;br&gt;--In this batch, the select does appear in sys.dm_exec_query_stats, &lt;br&gt;--because I change the alter table to a create index statement&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;create table &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;a &lt;/span&gt;&lt;span style="color:blue"&gt;int primary key&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;b &lt;/span&gt;&lt;span style="color:blue"&gt;varchar&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;100&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;--I change the alter statement to a create unique index statement.&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;CREATE UNIQUE INDEX &lt;/span&gt;&lt;span style="color:black"&gt;whatever&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;ON &lt;/span&gt;&lt;span style="color:#434343"&gt;#x &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;b&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;insert into &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;values&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;1&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'getstuff'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'getMoreStuff'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:black"&gt;3&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'getEvenMoreStuff'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;select &lt;/span&gt;&lt;span style="color:gray"&gt;*&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;from &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;select &lt;/span&gt;&lt;span style="color:gray"&gt;*&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;from &lt;/span&gt;&lt;span style="color:black"&gt;sys.dm_exec_query_stats&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;plan_handle &lt;/span&gt;&lt;span style="color:blue"&gt;IN&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;select&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;plan_handle&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;from &lt;/span&gt;&lt;span style="color:black"&gt;sys.dm_exec_requests&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;where&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:black"&gt;session_id &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:#434343"&gt;@@spid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;drop table &lt;/span&gt;&lt;span style="color:#434343"&gt;#x&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5729116431432418805?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5729116431432418805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5729116431432418805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5729116431432418805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5729116431432418805'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/12/sql-azure-warning-to-those-using.html' title='SQL AZURE - A Warning to Those Using sys.dm_exec_query_stats'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-9120581641688707880</id><published>2010-12-05T18:37:00.000-08:00</published><updated>2010-12-05T18:41:41.095-08:00</updated><title type='text'>Day Of Azure II Talk - SQL Azure Survey</title><content type='html'>Lynn and I had a blast speaking at the Day of Azure.  We covered SQL Azure as thoroughly as possible in 2 hours.  You could probably tell that we could have spent two days on our topic....maybe next time.  Here are the slides:&lt;br /&gt;&lt;br /&gt;&lt;div style="width:425px" id="__ss_6041812"&gt;&lt;strong style="display:block;margin:12px 0 4px"&gt;&lt;a href="http://www.slideshare.net/ellisike/sql-azure-dec2010-lynn-ike" title="Sql azure dec_2010 Lynn &amp;amp; Ike"&gt;Sql azure dec_2010 Lynn &amp;amp; Ike&lt;/a&gt;&lt;/strong&gt;&lt;object id="__sse6041812" width="425" height="355"&gt;&lt;param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sqlazuredec201022-101205202926-phpapp02&amp;stripped_title=sql-azure-dec2010-lynn-ike&amp;userName=ellisike" /&gt;&lt;param name="allowFullScreen" value="true"/&gt;&lt;param name="allowScriptAccess" value="always"/&gt;&lt;embed name="__sse6041812" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=sqlazuredec201022-101205202926-phpapp02&amp;stripped_title=sql-azure-dec2010-lynn-ike&amp;userName=ellisike" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div style="padding:5px 0 12px"&gt;View more &lt;a href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a href="http://www.slideshare.net/ellisike"&gt;Ike Ellis&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-9120581641688707880?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/9120581641688707880/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=9120581641688707880' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/9120581641688707880'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/9120581641688707880'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/12/day-of-azure-ii-talk-sql-azure-survey.html' title='Day Of Azure II Talk - SQL Azure Survey'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1104095745512191223</id><published>2010-12-02T00:00:00.000-08:00</published><updated>2010-12-03T10:06:07.231-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure Data Sync'/><title type='text'>A Lap Around SQL Azure Data Sync - Step By Step Example</title><content type='html'>SQL Azure Data Sync is a cloud-based service, hosted on Microsoft SQL Azure, which allows many SQL Azure databases to stay consistent with one another.  This capability is ideal for a project I’m currently working on where the users need low latency data access across an entire company but they are geographically separated by great distances with one office in USA and one in Europe. SQL Azure Data Sync allows them to have consistently synchronized data physically close to both locations.&lt;br /&gt;&lt;br /&gt;SQL Azure Data Sync is super simple to setup (try saying that five times fast).  In this article, I’ll show you how to implement a data synchronization between two databases on the same logical SQL Azure server.  We’ll be implementing the design in the diagram below.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncdiagram.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 500px; height: 250px;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncdiagram.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;STEP 1 – Signup for SQL Azure&lt;/strong&gt;&lt;br /&gt;If you need some guidance on how to do that, follow this link:&lt;br /&gt;&lt;a href="http://www.microsoft.com/downloads/en/confirmation.aspx?displaylang=en&amp;FamilyID=241c4498-3aa0-42a6-a083-cbc2f7a7bdb4"&gt;SQL Azure Signup Tutorial&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;As of this writing (AOTW), Microsoft is literally giving SQL Azure away (Web Edition – 1GB), so you really have no excuse on why you haven’t signed up yet.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;STEP 2 – Create Two Databases&lt;/strong&gt;&lt;br /&gt;OK, here’s where you might get charged.  For this example, we’ll create two databases that will sync with each other, and you might get charged when you add the second database.  When we're finished, you may want to delete one or both databases to keep costs down.  Database usage is metered per day, so your bill should be less than $1, but I haven’t confirmed that.&lt;br /&gt;&lt;br /&gt;You create a database by following these steps:&lt;br /&gt;&lt;br /&gt;a) Go to &lt;a href="http://sql.azure.com"&gt;http://sql.azure.com&lt;/a&gt;.  Click on the project you created in Step 1.&lt;br /&gt;&lt;br /&gt; &lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/projectselection.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 700px; height: 230px;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/projectselection.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;b) First you’ll see just the Master database.  That doesn’t do us much good, since SQL Azure doesn’t allow us to add tables to the Master Database.  &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/masterdb.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 600px; height: 350px;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/masterdb.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;We need two more databases.    Click on “Create Database.”  The dialog below will pop up.  Type in library1, and click “Create.”  Do the same for the library2 database.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/createdatabase.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 493px; height: 192px;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/createdatabase.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;When you are finished, your console should look like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/bothdatabases.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 75%; height: 75%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/bothdatabases.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;Now you have two blank databases.  Let’s add some schema and data to library1, then we'll configure SQL Azure Data Sync to copy them over to library2.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;STEP 3 – Add Schema and Data to Library1.&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We’ll use SQL Server Management Studio (SSMS) to add the schema and data, though we could have easily used Visual Studio, SQLCMD, or even BCP.&lt;br /&gt;&lt;br /&gt;Connect to SQL Azure using your server name, user name, and password.  Don’t worry, it’s all encrypted when connecting to SQL Azure.  Make sure your internal firewall allows port 1433 to pass through to SQL Azure.  AOTW, SQL Azure’s TCP port cannot be adjusted, so don’t bother trying to look up how to change it.  It’s a tough break that network admins at many organizations unilaterally block that port.&lt;br /&gt;&lt;br /&gt;Your SSMS connection dialog will look something like this:&lt;br /&gt; &lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/ssmsconnection.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 50%; height: 50%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/ssmsconnection.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Once you’re connected, run this script to create two tables.  You’ll notice that the TITLES table references the AUTHORS table.  That will be important later.&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:black"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;CREATE TABLE &lt;/span&gt;&lt;span style="color:black"&gt;authors&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;id &lt;/span&gt;&lt;span style="color:blue"&gt;INT PRIMARY KEY&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;name &lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;100&lt;/span&gt;&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;span style="color:blue"&gt;DEFAULT&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;''&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;CREATE TABLE &lt;/span&gt;&lt;span style="color:black"&gt;titles&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;id &lt;/span&gt;&lt;span style="color:blue"&gt;INT PRIMARY KEY&lt;br&gt;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;name &lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;100&lt;/span&gt;&lt;span style="color:gray"&gt;) &lt;/span&gt;&lt;span style="color:blue"&gt;DEFAULT&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;11&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;authorId &lt;/span&gt;&lt;span style="color:blue"&gt;INT REFERENCES &lt;/span&gt;&lt;span style="color:black"&gt;authors&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;id&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;INSERT INTO &lt;/span&gt;&lt;span style="color:black"&gt;authors&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'1'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'Stephen King'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:red"&gt;'2'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'George RR Martin'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:red"&gt;'3'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'Neal Stephenson'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:red"&gt;'4'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'Steig Larsson'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;INSERT INTO &lt;/span&gt;&lt;span style="color:black"&gt;titles&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;VALUES&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'1'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'A Game of Thrones'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'2'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:red"&gt;'2'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'A Clash of Kings'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'2'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:red"&gt;'3'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'The Song of Susannah'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'1'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;, (&lt;/span&gt;&lt;span style="color:red"&gt;'4'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'The Gunslinger'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'1'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;There are a couple of things to notice about this script.  One, each table in SQL Azure needs a clustered index.  I’m creating one by specifying a primary key in the create table statement.  AOTW, SQL Azure will allow you to create a table without a clustered index, but it won’t allow you to insert data into it, so there’s no reason to bother to even create the heap table.  Two, I like the insert syntax where we can insert multiple rows after the VALUES keyword.  That’s not SQL Azure specific, I just think it’s cool.&lt;br /&gt;&lt;br /&gt;We have two databases, one filled with tables and data and one empty.  Let’s fix that and get to the meat of this demo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;STEP 4 – Setup SQL Azure Data Sync.&lt;/strong&gt;&lt;br /&gt;a) Goto &lt;a href="http://www.sqlazurelabs.com/"&gt;http://www.sqlazurelabs.com/&lt;/a&gt; and click on “SQL Azure Data Sync”&lt;br /&gt;&lt;br /&gt;b) You’ll need to sign in to Windows Live ID.&lt;br /&gt;&lt;br /&gt;c) The first time you go to this site, you’ll have to agree to a license agreement.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncagreement.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 75%; height: 75%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncagreement.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;d) Click “Add New”.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncaddnew.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 75%; height: 75%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncaddnew.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;e) Name the Sync Group "LibrarySync".  I don’t know the limit of how long this name can be, but I’ve thrown in a lot of text in there and it took it.  I wonder if it’s varchar(max).   Then click “Next”.&lt;br /&gt;&lt;br /&gt;f) Register your server by typing in your server name, user name, and password.  Notice how in red it says “Your credentials will be stored in an encrypted format.”  This is good news because it saves your credentials when registering other databases on the same server.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncregisternew.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 75%; height: 75%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncregisternew.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;g) Then click “Add Hub”.  The Hub database is similar to a publishing database in replication.  For instance, it will win if there are any update conflicts.&lt;br /&gt;&lt;br /&gt;h) Then choose the library2 database and click “Add Member”.  Your screen should look something like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncbothdatabases.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 75%; height: 75%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncbothdatabases.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;i) Then click “Next”.&lt;br /&gt;&lt;br /&gt;j) You’ll get to a screen that looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasynctableselection.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 75%; height: 75%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasynctableselection.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;The order you select the tables in this screen is the same order that the tables will be replicated.  Remember that we have a foreign key constraint, so it’s real important that we add the authors table before we add the titles table.  Click “Finish".&lt;br /&gt;&lt;br /&gt;k) OK, now it seems like you’re done, but you’re not.  Click on “LibrarySync” and then click “Schedule Sync”.  Notice the options you have for scheduling synchronization.  You can sync hourly, daily, etc.  If you choose hourly, the “Minute” dropdown does not let you schedule at a minute interval, rather it allows you to choose the minute after the hour that the sync will begin.  Click “OK”.&lt;br /&gt; &lt;br /&gt;&lt;a href="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncschedule.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 75%; height: 75%;" src="http://www.ellisteam.net/blogimage/sqlazuredatasync/datasyncschedule.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;l) Technically, your sync is ready to go, but click “Sync Now” and wait a minute or two so we can examine the changes.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 5 – Examine the Changes&lt;/strong&gt;&lt;br /&gt;a) Notice the library2 database has all the schema and data from library1.  It also has some other things that SQL Azure Data Sync added for us.  &lt;strong&gt;BAM!&lt;/strong&gt;  We did it!&lt;br /&gt;&lt;br /&gt;b) Look at the 3 tables that SQL Azure Data Sync added in both databases.  These tables seem to track sync and schema information.&lt;br /&gt;       a.  Schema_info &lt;br /&gt;       b.  Scope_config&lt;br /&gt;       c.  Scope_info&lt;br /&gt;&lt;br /&gt;c) Each user table gets its own tracking table.  For instance, we have authors_tracking and titles_tracking.  This tells SQL Azure Data Sync which records need to be updated on the other members of the sync group.  Notice how this is not an auditing tool like Change Data Capture.  It works more like Change Tracking in SQL Server 2008.  You won’t get all the changes that led up to the final state of the data.  &lt;br /&gt;&lt;br /&gt;d) Each user table gets three triggers that are used to keep the databases consistent.&lt;br /&gt;&lt;br /&gt;e) There are many stored procedures added to both databases for the same reason.  Feel free to poke around and examine the triggers and stored procedures.  I found them to be cleanly written.  I like how they’re using the MERGE statement, introduced in SQL Server 2008.&lt;br /&gt;&lt;br /&gt;f) Feel free to add a record to Library2, and click “Sync Now”.  You’ll see it in Library1 in no time, thus proving that the synchronization is indeed bi-directional.&lt;br /&gt;&lt;br /&gt;g) On the SQL Azure Data Sync Page, check out the synchronization log by clicking on the Dashboard button.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Final Thoughts&lt;/strong&gt;&lt;br /&gt;At PDC 2010, Microsoft announced that this service will extend to on-premise SQL Servers.  They demo’d how it’s done through an agent that’s installed on the on-premise SQL Server.  It should be available to use in CTP 2, which is not publicly available AOTW.&lt;br /&gt;&lt;br /&gt;Also, although the initial snapshot pushed the schema down to the library2 database, it will not keep schema in sync without tearing down the sync group and rebuilding it.  I recommend you finalize your schema before setting up the sync group.&lt;br /&gt;&lt;br /&gt;This is built on the Microsoft Sync Framework.  I believe we’ll be seeing this used to synchronize all sorts of data from all sorts of data sources.  I think it’s worth learning and I hope this gives you a fair introduction to the technology.   Remember to delete at least one of your library databases to keep from being charged.  Also, delete your data sync.  Good luck!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1104095745512191223?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1104095745512191223/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1104095745512191223' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1104095745512191223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1104095745512191223'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/12/lap-around-sql-azure-data-sync-step-by.html' title='A Lap Around SQL Azure Data Sync - Step By Step Example'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6597758529840414347</id><published>2010-12-01T23:07:00.000-08:00</published><updated>2010-12-03T17:38:42.800-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='TIG'/><title type='text'>TIG</title><content type='html'>&lt;h1&gt;San Diego Technology Immersion Group (TIG) info&lt;/h1&gt;&lt;br /&gt;&lt;a href="http://www.sandiegodotnet.com/"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 43px;" src="http://2.bp.blogspot.com/_wtQnQ0Is4lk/TPiagdh-fDI/AAAAAAAAAF0/WKBfp5SqjDQ/s320/SanDiegoLogo_21_withgordonremovingshadows.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5546352823580392498" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;strong&gt;WHERE:&lt;/strong&gt;&lt;br /&gt;Robert Half Technology&lt;br /&gt;4365 Executive Drive&lt;br /&gt;Suite 450&lt;br /&gt;San Diego, CA 92121&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WHEN:&lt;/strong&gt;&lt;br /&gt;4th Wednesday of every month at 5:45pm, doors lock at 6pm, so don't be late.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;WHAT:&lt;/strong&gt;&lt;br /&gt;We meet once a month to discuss the same book we're all reading.&lt;br /&gt;Those books are chosen off from a range of topics centered on Microsoft Development Technology. &lt;br /&gt;We usually get about 50 members each month. &lt;br /&gt;Right now, we are studying C# and .NET for our beginner track.&amp;nbsp; We'll do that through January&lt;br /&gt;Starting in February, we will study WPF, XAML, and Silverlight. &lt;br /&gt;Members help each other overcome stumbling blocks while learning new technology.&lt;br /&gt;In addition, we have mentors (experts) helping us understand all this new stuff.&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;MENTORS:&lt;/strong&gt;&lt;br /&gt;Ike Ellis&lt;br /&gt;Twitter: &lt;A href="http://twitter.com/EllisTeam1"&gt;http://twitter.com/EllisTeam1&lt;/a&gt;&lt;br /&gt;Blog: &lt;A href="http://ellisteam.blogspot.com/"&gt;http://ellisteam.blogspot.com&lt;/A&gt;&lt;br /&gt;Website: &lt;A href="http://www.ellisteam.net/"&gt;http://www.ellisteam.net&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Scott Reed&lt;BR&gt;Twitter:&amp;nbsp; &lt;A href="http://twitter.com/mscottreed"&gt;http://twitter.com/mscottreed&lt;/A&gt; &lt;br /&gt;Blog:&amp;nbsp; &lt;A href="http://brainhzsoftware.com/blog/"&gt;http://brainhzsoftware.com/blog/&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Brad Cunningham&lt;br /&gt;Twitter: &lt;A href="http://twitter.com/Foovanadil"&gt;http://twitter.com/Foovanadil&lt;/A&gt;&lt;br /&gt;Blog: &lt;A href="http://www.bradcunningham.net/"&gt;http://www.bradcunningham.net/&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Jim Bears&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;OTHER STUFF:&lt;/strong&gt;&lt;br /&gt;Email Ike to get on the email list so you know about future meetings.&amp;nbsp; Also, join google groups: &lt;A href="/group/sdtig"&gt;http://groups.google.com/group/sdtig&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;SPECIAL THANKS:&lt;/strong&gt;&lt;br /&gt;To Robert Half Technologies for donating our meeting space.&lt;br /&gt;To O'Reilly for donating our first book to all of us, Head First C#&lt;br /&gt;&lt;br /&gt;&lt;a href=" http://www.oreilly.com/store/"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 120px; height: 240px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/TPiaz7Q7CYI/AAAAAAAAAF8/Fws8AO2pLbU/s320/ug_discount_120x240.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5546353157979441538" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6597758529840414347?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6597758529840414347/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6597758529840414347' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6597758529840414347'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6597758529840414347'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/12/san-diego-tech-immersion-group-tig.html' title='TIG'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wtQnQ0Is4lk/TPiagdh-fDI/AAAAAAAAAF0/WKBfp5SqjDQ/s72-c/SanDiegoLogo_21_withgordonremovingshadows.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1863956154044357739</id><published>2010-11-21T12:32:00.000-08:00</published><updated>2010-11-29T16:31:09.516-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><title type='text'>SQL Azure Connection Error with SSIS, SSAS</title><content type='html'>Today, I was playing around with making a small cube out of the data in the sys.bandwidth_usage table in SQL Azure, and I got an error message which reads:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"Test Connection failed because of an error in initializing provider.  Server Name cannot be deteremined.  It must appear as the first segment of the server's dns name (servername.database.windows.net.)  Some libraries do not send the server name, in which case the server name must be included as part of the user name (username@servername).  In addition, if both formats are used, the server names must match."&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/TOm7e14aZ4I/AAAAAAAAAFs/BaCnA_HnCBQ/s1600/AzureConnectionError.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 640px; height: 160px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/TOm7e14aZ4I/AAAAAAAAAFs/BaCnA_HnCBQ/s1600/AzureConnectionError.png" border="0" alt="Test Connection failed because of an error in initializing provider.  Server Name cannot be deteremined.  It must appear as the first segment of the server's dns name (servername.database.windows.net.)"id="BLOGGER_PHOTO_ID_5542166954990266242" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I solved this the way the error says to solve it, by adding what was in the server name field after the user name in the user name field.  I also noticed that it can be solved by switching to the native .NET provider, and not using the server name in the user name.  I played with the data source in SSIS, too, and it works the same way.  Interestingly, SSRS chooses a native .NET SQL provider by default, and therefore doesn't have this problem.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1863956154044357739?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1863956154044357739/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1863956154044357739' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1863956154044357739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1863956154044357739'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/sql-azure-connection-error-wrong.html' title='SQL Azure Connection Error with SSIS, SSAS'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/TOm7e14aZ4I/AAAAAAAAAFs/BaCnA_HnCBQ/s72-c/AzureConnectionError.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4307385719226686494</id><published>2010-11-20T08:43:00.000-08:00</published><updated>2010-11-20T10:29:47.291-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><title type='text'>SQL Azure: AOTW = As Of This Writing</title><content type='html'>I'm using a new acronym now.  Because SQL Azure is changing so much, and I find myself saying and thinking "As Of This Writing, I'm just shortening it to AOTW.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4307385719226686494?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4307385719226686494/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4307385719226686494' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4307385719226686494'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4307385719226686494'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/sql-azure-aotw.html' title='SQL Azure: AOTW = As Of This Writing'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-7937995320573217538</id><published>2010-11-20T08:37:00.000-08:00</published><updated>2010-11-20T08:43:17.092-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><title type='text'>SQL Azure Deprecating sysLogins</title><content type='html'>There is no sysLogins in SQL Azure.  To find out a list of your SQL login accounts use:&lt;br /&gt;&lt;br /&gt;select * from sys.sql_logins&lt;br /&gt;&lt;br /&gt;The sys.sql_logins dmv doesn't work either.  I assume both of these have been taken out because there are no active directory users AOTW.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-7937995320573217538?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/7937995320573217538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=7937995320573217538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7937995320573217538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7937995320573217538'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/sql-azure-deprecating-syslogins.html' title='SQL Azure Deprecating sysLogins'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1257540486901603009</id><published>2010-11-18T12:00:00.000-08:00</published><updated>2010-11-18T13:24:52.059-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Best Agile Tools - By Blog Favorite - Woody Zuill</title><content type='html'>Here we go again.  I asked Woody what his favorite agile tools/blogs are.  This was his very well thought out answer (the bolding is my own):&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"I don't pay much attention to the Agile blogs - there is a LOT OF NOISE out there with people giving advice about stuff they have insufficient (or no) experience to give advice about, and probably very few people available for taking that advice anyway.  Many of the "blogs" are merely lame marketing efforts.  The most solid of the bloggers are worth reading - but I don't typically follow them, but I'm more likely to click a link to an article if it is from a blogger who is someone I respect.  &lt;br /&gt; &lt;br /&gt;Tools for managing an Agile effort are another matter.  &lt;br /&gt; &lt;br /&gt;My one general rule about Agile Tools is DON'T (if the tool is in the form of a computer application).  There are better alternatives. (I am not talking about refactoring tools, testing tools, etc. here - but the management tools, the communication tools, things like that).&lt;br /&gt; &lt;br /&gt;Agile is best done manually, and the computerized management tools will in most cases be counter-productive IMHO. (Or IMNSHO - which is In My Not So Humble Opinion).  &lt;br /&gt; &lt;br /&gt;In a nutshell: You learn Agile by study and practice and doing and talking about the doing and so on. Tools often block learning by forcing you to follow what someone else decided is useful.  Tools needlessly complicate the simplicity of Agile.  Simplify, simplify.&lt;br /&gt; &lt;br /&gt;Like the Agile Manifesto says: &lt;strong&gt;We value Individuals and Interactions over Processes and Tools.  &lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;I take that to at least partly mean that we get a lot more value out of focusing on empowering Individuals and improving our ability to interact well as individuals than on following some Process or using some Tool. &lt;br /&gt; &lt;br /&gt;I have only one rock solid, immutable rule, however (that I reserve the right to change anytime): &lt;strong&gt;Continuously Inspect and Adapt &lt;/strong&gt;- continuous improvement of our thinking, our understanding, how we learn, how we get along, our principles, our practices, our processes, our tools, etc.   &lt;br /&gt; &lt;br /&gt;So, if I found a tool that looks like it would bring me value, I would certainly investigate it, try it, and use it if it proves to be userful.  And I would continually evaluate its usefulness.  But typically - I follow the rule of DON'T when it comes to computerized Agile management tools.&lt;br /&gt; &lt;br /&gt;Right now, &lt;strong&gt;my favorite tools continue to be physical ones - white boards and erasable markers, sticky notes (small) and sticky notes (huge), 3 x 5 index cards and Sharpies, face-to-face interactions and information radiators, blank flip charts and  a digital camera&lt;/strong&gt;, eye of newt and toe of frog (to paraphrase Shakespeare)."&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1257540486901603009?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1257540486901603009/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1257540486901603009' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1257540486901603009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1257540486901603009'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/best-agile-tdd-scrum-tools-by-blog.html' title='Best Agile Tools - By Blog Favorite - Woody Zuill'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1631684282534237213</id><published>2010-11-17T09:54:00.001-08:00</published><updated>2010-11-17T10:23:08.666-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Videos'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Azure'/><title type='text'>TechEd Berlin 2010 - Link to Videos on SQL Azure and SQL Server</title><content type='html'>I didn't get a chance to go to TechEd Berlin, but I've been watching the videos online.  The user interface to the website is not super great.  I shouldn't complain too much.  I'm super grateful that they posted all the videos from that week online so quickly.  By comparison, it will take two weeks to get the SQL Pass 2010 videos online.&lt;br /&gt;&lt;br /&gt;Here's where the SQL Azure videos start (page 19 of the video list):&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/Page19/"&gt;http://www.msteched.com/2010/Europe/Page19/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SQL Azure Reporting videos are on page 20:&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/Page20/"&gt;http://www.msteched.com/2010/Europe/Page20/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Here is where the SQL videos start (page 18):&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/Page18/"&gt;http://www.msteched.com/2010/Europe/Page18/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SQL Videos for BI/PowerPivot etc (page 21):&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/Page21/"&gt;http://www.msteched.com/2010/Europe/Page21/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;There were a few other presentations that I thought would be interesting to the SQL developer/DBA:&lt;br /&gt;Introduction to PowerShell&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/WSV301"&gt;http://www.msteched.com/2010/Europe/WSV301&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;SSRS 2008R2 Integration with SharePoint 2010&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/OFS330"&gt;http://www.msteched.com/2010/Europe/OFS330&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Creating Self-Service Analytic BI Applications with SharePoint 2010&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/OFS206"&gt;http://www.msteched.com/2010/Europe/OFS206&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Code First Development with Entity Framework&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/DEV212"&gt;http://www.msteched.com/2010/Europe/DEV212&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Building Business Applications with Visual Studio LightSwitch (which seems to be the MS Access front end for SQL Server....it's super cool.)&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/DEV206"&gt;http://www.msteched.com/2010/Europe/DEV206&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The Future of C#&lt;br /&gt;&lt;a href="http://www.msteched.com/2010/Europe/DEV301"&gt;http://www.msteched.com/2010/Europe/DEV301&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Phew, that ought to keep us busy for a long time.  Have fun and happy watching!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1631684282534237213?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1631684282534237213/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1631684282534237213' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1631684282534237213'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1631684282534237213'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/teched-berlin-2010-link-to-videos-on.html' title='TechEd Berlin 2010 - Link to Videos on SQL Azure and SQL Server'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-7063315702611232327</id><published>2010-11-04T10:58:00.000-07:00</published><updated>2011-03-17T20:01:56.673-07:00</updated><title type='text'>Finding The Difference Between Two Dates that are in Seperate Rows in T-SQL</title><content type='html'>This problem is often solved with a cursor, but is easily re-written using a CTE.  In the below sample, we are using data from a university who's trying to figure out the time between when a course ended and when the next course began.  So the data looks something like this:&lt;br /&gt;learnerID       StartDate                  CompletedDate&lt;br /&gt;0000131801 2010-07-01 00:00:00.000    2010-09-23 00:00:00.000&lt;br /&gt;0000131801 2010-10-01 00:00:00.000    2010-12-24 00:00:00.000&lt;br /&gt;0000212970 2009-11-01 00:00:00.000    2010-01-24 00:00:00.000&lt;br /&gt;0000212970 2010-02-01 00:00:00.000    2010-04-26 00:00:00.000&lt;br /&gt;0000212970 2010-03-01 00:00:00.000    2010-05-24 00:00:00.000&lt;br /&gt;0000212970 2010-06-01 00:00:00.000    2010-08-24 00:00:00.000&lt;br /&gt;0000212970 2010-07-01 00:00:00.000    2010-09-23 00:00:00.000&lt;br /&gt;0000212970 2010-10-01 00:00:00.000    2010-12-24 00:00:00.000&lt;br /&gt;&lt;br /&gt;and the query that will give them the average days between a course ending and the next course starting looks like this:&lt;br /&gt;&lt;br /&gt;with lc&lt;br /&gt;as&lt;br /&gt;(&lt;br /&gt; select row_number() over (order by learner_id, start_date, learner_course_id) as rownum&lt;br /&gt;  , learner_course_id&lt;br /&gt;  , learner_id&lt;br /&gt;  , start_date&lt;br /&gt;  , coalesce(completed_date, end_date) as CompletedDate&lt;br /&gt; from learner_courses&lt;br /&gt;)&lt;br /&gt;select datediff(d, lc1.completeddate, lc2.start_date) as daysbetweenstarts, *&lt;br /&gt;from lc lc1&lt;br /&gt;join lc lc2 &lt;br /&gt;on lc1.learner_id = lc2.learner_id &lt;br /&gt; and lc2.rownum = (lc1.rownum + 1)&lt;br /&gt;where datediff(d, lc1.completeddate, lc2.start_date) &gt; -1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-7063315702611232327?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/7063315702611232327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=7063315702611232327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7063315702611232327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7063315702611232327'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/finding-difference-between-two-dates.html' title='Finding The Difference Between Two Dates that are in Seperate Rows in T-SQL'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6300426535496364934</id><published>2010-11-03T13:26:00.000-07:00</published><updated>2010-11-18T07:32:26.414-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Best Books on TDD, Agile, and SCRUM by Woody Zuill</title><content type='html'>My friend, Woody Zuill, is a developer and manager that I respect an awful lot.  Recently he was asked to recommend great books on agile software development.  Since Woody is always reading, he seemed like a great guy to ask.  His response was thoughtful and interesting, so I thought I'd post it below:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"The books I've found useful all have holes in them.  You have to get a fair amount of bad to get a small amount of good.&lt;br /&gt; &lt;br /&gt;- For me, the Lean books by the Poppendiecks were probably the most good with the least bad. &lt;br /&gt; &lt;br /&gt;- Kent Beck's XP book - both editions.  I think you need both to get it all.  These books have been very useful to me.  A lot more real stuff and real thinking than most of the "How To Agile" books.&lt;br /&gt; &lt;br /&gt;- Kent Beck's TDD book&lt;br /&gt; &lt;br /&gt;- The second edition of Alistair Cockburn's book - Agile Software Development: The Cooperative Game.  I think the first edition missed the boat in a lot of things.  I think he must have learned a lot by the time the second edition came out. I don't know how experienced he actually is, but I like the nature of his book.  Note: His book on How to Survive an OOP project was one of the worst books I have seen.&lt;br /&gt; &lt;br /&gt;- Of course, Michael Feather's Legacy Code book is great.  I recommend that for all developers.&lt;br /&gt; &lt;br /&gt;- And Bob Martin's Clean Code and Agile Software Development books are must reads.  The Bob Martin Agile book is overall probably the most useful book I've read (on software development) - but it is a hard read in some ways, and very difficult to sort through.&lt;br /&gt; &lt;br /&gt;- I found Diana Larsen and Esther Derby's Agile Retrospectives book very useful to adjust my thinking about making teams work well.&lt;br /&gt; &lt;br /&gt;I used to like Mike Cohn's books on estimating and so on - but only barely.  Not so much anymore.  Same with Ken Schwaber's Scrum books, in some ways I wish they were never written.&lt;br /&gt; &lt;br /&gt;I'ver read about 20 or 30 books on the topic, and flipped through a lot of others.  Most are misleading at best.  Knowing what I know about things in general, I suspect a lot of this garbage is written by people who don't really know what they are talking about and aren't able to admit it to themselves.  I want to believe that - otherwise the authors are being purposely misleading or deceptive and I am not ready to accept that.&lt;br /&gt; &lt;br /&gt;There is one book that I really loved, and felt the guy was actually right on - but I searched all over the Internet tonight looking for it and couldn't find it.  When I get home I'll look around and see if I can find it. [ I found it: "Sustainable Software Development: An Agile Perspective" by Kevin Tate.  I must have "loaned" it to someone because I couldn't find it anywhere at home.  I remember it as being very good and humble - but I read it about 5 years ago and haven't seen it since so a re-read is in order, and I reserve the right to change my mind about its usefulness. ]&lt;br /&gt; &lt;br /&gt;Well... there have been a lot of good in a lot of those (and other) books.  And for me, the main use was to help me think through things.  There is a lot of garbage to sift through, though."&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Great stuff, huh?  Below are links to all the books he references in the email:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Kent-Beck/e/B000APC0EY/ref=sr_ntt_srch_lnk_1?qid=1288816174&amp;sr=8-1"&gt;Kent Beck's Books&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Agile-Software-Development-Cooperative-Game/dp/0321482751/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1288816269&amp;sr=1-1"&gt;Agile Software Development: The Cooperative Game&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1288816310&amp;sr=1-1"&gt;Working Effectively with Legacy Code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Robert-C.-Martin/e/B000APG87E/ref=sr_ntt_srch_lnk_1?qid=1288816350&amp;sr=1-1"&gt;Bob Martin's Books&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1288816376&amp;sr=1-1"&gt;Clean Code&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Agile-Retrospectives-Making-Teams-Great/dp/0977616649/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1290094283&amp;sr=8-1"&gt;Esther Derby's Agile Retrospectives&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Mike-Cohn/e/B001H6MN56/ref=sr_ntt_srch_lnk_1?qid=1288816499&amp;sr=1-1"&gt;Mike Cohn's Books&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And the gem:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.amazon.com/Sustainable-Software-Development-Agile-Perspective/dp/0321286081/ref=sr_1_1?s=books&amp;ie=UTF8&amp;qid=1288816548&amp;sr=1-1"&gt;Sustainable Software Development&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6300426535496364934?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6300426535496364934/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6300426535496364934' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6300426535496364934'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6300426535496364934'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/best-books-on-tdd-agile-and-scrum-by.html' title='Best Books on TDD, Agile, and SCRUM by Woody Zuill'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4301991723688737184</id><published>2010-11-02T17:25:00.000-07:00</published><updated>2010-11-02T17:27:24.504-07:00</updated><title type='text'>T-SQL - Split Long String into Several Small Strings</title><content type='html'>This is a fantastic little function:&lt;br /&gt;&lt;br /&gt;CREATE FUNCTION dbo.Split (@sep char(1), @s varchar(8000)) &lt;br /&gt;RETURNS table &lt;br /&gt;AS &lt;br /&gt;RETURN ( &lt;br /&gt;    WITH Pieces(pn, start, stop) AS ( &lt;br /&gt;      SELECT 1, 1, CHARINDEX(@sep, @s) &lt;br /&gt;      UNION ALL &lt;br /&gt;      SELECT pn + 1, stop + 1, CHARINDEX(@sep, @s, stop + 1) &lt;br /&gt;      FROM Pieces &lt;br /&gt;      WHERE stop &gt; 0 &lt;br /&gt;    ) &lt;br /&gt;    SELECT pn, &lt;br /&gt;      SUBSTRING(@s, start, CASE WHEN stop &gt; 0 THEN stop-start ELSE 8000 END) AS s &lt;br /&gt;    FROM Pieces &lt;br /&gt;  ) &lt;br /&gt;&lt;br /&gt;I found it here:&lt;br /&gt;&lt;br /&gt;&lt;A href="http://stackoverflow.com/questions/314824/t-sql-opposite-to-string-concatenation-how-to-split-string-into-multiple-recor"&gt;Stack Overflow&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;and here:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50648"&gt;SQLTeam&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4301991723688737184?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4301991723688737184/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4301991723688737184' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4301991723688737184'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4301991723688737184'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/t-sql-split-long-string-into-several.html' title='T-SQL - Split Long String into Several Small Strings'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-7165991586968689629</id><published>2010-11-01T13:48:00.000-07:00</published><updated>2010-11-01T13:56:26.069-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Replication'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='TimeMatters'/><title type='text'>TimeMatters Master Audit File Error</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_wtQnQ0Is4lk/TM8ovsnMTuI/AAAAAAAAAFk/r92RlBD6CFU/s1600/TimeMatters+Error.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 139px;" src="http://4.bp.blogspot.com/_wtQnQ0Is4lk/TM8ovsnMTuI/AAAAAAAAAFk/r92RlBD6CFU/s320/TimeMatters+Error.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5534687266956136162" /&gt;&lt;/a&gt;&lt;br/&gt;&lt;br /&gt;If you are running TimeMatters in a replicated environment and you get the error:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Unable to access Master Audit File  &lt;br /&gt;Record Audit will not be saved.&lt;br /&gt;&lt;br /&gt;ERROR:  The insert failed.  It conflicted with an identity range check constraint in database 'TimeMatters10', replicated table 'lntmuser.Audit.Current', column 'Ident'.  If the identity column is automatically managed by replication, update the range as follows: f&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The run the following command on the publisher and it should fix it:&lt;br /&gt;&lt;br /&gt;exec sp_adjustpublisheridentityrange @table_name = 'audit current', @table_owner =  'lntmuser'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-7165991586968689629?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/7165991586968689629/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=7165991586968689629' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7165991586968689629'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7165991586968689629'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/11/timematters-master-audit-file-error.html' title='TimeMatters Master Audit File Error'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wtQnQ0Is4lk/TM8ovsnMTuI/AAAAAAAAAFk/r92RlBD6CFU/s72-c/TimeMatters+Error.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-520867744009915903</id><published>2010-10-25T18:56:00.000-07:00</published><updated>2010-10-25T19:00:13.745-07:00</updated><title type='text'>LA Code Camp Files</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/TMY14mN81PI/AAAAAAAAAFc/XIWwGdba6h4/s1600/SCCC_Banner2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 42px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/TMY14mN81PI/AAAAAAAAAFc/XIWwGdba6h4/s320/SCCC_Banner2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5532168438719239410" /&gt;&lt;/a&gt;&lt;br /&gt;Hi There!&lt;br /&gt;&lt;br /&gt;Thanks for coming to my LA Code Camp session on SQL Server Performance Optimization.  I hope you had a great time, learned a lot, and left with action items that can immediately help you at work.&lt;br /&gt;&lt;br /&gt;Here's a link to the download files:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ellisteam.net/downloads/lacodecamp.zip"&gt;LA Code Camp.zip&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;See you soon!&lt;br /&gt;&lt;br /&gt;Ike&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-520867744009915903?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/520867744009915903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=520867744009915903' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/520867744009915903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/520867744009915903'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/10/la-code-camp-files.html' title='LA Code Camp Files'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/TMY14mN81PI/AAAAAAAAAFc/XIWwGdba6h4/s72-c/SCCC_Banner2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6976752978286150558</id><published>2010-10-25T18:36:00.001-07:00</published><updated>2010-10-25T18:47:50.606-07:00</updated><title type='text'>ID Columns With No Indexes</title><content type='html'>This is a really simple script that will tell you what columns with "ID" in the name don't have indexes.  Often, foreign key constraints are not added to the database.  I'm sure the referrential integrity is being enforced in the business logic of the application.  At least I hope so.  In any case, the optimizer still needs those columns to be indexed.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; * &lt;span class="kwrd"&gt;from&lt;/span&gt; sys.columns c &lt;br /&gt;    &lt;span class="kwrd"&gt;where&lt;/span&gt; c.name &lt;span class="kwrd"&gt;like&lt;/span&gt; &lt;span class="str"&gt;'%id%'&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;and&lt;/span&gt; c.object_id &lt;span class="kwrd"&gt;not&lt;/span&gt; &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;br /&gt;            (&lt;br /&gt;            &lt;span class="kwrd"&gt;select&lt;/span&gt; object_id &lt;span class="kwrd"&gt;from&lt;/span&gt; sys.index_columns&lt;br /&gt;            )&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Then I created this script to just go ahead and create a basic nonclustered index on those columns.  Just copy &amp; paste the results into a SQL Server Management Studio query window and run it.&lt;br /&gt;&lt;br /&gt;&lt;!-- code formatted by http://manoli.net/csharpformat/ --&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;&lt;br /&gt;&lt;span class="kwrd"&gt;select&lt;/span&gt; &lt;span class="str"&gt;'create nonclustered index  IX_'&lt;/span&gt; + t.name + &lt;span class="str"&gt;'_'&lt;/span&gt; + c.name + &lt;span class="str"&gt;'_001'&lt;/span&gt;&lt;br /&gt;    + &lt;span class="str"&gt;' ON '&lt;/span&gt; + schema_name(t.schema_id) + &lt;span class="str"&gt;'.'&lt;/span&gt; + t.name + &lt;span class="str"&gt;'('&lt;/span&gt; + c.Name + &lt;span class="str"&gt;');'&lt;/span&gt;&lt;br /&gt;    &lt;span class="kwrd"&gt;from&lt;/span&gt; sys.columns c &lt;br /&gt;    &lt;span class="kwrd"&gt;join&lt;/span&gt; sys.tables t &lt;br /&gt;        &lt;span class="kwrd"&gt;on&lt;/span&gt; c.object_id = t.object_id&lt;br /&gt;    &lt;span class="kwrd"&gt;where&lt;/span&gt; c.name &lt;span class="kwrd"&gt;like&lt;/span&gt; &lt;span class="str"&gt;'%id%'&lt;/span&gt;&lt;br /&gt;        &lt;span class="kwrd"&gt;and&lt;/span&gt; c.object_id &lt;span class="kwrd"&gt;not&lt;/span&gt; &lt;span class="kwrd"&gt;in&lt;/span&gt; &lt;br /&gt;            (&lt;br /&gt;            &lt;span class="kwrd"&gt;select&lt;/span&gt; object_id &lt;span class="kwrd"&gt;from&lt;/span&gt; sys.index_columns&lt;br /&gt;            ) &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;You'll want to include other columns in these indexes to make sure your indexes are covering the queries, but this should get you started.  Make sure the results are return in text, not grid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6976752978286150558?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6976752978286150558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6976752978286150558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6976752978286150558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6976752978286150558'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/10/id-columns-with-no-indexes.html' title='ID Columns With No Indexes'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5634899453413089835</id><published>2010-10-16T19:42:00.000-07:00</published><updated>2010-10-16T19:49:35.346-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><title type='text'>T-SQL Random Date</title><content type='html'>&lt;img style="float:right; margin:0 10px 10px 0;width: 320px; height: 138px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/TLpjsk5egjI/AAAAAAAAAFQ/zW1ulMkP-IQ/s320/imagesCAG0IRYN.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5528841110020850226" /&gt;&lt;br /&gt;I wrote this code to generate a random date between two dates. I wanted a random date for each row in a table. Use @beginDate and @endDate to specify the lower and upper bounds of the random date. The only tricky part is the checksum(newid()). You can try using the rand function without it, but you'll just get the same random date for every row in the table.&lt;br /&gt;&lt;br /&gt;declare @beginDate datetime, @endDate datetime&lt;br /&gt;set @beginDate = '1/1/2000'&lt;br /&gt;set @endDate = getdate()&lt;br /&gt;&lt;br /&gt;select dateadd(d, cast(-1 * datediff(d, @beginDate, @endDate)&lt;br /&gt;* rand(checksum(newid())) as int), @endDate)&lt;br /&gt;from sys.objects &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;If you want to update a date column with a random date, you can just do this:&lt;br /&gt;&lt;br /&gt;update Orders &lt;br /&gt;set orderdate = dateadd(d, cast(-1 * datediff(d, @beginDate, @endDate)&lt;br /&gt;* rand(checksum(newid())) as int), @endDate)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5634899453413089835?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5634899453413089835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5634899453413089835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5634899453413089835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5634899453413089835'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/10/t-sql-random-date.html' title='T-SQL Random Date'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/TLpjsk5egjI/AAAAAAAAAFQ/zW1ulMkP-IQ/s72-c/imagesCAG0IRYN.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6476456893733555406</id><published>2010-09-29T15:59:00.000-07:00</published><updated>2010-09-29T19:41:53.095-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Blind Spot - T-SQL  $Identity</title><content type='html'>I've been working with SQL Server for 12 years, but this short cut escaped me.&lt;br /&gt;&lt;br /&gt;In Transact-SQL, the $IDENTITY keyword allows us to refer to the identity column without knowing its name. Since identity columns are often primary keys, we could use this as a short cut for always referring to the PK. This would be awesome to use in a code generator or an ORM.&lt;br /&gt;&lt;br /&gt;This is not to be confused with @@IDENTITY or SCOPE_IDENTITY(), which tells us the actual number auto generated by the IDENTITY column (though each behaves in different ways.)&lt;br /&gt;&lt;br /&gt;Test it out with this script:&lt;br /&gt;&lt;br /&gt;use tempdb&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;create table test &lt;br /&gt;(&lt;br /&gt;id int identity(1,1)&lt;br /&gt;, descr varchar(100)&lt;br /&gt;)&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;insert into test&lt;br /&gt;(descr)&lt;br /&gt;values&lt;br /&gt;('first record')&lt;br /&gt;, ('second record')&lt;br /&gt;, ('third record')&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;select $identity, descr from test&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6476456893733555406?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6476456893733555406/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6476456893733555406' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6476456893733555406'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6476456893733555406'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/09/blind-spot-t-sql-identity.html' title='Blind Spot - T-SQL  $Identity'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8364008900700146659</id><published>2010-09-23T13:02:00.000-07:00</published><updated>2010-09-29T15:55:29.214-07:00</updated><title type='text'>TIG Notes</title><content type='html'>Yesterday at TIG I mentioned that the Visual Studio tips from Sara Ford had helped me to be a faster developer and worker.  Many of you asked where you could find her blog, so here it is:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/saraford/archive/2010/03/30/speaking-at-devdays-2010-in-the-netherlands-visual-studio-tips.aspx"&gt;Sara Ford's BLOG&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8364008900700146659?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8364008900700146659/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8364008900700146659' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8364008900700146659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8364008900700146659'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/09/sara-fords-blog.html' title='TIG Notes'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-82848774523642514</id><published>2010-09-23T12:51:00.001-07:00</published><updated>2010-09-23T12:53:34.928-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='San Diego .NET User Group'/><category scheme='http://www.blogger.com/atom/ns#' term='TIG'/><title type='text'>San Diego TIG - 2nd Meeting</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/TJuwBxUOCuI/AAAAAAAAAFI/x9TLwsEUJVg/s1600/SanDiegoLogo_21_withgordonremovingshadows.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 299px; height: 65px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/TJuwBxUOCuI/AAAAAAAAAFI/x9TLwsEUJVg/s320/SanDiegoLogo_21_withgordonremovingshadows.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5520199312737176290" /&gt;&lt;/a&gt;&lt;br /&gt;The Tech Immersion Group met last night, and we had a great time.  Next month, we'll be reading Head First C#, Chapters 6 - 8, and Lab 2.  We'll be meeting on October 27th.  &lt;br /&gt;&lt;br /&gt;We also setup a new Google Group.  DM me for an invitation.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-82848774523642514?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/82848774523642514/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=82848774523642514' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/82848774523642514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/82848774523642514'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/09/san-diego-tig-2nd-meeting.html' title='San Diego TIG - 2nd Meeting'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/TJuwBxUOCuI/AAAAAAAAAFI/x9TLwsEUJVg/s72-c/SanDiegoLogo_21_withgordonremovingshadows.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5224289160588199620</id><published>2010-09-13T18:12:00.000-07:00</published><updated>2010-09-13T18:18:27.432-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='TIG'/><title type='text'>San Diego Tech Immersion Group</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/TI7NMVDdYoI/AAAAAAAAAE8/fsewFblbq9U/s1600/sandiegologo21withgordonremovingshadows.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 299px; height: 65px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/TI7NMVDdYoI/AAAAAAAAAE8/fsewFblbq9U/s320/sandiegologo21withgordonremovingshadows.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5516572205269213826" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;TIG - Tech Immersion Group &lt;br /&gt;&lt;br /&gt;WHAT&lt;br /&gt;&lt;br /&gt;The Tech Immersion Group is founded on the belief that learning new technology can be fun.  Our first topic will be C# and .NET.  Future topics include Silverlight, SharePoint, WCF, Entity Framework, LINQ, and Azure.  The idea is as follows:&lt;br /&gt;&lt;br /&gt;1) We will meet monthly to discuss about 200 – 300 pages of a book we’ve chosen.&lt;br /&gt;&lt;br /&gt;2) We will stay with the same topic for several months (probably until we’re finished with the book.)&lt;br /&gt;&lt;br /&gt;3) We will study for certification exams together.&lt;br /&gt;&lt;br /&gt;4) We will write sample code and software projects.&lt;br /&gt;&lt;br /&gt;5) This will be a safe place where any question can be asked  (Ugh, I hope you get a good answer).&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;WHO&lt;br /&gt;&lt;br /&gt;All are welcome to join the group.  We do need to know who they are ahead of time so we can ensure a book is provided.  We’ve been able to get our first book donated by O’Reilly Press.  Hopefully, we can keep this sweet deal going.&lt;br /&gt;&lt;br /&gt;I’m Ike Ellis, and I’ve been writing software for 12 years.  Software I have written is currently in use by several thousand people.  I love to teach and I love to learn.  I can’t wait to meet you and get started on this together!&lt;br /&gt;&lt;br /&gt;THE COMMITMENT&lt;br /&gt;&lt;br /&gt;You will get a free book, free time from a mentor, and really valuable knowledge.  In return, we ask:&lt;br /&gt;&lt;br /&gt;1) That you show up on time and ready to learn.&lt;br /&gt;&lt;br /&gt;2) That you commit to being there every month.&lt;br /&gt;&lt;br /&gt;3) That you consider becoming a member of the San Diego .NET User Group ($50 annually.)&lt;br /&gt;&lt;br /&gt;4) That you write a review on Amazon regarding the book you got for free (This will keep the free books coming.)&lt;br /&gt;&lt;br /&gt;That’s it!  Let’s get ready to learn a ton!&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;&lt;br /&gt;Robert Half Technology&lt;br /&gt;4365 Executive Drive&lt;br /&gt;Suite 450&lt;br /&gt;San Diego, CA 92121&lt;br /&gt;&lt;br /&gt;WHEN&lt;br /&gt;&lt;br /&gt;The 4th Wednesday of every month.  Please be there at 5:45pm, as the doors to our building will lock by 6pm.  Don’t be late!&lt;br /&gt;&lt;br /&gt;Ike Ellis Contact Info&lt;br /&gt;Twitter: @EllisTeam1&lt;br /&gt;FaceBook: http://www.facebook.com/ellisike&lt;br /&gt;Linked In&lt;br /&gt;http://ellisteam.blogspot.com&lt;br /&gt;http://www.ellisteam.net&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;A BIG THANK YOU TO O'RIELLY FOR DONATING OUR BOOKS!!!  &lt;br /&gt;Visit them at http://www.oreilly.com.&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wtQnQ0Is4lk/TI7M4CH5qEI/AAAAAAAAAE0/mFIwY0YRcPw/s1600/front-logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 262px; height: 66px;" src="http://2.bp.blogspot.com/_wtQnQ0Is4lk/TI7M4CH5qEI/AAAAAAAAAE0/mFIwY0YRcPw/s320/front-logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5516571856590186562" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5224289160588199620?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5224289160588199620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5224289160588199620' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5224289160588199620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5224289160588199620'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/09/san-diego-tech-immersion-group.html' title='San Diego Tech Immersion Group'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/TI7NMVDdYoI/AAAAAAAAAE8/fsewFblbq9U/s72-c/sandiegologo21withgordonremovingshadows.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-379201338901295266</id><published>2010-09-08T09:19:00.001-07:00</published><updated>2010-09-29T19:42:33.831-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>T-SQL Session, Promised Script</title><content type='html'>Several people asked that I post this script on T-SQL fundementals:&lt;br /&gt;&lt;br /&gt;USE Northwind&lt;br /&gt;&lt;br /&gt;SELECT * &lt;br /&gt; FROM Customers;&lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; , ContactName&lt;br /&gt; , ContactTitle&lt;br /&gt; --, Address&lt;br /&gt; --, City&lt;br /&gt; --, Region&lt;br /&gt; --, PostalCode &lt;br /&gt; FROM Customers;&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; , ContactName&lt;br /&gt; , ContactTitle&lt;br /&gt; , Address&lt;br /&gt; , City&lt;br /&gt; , Region&lt;br /&gt; , PostalCode &lt;br /&gt; FROM Customers&lt;br /&gt; ORDER BY ContactName;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; , ContactName&lt;br /&gt; , ContactTitle&lt;br /&gt; , Address&lt;br /&gt; , City&lt;br /&gt; , Region&lt;br /&gt; , PostalCode &lt;br /&gt; FROM Customers&lt;br /&gt; ORDER BY CompanyName, ContactName DESC; --ASC is the default.&lt;br /&gt; &lt;br /&gt;SELECT CompanyName&lt;br /&gt; , ContactName&lt;br /&gt; , ContactTitle&lt;br /&gt; , Address&lt;br /&gt; , City&lt;br /&gt; , Region&lt;br /&gt; , PostalCode &lt;br /&gt; FROM Customers&lt;br /&gt; WHERE CompanyName = 'Alfreds Futterkiste'&lt;br /&gt; ORDER BY ContactName DESC; --ASC is the default.&lt;br /&gt; &lt;br /&gt;--Comparison Operators&lt;br /&gt;--=&lt;br /&gt;--&lt;&gt;&lt;br /&gt;--!=&lt;br /&gt;--&lt;&lt;br /&gt;--&lt;=&lt;br /&gt;--!&lt;&lt;br /&gt;--&gt;&lt;br /&gt;--&gt;=&lt;br /&gt;--!&gt;&lt;br /&gt;--BETWEEN&lt;br /&gt;--IS NULL&lt;br /&gt;&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight &lt;br /&gt; , ShippedDate &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE Freight &gt; 100;&lt;br /&gt;&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight &lt;br /&gt; , ShippedDate &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE Freight !&gt; '100';&lt;br /&gt;&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight &lt;br /&gt; , ShippedDate &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE Freight &lt;= '100' ;&lt;br /&gt; &lt;br /&gt;SELECT CustomerID&lt;br /&gt; , Region  &lt;br /&gt; FROM Customers&lt;br /&gt; WHERE Region &lt;&gt; NULL;&lt;br /&gt; &lt;br /&gt;SELECT CustomerID&lt;br /&gt; , Region  &lt;br /&gt; FROM Customers&lt;br /&gt; WHERE Region &lt;&gt; 'CA';&lt;br /&gt; &lt;br /&gt;SELECT CustomerID&lt;br /&gt; , Region &lt;br /&gt; FROM Customers&lt;br /&gt; WHERE Region &lt;&gt; 'CA' OR Region IS NOT NULL;&lt;br /&gt;&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight &lt;br /&gt; , ShippedDate  &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE Freight BETWEEN '10.14' AND '43.90'&lt;br /&gt; ORDER BY Freight ;&lt;br /&gt; &lt;br /&gt;--Logical Operators&lt;br /&gt;--AND&lt;br /&gt;--OR&lt;br /&gt;--NOT&lt;br /&gt;&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight &lt;br /&gt; , ShippedDate  &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE Freight BETWEEN '10.14' AND '43.90'&lt;br /&gt;  OR ShippedDate BETWEEN '1/1/1997' AND '12/1/1997'&lt;br /&gt; ORDER BY ShippedDate, Freight  ;&lt;br /&gt;  &lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight &lt;br /&gt; , ShippedDate &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE Freight BETWEEN '10.14' AND '43.90'&lt;br /&gt;  OR ShippedDate BETWEEN '1/1/1997' AND '12/1/1997'&lt;br /&gt; ORDER BY ShippedDate, Freight  ;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--I want all orders from CustomerID = VINET with a freight over $10 and all orders from CustomerID TOMSP with a freight over $10.&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight  &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE Freight &gt; '10'&lt;br /&gt;  AND CustomerID = 'VINET'&lt;br /&gt;  OR CustomerID = 'TOMSP' &lt;br /&gt;  ORDER BY CustomerID;&lt;br /&gt;&lt;br /&gt;--SQL is reading this from left to right.  So technically we can do this:&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight  &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE CustomerID = 'VINET'&lt;br /&gt;  AND Freight &gt; '10'&lt;br /&gt;  OR CustomerID = 'TOMSP'&lt;br /&gt;  AND Freight &gt; '10'&lt;br /&gt;  ORDER BY CustomerID;&lt;br /&gt;  &lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID&lt;br /&gt; , Freight &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE (CustomerID = 'VINET'&lt;br /&gt;  OR CustomerID = 'TOMSP')&lt;br /&gt;  AND Freight &gt; '10'&lt;br /&gt;  ORDER BY CustomerID;&lt;br /&gt;&lt;br /&gt;--IN Operator&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE (CustomerID = 'VINET'&lt;br /&gt;  OR CustomerID = 'TOMSP'&lt;br /&gt;  OR CustomerID = 'HANAR'&lt;br /&gt;  OR CustomerID = 'SUPRD');&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE CustomerID IN ('VINET', 'TOMSP', 'HANAR', 'SUPRD');&lt;br /&gt;&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , OrderID &lt;br /&gt; FROM Orders&lt;br /&gt; WHERE CustomerID NOT IN ('VINET', 'TOMSP', 'HANAR', 'SUPRD');&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;--WILDCARDS&lt;br /&gt;SELECT CompanyName&lt;br /&gt; FROM Customers &lt;br /&gt; WHERE CompanyName LIKE 'A%';&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; FROM Customers &lt;br /&gt; WHERE CompanyName LIKE '%A';&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; FROM Customers &lt;br /&gt; WHERE CompanyName LIKE '%A%';&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; FROM Customers &lt;br /&gt; WHERE CompanyName LIKE 'W%A';&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; FROM Customers &lt;br /&gt; WHERE CompanyName LIKE 'F%A%';&lt;br /&gt;&lt;br /&gt;SELECT CompanyName&lt;br /&gt; FROM Customers &lt;br /&gt; WHERE CompanyName LIKE '[FM]%';&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;SELECT CompanyName + ' - ' + ContactName &lt;br /&gt; + ' - ' + ContactTitle AS HeaderLine1&lt;br /&gt; FROM Customers&lt;br /&gt; WHERE CompanyName + ' - ' + ContactName &lt;br /&gt; + ' - ' + ContactTitle LIKE 'A%'&lt;br /&gt; ORDER BY HeaderLine1;&lt;br /&gt;&lt;br /&gt;--Order of Operation&lt;br /&gt;--1.FROM clause&lt;br /&gt;--2.WHERE clause&lt;br /&gt;--3.GROUP BY clause&lt;br /&gt;--4.HAVING clause&lt;br /&gt;--5.SELECT clause&lt;br /&gt;--6.ORDER BY clause &lt;br /&gt;&lt;br /&gt;--Calculated fields - Math&lt;br /&gt;SELECT&lt;br /&gt; OrderID&lt;br /&gt; , ProductID&lt;br /&gt; , UnitPrice&lt;br /&gt; , Quantity&lt;br /&gt; , UnitPrice * Quantity AS TotalPrice &lt;br /&gt; FROM [Order Details];&lt;br /&gt; &lt;br /&gt;--Math operators&lt;br /&gt;-- +, -, *, /&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--FUN WITH FUNCTIONS!&lt;br /&gt;&lt;br /&gt;--Figuring out envelope size for a mailing&lt;br /&gt;SELECT CompanyName&lt;br /&gt; , LEN(CompanyName) AS NumberOfChars &lt;br /&gt; FROM Customers;&lt;br /&gt;&lt;br /&gt;--Uppercase CompanyName&lt;br /&gt;SELECT UPPER(CompanyName) AS UpperCompany&lt;br /&gt; FROM Customers;&lt;br /&gt; &lt;br /&gt;--STRING FUNCTIONS&lt;br /&gt;--LTRIM, RTRIM&lt;br /&gt;--SUBSTRING&lt;br /&gt;--RIGHT&lt;br /&gt;--LEFT&lt;br /&gt;--SOUNDEX&lt;br /&gt;&lt;br /&gt;SELECT ContactName&lt;br /&gt; FROM Customers&lt;br /&gt; WHERE SOUNDEX(ContactName) = SOUNDEX('paul');&lt;br /&gt; &lt;br /&gt;--Date Functions&lt;br /&gt;--DATEDIFF&lt;br /&gt;--DATEADD&lt;br /&gt;--MONTH&lt;br /&gt;--YEAR&lt;br /&gt;--DATEPART&lt;br /&gt;&lt;br /&gt;--The difference between order date and ship date in days - T-SQL help is great with Functions - SHIFT-F1&lt;br /&gt;SELECT &lt;br /&gt; OrderDate&lt;br /&gt; , ShippedDate&lt;br /&gt; , DATEDIFF(d, OrderDate, ShippedDate) AS DaysToShip&lt;br /&gt; FROM Orders;&lt;br /&gt; &lt;br /&gt;--The orders that took longer than 15 days to ship&lt;br /&gt;SELECT &lt;br /&gt; OrderDate&lt;br /&gt; , ShippedDate&lt;br /&gt; , DATEDIFF(d, OrderDate, ShippedDate) AS DaysToShip&lt;br /&gt; FROM Orders&lt;br /&gt; WHERE DATEDIFF(d, OrderDate, ShippedDate) &gt; 15;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--Aggregates&lt;br /&gt;--MAX&lt;br /&gt;--MIN&lt;br /&gt;--SUM&lt;br /&gt;--AVG&lt;br /&gt;--COUNT&lt;br /&gt;--COUNT DISTINCT&lt;br /&gt;&lt;br /&gt;--Most recent Order Date&lt;br /&gt;SELECT MAX(OrderDate) AS MaxOrderDate&lt;br /&gt; FROM Orders;&lt;br /&gt; &lt;br /&gt;--First Order Date&lt;br /&gt;SELECT MIN(OrderDate) AS MaxOrderDate&lt;br /&gt; FROM Orders;&lt;br /&gt;&lt;br /&gt;--Let's combine this into a subquery&lt;br /&gt;SELECT OrderID &lt;br /&gt; FROM Orders &lt;br /&gt; WHERE OrderDate = &lt;br /&gt;  (&lt;br /&gt;   SELECT MAX(OrderDate) AS MaxOrderDate&lt;br /&gt;    FROM Orders&lt;br /&gt;  );&lt;br /&gt;&lt;br /&gt;--Max Days to Ship --Null values out of aggregation&lt;br /&gt;SELECT MAX(DATEDIFF(d, OrderDate, ShippedDate)) AS MaxDaysToShip&lt;br /&gt; FROM Orders;&lt;br /&gt;&lt;br /&gt;--Average Days to Ship&lt;br /&gt;SELECT AVG(DATEDIFF(d, OrderDate, ShippedDate)) AS MaxDaysToShip&lt;br /&gt; FROM Orders;&lt;br /&gt; &lt;br /&gt;--Orders above my average days to ship&lt;br /&gt;SELECT OrderID &lt;br /&gt; , CustomerID &lt;br /&gt; , OrderDate&lt;br /&gt; , ShippedDate&lt;br /&gt; , DATEDIFF(d, OrderDate, ShippedDate) AS DaysToShip&lt;br /&gt; FROM Orders&lt;br /&gt; WHERE DATEDIFF(d, OrderDate, ShippedDate) &gt; &lt;br /&gt;  (&lt;br /&gt;   SELECT AVG(DATEDIFF(d, OrderDate, ShippedDate)) AS MaxDaysToShip&lt;br /&gt;    FROM Orders&lt;br /&gt;  ) ;&lt;br /&gt;  &lt;br /&gt;&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , AVG(DATEDIFF(d, OrderDate, ShippedDate)) AS MaxDaysToShip&lt;br /&gt; FROM Orders&lt;br /&gt; GROUP BY CustomerID;&lt;br /&gt; &lt;br /&gt;--Customers with an average greater than the average&lt;br /&gt;SELECT CustomerID&lt;br /&gt; , AVG(DATEDIFF(d, OrderDate, ShippedDate)) AS MaxDaysToShip&lt;br /&gt; FROM Orders&lt;br /&gt; GROUP BY CustomerID&lt;br /&gt; HAVING AVG(DATEDIFF(d, OrderDate, ShippedDate)) &gt;= 15;&lt;br /&gt;&lt;br /&gt;--JOINS&lt;br /&gt;--INNER&lt;br /&gt;--RIGHT OUTER&lt;br /&gt;--LEFT OUTER&lt;br /&gt;&lt;br /&gt;--Inner Join&lt;br /&gt;SELECT c.CompanyName&lt;br /&gt; , c.CustomerID &lt;br /&gt; , o.OrderDate&lt;br /&gt; , o.ShippedDate&lt;br /&gt; FROM Customers c &lt;br /&gt; JOIN Orders o &lt;br /&gt;  ON c.CustomerID = o.CustomerID &lt;br /&gt; ORDER BY c.CompanyName&lt;br /&gt; &lt;br /&gt;--LEFT OUTER JOIN&lt;br /&gt;SELECT c.CompanyName&lt;br /&gt; , c.CustomerID &lt;br /&gt; , o.OrderDate&lt;br /&gt; , o.ShippedDate&lt;br /&gt; FROM Customers c &lt;br /&gt; LEFT OUTER JOIN Orders o &lt;br /&gt;  ON c.CustomerID = o.CustomerID &lt;br /&gt; WHERE o.CustomerID IS NULL&lt;br /&gt; ORDER BY c.CompanyName&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;SELECT * &lt;br /&gt; FROM Customers&lt;br /&gt; &lt;br /&gt;--CRUD&lt;br /&gt;INSERT INTO Customers &lt;br /&gt;(CustomerID, CompanyName)&lt;br /&gt;VALUES&lt;br /&gt;('ELLIS', 'EllisTeam')&lt;br /&gt;&lt;br /&gt;DELETE FROM Customers&lt;br /&gt;WHERE CustomerID = 'ELLIS'&lt;br /&gt;&lt;br /&gt;UPDATE Customers&lt;br /&gt; SET ContactName = 'Ike Ellis'&lt;br /&gt; &lt;br /&gt;SELECT * FROM Customers &lt;br /&gt; WHERE CustomerID = 'Ellis'&lt;br /&gt;&lt;br /&gt;DELETE FROM Customers &lt;br /&gt;WHERE CustomerID = 'ELLIS'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;UPDATE o&lt;br /&gt;SET Freight = Freight + 1&lt;br /&gt;FROM Customers AS c &lt;br /&gt; JOIN Orders AS o &lt;br /&gt;  ON c.CustomerID = o.CustomerID &lt;br /&gt; WHERE Region = 'CA'&lt;br /&gt; &lt;br /&gt;&lt;br /&gt;--Tips&lt;br /&gt;--================&lt;br /&gt;--Sometimes T-SQL doesn't read as intuitively as we like.  Use white space and comments.&lt;br /&gt;&lt;br /&gt;--Limit record results to as little as possible. (Good for network, disk, memory, users, and performance.)&lt;br /&gt;&lt;br /&gt;--Nulls&lt;br /&gt;&lt;br /&gt;--Connection Tips - Coloring and highlighting&lt;br /&gt;&lt;br /&gt;--Always use Linenumbers&lt;br /&gt;&lt;br /&gt;--Copy and paste results into EXCEL for adhoc stuff&lt;br /&gt;&lt;br /&gt;--Show an error message (RAISEERROR) with severity&lt;br /&gt;RAISERROR (N'This is message.', 18, 1);&lt;br /&gt;&lt;br /&gt;--Learn about Query Plans&lt;br /&gt;SELECT * &lt;br /&gt; FROM Customers c &lt;br /&gt; JOIN Orders o &lt;br /&gt;  ON c.CustomerID = o.CustomerID &lt;br /&gt; JOIN [Order Details] od &lt;br /&gt;  ON o.OrderID = od.OrderID&lt;br /&gt; JOIN Products p &lt;br /&gt;  ON od.ProductID = p.ProductID&lt;br /&gt;ORDER BY c.CompanyName&lt;br /&gt;&lt;br /&gt;--Object Explorer Drag &amp; Drop&lt;br /&gt;&lt;br /&gt;--Avoid Cursors&lt;br /&gt;&lt;br /&gt;--Be careful updating and deleting (WHERE clauses, backup, SELECT using the WHERE clause, then Delete with the same one.)&lt;br /&gt;&lt;br /&gt;--Never change production without changing dev and beta first&lt;br /&gt;&lt;br /&gt;--Don't bother coding for portability or language independence.&lt;br /&gt;&lt;br /&gt;--Consider using synonyms for long table names&lt;br /&gt;CREATE SYNONYM Cust FOR dbo.Customers&lt;br /&gt;SELECT * FROM Cust&lt;br /&gt;DROP SYNONYM Cust&lt;br /&gt;&lt;br /&gt;--TRUNCATE VS DELETE&lt;br /&gt;--Logged and WHERE&lt;br /&gt;DELETE FROM Temp1&lt;br /&gt;&lt;br /&gt;--Non-logged and no WHERE, but fast&lt;br /&gt;TRUNCATE TABLE Temp1&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--Common question - How to delete duplicates&lt;br /&gt;CREATE TABLE dbo.duplicateTest &lt;br /&gt;( &lt;br /&gt;[ID] [int] , &lt;br /&gt;[FirstName] [varchar](25), &lt;br /&gt;[LastName] [varchar](25)  &lt;br /&gt;) ON [PRIMARY] &lt;br /&gt;&lt;br /&gt;INSERT INTO dbo.duplicateTest VALUES(1, 'Bob','Smith') &lt;br /&gt;INSERT INTO dbo.duplicateTest VALUES(2, 'Dave','Jones') &lt;br /&gt;INSERT INTO dbo.duplicateTest VALUES(3, 'Karen','White') &lt;br /&gt;INSERT INTO dbo.duplicateTest VALUES(1, 'Bob','Smith')&lt;br /&gt;&lt;br /&gt;SELECT * &lt;br /&gt; FROM dbo.duplicateTest&lt;br /&gt; &lt;br /&gt;SELECT * &lt;br /&gt; FROM dbo.duplicateTest &lt;br /&gt; WHERE ID = 1 AND FirstName = 'Bob' AND LastName = 'Smith'&lt;br /&gt; &lt;br /&gt;DELETE TOP(1) FROM dbo.duplicateTest WHERE ID = 1&lt;br /&gt;&lt;br /&gt;DROP TABLE duplicateTest&lt;br /&gt;&lt;br /&gt;UPDATE Customers &lt;br /&gt;SET ContactName = 'Ike Ellis'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;WHERE CustomerID = 'ELLIS'&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DELETE FROM Customers &lt;br /&gt;WHERE CustomerID = 'ELLIS'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-379201338901295266?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/379201338901295266/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=379201338901295266' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/379201338901295266'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/379201338901295266'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/09/t-sql-session-promised-script.html' title='T-SQL Session, Promised Script'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-62267262389836796</id><published>2010-09-08T08:17:00.000-07:00</published><updated>2010-09-08T14:01:30.029-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><category scheme='http://www.blogger.com/atom/ns#' term='Lightswitch'/><title type='text'>Microsoft Lightswitch = Enterprise Microsoft Access</title><content type='html'>Lynn Langit blogged on Microsoft Lightswitch and that made me go check it out.  It's a beta tool for Visual Studio that allows screens and database tables to be created with minimal software development or training.  &lt;br /&gt;&lt;br /&gt;This reminds me of Microsoft Access in the 1990s.  Access made it so easy to create a database, data entry screens, and reports, that tons of lay people were writing custom apps for their own purposes.  Because Access would collapse after it had 12 concurrent users, professional developers would need to be hired to port the app to SQL Server.&lt;br /&gt;&lt;br /&gt;Lightswitch finally provides all of those great Access features for SQL Server, SQL Azure, and cloud development.  I'll post more about it after I've played with it awhile.&lt;br /&gt;&lt;br /&gt;Here are some links:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/b/socaldevgal/archive/2010/08/24/visual-studio-2010-lightswitch-beta.aspx"&gt;Lynn's Original Post&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/lightswitch/default.aspx"&gt;MSDN Lightswitch Site&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.eweek.com/c/a/Application-Development/Microsoft-LightSwitch-15-Reasons-NonProgrammers-Should-Try-It-Out-321214/"&gt;Lightswich:  15 Reasons Non-Programmers Should Try It Out&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;UPDATE:  Carl Franklin on .NET Rocks released a podcast on LightSwitch last month.&lt;br /&gt;&lt;a href="http://www.dotnetrocks.com/default.aspx?showNum=583"&gt;.NET Rocks Podcast on LightSwitch&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-62267262389836796?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/62267262389836796/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=62267262389836796' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/62267262389836796'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/62267262389836796'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/09/microsoft-lightswitch-enterprise.html' title='Microsoft Lightswitch = Enterprise Microsoft Access'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5886028341010330292</id><published>2010-08-26T20:57:00.000-07:00</published><updated>2010-08-26T21:11:22.525-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='User Group'/><category scheme='http://www.blogger.com/atom/ns#' term='TIG'/><title type='text'>TIG - Head First C# - 1st Assignment</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/THc6d2oGSvI/AAAAAAAAAEc/JR5cXRh48XY/s1600/front-logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 262px; height: 66px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/THc6d2oGSvI/AAAAAAAAAEc/JR5cXRh48XY/s320/front-logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5509936953665407730" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p/&gt;&lt;br /&gt;&lt;br /&gt;Our first reading assignment:&lt;br /&gt;&lt;br /&gt;     -Read the part under your commitment, and decide if you can do those things.&lt;br /&gt;     -Make and O’Reilly account.&lt;br /&gt;     -Forward that account logon name to me.&lt;br /&gt;     -Read Chapters 1 – 5 of our book.&lt;br /&gt;     -See you on September 22nd!&lt;br /&gt;     -Optionally, show me a mortgage calculator.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5886028341010330292?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5886028341010330292/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5886028341010330292' title='35 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5886028341010330292'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5886028341010330292'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/08/tig-head-first-c-1st-assignment.html' title='TIG - Head First C# - 1st Assignment'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/THc6d2oGSvI/AAAAAAAAAEc/JR5cXRh48XY/s72-c/front-logo.gif' height='72' width='72'/><thr:total>35</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-494672714136562699</id><published>2010-07-15T09:00:00.001-07:00</published><updated>2010-07-15T09:01:42.046-07:00</updated><title type='text'>T-SQL: Use A Variable to Create a ColumnList for a PIVOT Query of Dates</title><content type='html'>DECLARE @BeginDate datetime&lt;br /&gt;DECLARE @EndDate datetime&lt;br /&gt;&lt;br /&gt;SET @BeginDate = '7/1/2010';&lt;br /&gt;SET @EndDate = '7/31/2010';&lt;br /&gt;&lt;br /&gt;--Create a dates table with every date between 7/1/2010 and 7/31/2010&lt;br /&gt;WITH mycte AS&lt;br /&gt; (&lt;br /&gt;     SELECT cast(@BeginDate as datetime) DateValue&lt;br /&gt;     UNION ALL&lt;br /&gt;     SELECT DateValue + 1&lt;br /&gt;  FROM  mycte    &lt;br /&gt;  WHERE   DateValue + 1 &lt; @EndDate&lt;br /&gt;&lt;br /&gt; )&lt;br /&gt;SELECT CONVERT(varchar,DateValue,101) as StDate INTO #dates from mycte&lt;br /&gt;OPTION (MAXRECURSION 0);&lt;br /&gt;&lt;br /&gt;--Get each date in the #dates table as a set&lt;br /&gt;select ',[' + StDate + ']' from #dates;&lt;br /&gt;&lt;br /&gt;--Get it as a long string.  We use the XML path for that, which is awesome.&lt;br /&gt;select ',[' + StDate + ']' from #dates for XML path('');&lt;br /&gt;&lt;br /&gt;--Use the STUFF function to remove the leading comma.  This is a pretty cool way to do that, rather than messing around with LEN and stuff.&lt;br /&gt;SELECT STUFF((select ',[' + StDate + ']' from #dates for XML path('')),1,1,'') AS NoLeadingCommaOneLongString;&lt;br /&gt;&lt;br /&gt;--Use the same query to set a variable value.&lt;br /&gt;DECLARE @ColumnList varchar(max);&lt;br /&gt;SET @ColumnList = STUFF((select ',[' + StDate + ']' from #dates for XML path('')),1,1,'');&lt;br /&gt;&lt;br /&gt;--Here's a sample table with dates and names.&lt;br /&gt;CREATE TABLE #SampleWorkDates&lt;br /&gt;(&lt;br /&gt; Workeddate datetime &lt;br /&gt; , [name] varchar(100)&lt;br /&gt; , workdone int&lt;br /&gt;);&lt;br /&gt;INSERT INTO #SampleWorkDates &lt;br /&gt;SELECT '7/12/2010','john', 100 UNION &lt;br /&gt;SELECT '7/12/2010','john', 110 UNION &lt;br /&gt;SELECT '7/12/2010','debby', 102 UNION &lt;br /&gt;SELECT '7/18/2010','john', 60 UNION &lt;br /&gt;SELECT '8/10/2010','alex', 89 UNION &lt;br /&gt;SELECT '9/11/2010','john', 120;&lt;br /&gt;&lt;br /&gt;--We need to pivot that data, but the column list is really long.&lt;br /&gt;&lt;br /&gt;--Rather than writing out all the columns by hand, like this:&lt;br /&gt;select * from &lt;br /&gt; (select [Name],count([Name]) over (partition by [Name]) as Total,CONVERT(varchar,[WorkedDate],101) as Workeddate,COUNT(*) as cnt from #SampleWorkDates &lt;br /&gt;where CAST(WorkedDate AS datetime) &gt;= '07/01/2010' and CAST(WorkedDate AS datetime) &lt;= '07/31/2010' group by [Name],CONVERT(varchar,[WorkedDate],101))p &lt;br /&gt;pivot (MAX([name]) for WorkedDate in ([07/01/2010],[07/02/2010],[07/03/2010],[07/04/2010],[07/05/2010],[07/06/2010],[07/07/2010],[07/08/2010],[07/09/2010],[07/10/2010],[07/11/2010],[07/12/2010],[07/13/2010],[07/14/2010],[07/15/2010],[07/16/2010],[07/17/2010],[07/18/2010],[07/19/2010],[07/20/2010],[07/21/2010],[07/22/2010],[07/23/2010],[07/24/2010],[07/25/2010],[07/26/2010],[07/27/2010],[07/28/2010],[07/29/2010],[07/30/2010]))pvt&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;--We can just use the @ColumnList variable we used before.  It looks cleaner and is reusable.&lt;br /&gt;declare @sql nvarchar(max);&lt;br /&gt;set @sql = 'select * from (select [Name],count([Name]) over (partition by [Name]) as Total,CONVERT(varchar,[WorkedDate],101) as Workeddate,COUNT(*) as cnt from #SampleWorkDates &lt;br /&gt;where CAST(WorkedDate AS datetime) &gt;= ''' + CONVERT(varchar, @BeginDate, 101) + ''' and CAST(WorkedDate AS datetime) &lt;= ''' + CONVERT(varchar, @EndDate, 101) + &lt;br /&gt;''' group by [Name],CONVERT(varchar,[WorkedDate],101))p &lt;br /&gt;pivot (sum(cnt) for WorkedDate in (' + @ColumnList + '))pvt';&lt;br /&gt;&lt;br /&gt;PRINT @sql;&lt;br /&gt;&lt;br /&gt;exec(@sql);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;DROP TABLE #SampleWorkDates;&lt;br /&gt;DROP TABLE #dates;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-494672714136562699?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/494672714136562699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=494672714136562699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/494672714136562699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/494672714136562699'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/07/t-sql-use-variable-to-create-columnlist.html' title='T-SQL: Use A Variable to Create a ColumnList for a PIVOT Query of Dates'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6637681313904818429</id><published>2010-07-15T08:10:00.000-07:00</published><updated>2010-07-15T08:25:38.082-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><title type='text'>T-SQL: Script to Populate a Dates Table With Recursion and a CTE</title><content type='html'>I used to create dates tables like this:&lt;br /&gt;&lt;br /&gt;--********************************&lt;br /&gt;DECLARE @BeginDate datetime&lt;br /&gt;DECLARE @EndDate datetime&lt;br /&gt;&lt;br /&gt;SET @BeginDate  = '1/1/1900'&lt;br /&gt;SET @EndDate = '12/31/2050'&lt;br /&gt;&lt;br /&gt;CREATE TABLE #Dates ([date] datetime)&lt;br /&gt;&lt;br /&gt;WHILE @BeginDate &lt;= @EndDate&lt;br /&gt;BEGIN&lt;br /&gt; INSERT #Dates&lt;br /&gt; VALUES&lt;br /&gt; (@BeginDate)&lt;br /&gt; &lt;br /&gt; SET @BeginDate = @BeginDate + 1&lt;br /&gt;END&lt;br /&gt;SELECT * FROM #Dates&lt;br /&gt;DROP TABLE #Dates &lt;br /&gt;--********************************&lt;br /&gt;&lt;br /&gt;That works fine, but it has a lot to clean up, executes slowly, and has a lot of code.  Plus it uses looping.&lt;br /&gt;&lt;br /&gt;This is a better way:&lt;br /&gt;--********************************&lt;br /&gt;WITH mycte AS&lt;br /&gt; (&lt;br /&gt;     SELECT cast('1900-01-01' as datetime) DateValue&lt;br /&gt;     UNION ALL&lt;br /&gt;     SELECT DateValue + 1&lt;br /&gt;  FROM  mycte    &lt;br /&gt;  WHERE   DateValue + 1 &lt; '2050-12-31'&lt;br /&gt;&lt;br /&gt; )&lt;br /&gt;SELECT DateValue&lt;br /&gt;    FROM    mycte&lt;br /&gt;    OPTION (MAXRECURSION 0)&lt;br /&gt;--********************************&lt;br /&gt;&lt;br /&gt;By default, the MAXRECURSION option is set to 100.  I set it to zero, which means we could go into an infinite loop.  I use the WHERE clause to make sure the loop bails out at 12/31/2050.  Without the WHERE clause, we'd be hosed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6637681313904818429?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6637681313904818429/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6637681313904818429' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6637681313904818429'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6637681313904818429'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/07/t-sql-great-way-to-populate-dates-table.html' title='T-SQL: Script to Populate a Dates Table With Recursion and a CTE'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6165102661996223910</id><published>2010-07-01T16:09:00.000-07:00</published><updated>2010-07-01T16:15:13.058-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><title type='text'>SSRS 2008 - Adding SSL After Installation</title><content type='html'>If you can't get it to work, try doing everything in this thread:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://prologika.com/CS/forums/t/946.aspx"&gt;http://prologika.com/CS/forums/t/946.aspx&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;And everything here:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://technet.microsoft.com/en-us/library/ms345223(SQL.100).aspx"&gt;http://technet.microsoft.com/en-us/library/ms345223(SQL.100).aspx&lt;br /&gt;&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Also, SSRS 2008 does not support wildcard certificates, ie *.yourdomain.com. Obtain a special dedicated SSL cert YourServerName.yourdomain.com, then apply it on the SSRS 2008 server. This is what worked for us at a client, after calling PSS.  This is a known issue at Microsoft and they are working on a better solution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6165102661996223910?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6165102661996223910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6165102661996223910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6165102661996223910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6165102661996223910'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/07/ssrs-2008-adding-ssl-after-fact.html' title='SSRS 2008 - Adding SSL After Installation'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8272586343597341194</id><published>2010-06-27T09:35:00.000-07:00</published><updated>2010-06-27T09:41:42.835-07:00</updated><title type='text'>Slides and Code from Code Camp Presentation</title><content type='html'>T-SQL A Primer&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://ellisteam.net/ATSQLPrimer.zip"&gt;T-SQL Slides and Scripts&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8272586343597341194?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8272586343597341194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8272586343597341194' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8272586343597341194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8272586343597341194'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/06/slides-and-code-from-code-camp.html' title='Slides and Code from Code Camp Presentation'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6579062214473147566</id><published>2010-05-19T11:23:00.000-07:00</published><updated>2010-05-19T11:25:25.441-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tips'/><title type='text'>Cool Control Panel View</title><content type='html'>This went around a few months ago, but in case you missed it, create a folder on your desktop and rename it to this: GodMode.{ED7BA470-8E54-465E-825C-99712043E01C}&lt;br /&gt;&lt;br /&gt;This will create a new control panel icon on your desktop with a ton of cool options.&lt;br /&gt;&lt;br /&gt;Looks like this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S_Qs8fELfjI/AAAAAAAAAEU/EL4zcXbJeI4/s1600/GodModePic.png"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 267px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S_Qs8fELfjI/AAAAAAAAAEU/EL4zcXbJeI4/s320/GodModePic.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5473048864804798002" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6579062214473147566?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6579062214473147566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6579062214473147566' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6579062214473147566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6579062214473147566'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/05/cool-control-panel-view.html' title='Cool Control Panel View'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/S_Qs8fELfjI/AAAAAAAAAEU/EL4zcXbJeI4/s72-c/GodModePic.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4394134722103882190</id><published>2010-04-23T13:19:00.000-07:00</published><updated>2010-04-23T13:26:49.286-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><title type='text'>Data Explosion - Great Story</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S9ICVSI1M_I/AAAAAAAAAEM/vuyF0Hf-2wo/s1600/thumbnail.jpg"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 116px; height: 160px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S9ICVSI1M_I/AAAAAAAAAEM/vuyF0Hf-2wo/s320/thumbnail.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5463431862623220722" /&gt;&lt;/a&gt;&lt;br /&gt;I got this story from Scott Cameron of Hitachi Consulting, although I've heard it before:&lt;br /&gt;&lt;br /&gt;The story of the man who invented chess can help illustrate the problem of data explosion.&lt;br /&gt;&lt;br /&gt;The man lived in India, and according to legend his name was Sessa. The king of India was very impressed with the game of chess and asked Sessa to name his reward. Sessa's request was so modest that it offended the king: He asked simply for one grain of rice for the first square of his chess board, two grains for the second square, four grains for the third, and so forth, doubling the number of grains of rice for each of the 64 squares of the board. Of course, by the time the king's magicians calculated the total amount of rice needed to pay the reward, they realized that it would require a warehouse 3 meters by 5 meters by twice the distance to the sun to pay the reward.&lt;br /&gt;&lt;br /&gt;The king gave Sessa a sack, pointed him to the warehouse and told him to go count out his reward - no rush.&lt;br /&gt;&lt;br /&gt;When numbers increase geometrically (like they do in a data warehouse), they get large very quickly.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4394134722103882190?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4394134722103882190/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4394134722103882190' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4394134722103882190'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4394134722103882190'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/04/data-explosion-great-story.html' title='Data Explosion - Great Story'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/S9ICVSI1M_I/AAAAAAAAAEM/vuyF0Hf-2wo/s72-c/thumbnail.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-7866745770274209995</id><published>2010-04-12T09:56:00.000-07:00</published><updated>2010-04-12T09:57:27.472-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quotes'/><title type='text'>Business Intelligence Quote</title><content type='html'>"You can spend millions building the data warehouse, but if you don't have the back office under control, you are wasting your money."&lt;br /&gt;Mike Costa&lt;br /&gt;Corporate Director of Quality Process &amp; Architecture&lt;br /&gt;The Dow Chemical Company&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-7866745770274209995?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/7866745770274209995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=7866745770274209995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7866745770274209995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/7866745770274209995'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/04/business-intelligence-quote.html' title='Business Intelligence Quote'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5632454879958157779</id><published>2010-04-10T17:38:00.000-07:00</published><updated>2010-04-10T17:38:00.228-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><title type='text'>Feedback Loops - Donella Meadows</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S7_MgznkQFI/AAAAAAAAAEE/PSVOvSRf6kA/s1600/Meadows.jpg"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 160px; height: 155px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S7_MgznkQFI/AAAAAAAAAEE/PSVOvSRf6kA/s320/Meadows.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5458306137380372562" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Examples of compelling feedback is not hard to find. Suppose taxpayers got to specify on their return forms what government services their tax payments must be spent on....Suppose any town or company that puts a water intake pipe in a river had to put it immediately downstream from its own wastewater outflow pipe. Suppose any public or private official who made the decision to invest in a nuclear power plant got the waste from that facility stored on his or her lawn...Suppose the politicians who declare war were required to spend that war in the front lines.&lt;br /&gt;&lt;br /&gt;There is a systematic tendency on the part of human beings to avoid accountability for their own decisions. That's why there are so many missing feedback loops."&lt;br /&gt;&lt;br /&gt;She goes on to relate a story about Amsterdam:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S7_MSaEY_tI/AAAAAAAAAD8/GJS0sxDuAdI/s1600/AmsterdamHouse.jpg"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 160px; height: 119px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S7_MSaEY_tI/AAAAAAAAAD8/GJS0sxDuAdI/s320/AmsterdamHouse.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5458305890003779282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;"Near Amsterdam, there is a suburb of single-family houses all built at the same time, all alike. For some unknown reasons it happened that some of the houses were built with the electric meter down in the basement. In other houses, the electric meter was installed in the front hall.&lt;br /&gt;&lt;br /&gt;It was discovered that the houses with the electric meter in the hall used 1/3 less energy."&lt;br /&gt;&lt;br /&gt;She explains that this is because the feedback loop was available for all to see.&lt;br /&gt;&lt;br /&gt;This is the main purpose of business intelligence. To provide a feedback loop that provides accountability at all levels of an organization.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5632454879958157779?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5632454879958157779/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5632454879958157779' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5632454879958157779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5632454879958157779'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/04/feedback-loops-donella-meadows.html' title='Feedback Loops - Donella Meadows'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/S7_MgznkQFI/AAAAAAAAAEE/PSVOvSRf6kA/s72-c/Meadows.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3199528140143207943</id><published>2010-04-09T17:25:00.000-07:00</published><updated>2010-04-10T07:04:05.255-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quotes'/><title type='text'>Donella H. Meadows Quote</title><content type='html'>"Purposes are deduced from behavior, not from rhetoric or stated goals."&lt;br /&gt;Donella H. Meadows&lt;br /&gt;Thinking in Systems&lt;br /&gt;&lt;br /&gt;"An important function of almost every system is to ensure its own perpetuation."&lt;br /&gt;Same as above&lt;br /&gt;&lt;br /&gt;Donella is not speaking of software systems, but rather behavior systems. She's speaking about the war on drugs, welfare, health care, national security, the environment, or any other societal or natural system.&lt;br /&gt;&lt;br /&gt;"Keeping sub-purposes and overall system purposes in harmony is an essential function of successful systems."&lt;br /&gt;Same as above&lt;br /&gt;&lt;br /&gt;"We misperceive risk, assuming that some things are much more dangerous than they really are and others much less. We live in an exaggerated present - we pay too much attention to recent experience and too little attention to the past, focusing on current events rather than long-term behavior"&lt;br /&gt;Donella H. Meadows&lt;br /&gt;Thinking in Systems&lt;br /&gt;&lt;br /&gt;"Usually the greater the discrepancy between the goal and the actual situation, the more emphatic the action will be."&lt;br /&gt;Same as above&lt;br /&gt;&lt;br /&gt;"The most damaging example of the systems archetype called "drift to low performance" is the process by which modern industrial culture has eroded the goal of morality.  The workings of the trap have been classic, and awful to behold."&lt;br /&gt;Same as above&lt;br /&gt;&lt;br /&gt;"We know what to do about drift to low performance.  Don't weigh the bad news more heavily than the good.  And keep standards absolute."&lt;br /&gt;Same as above&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3199528140143207943?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3199528140143207943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3199528140143207943' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3199528140143207943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3199528140143207943'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/04/donella-h-meadows-quote.html' title='Donella H. Meadows Quote'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1473252727009633367</id><published>2010-04-09T15:18:00.000-07:00</published><updated>2010-04-09T15:24:42.303-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Productivity'/><title type='text'>Microsoft OneNote, an Answer to Prayer</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S7-pD_Li5UI/AAAAAAAAAD0/iGryYUVtVmE/s1600/OneNote.jpg"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 160px; height: 160px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S7-pD_Li5UI/AAAAAAAAAD0/iGryYUVtVmE/s320/OneNote.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5458267159360890178" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since my business is growing, I find that I'm forgetting more and more things. If it doesn't fit neatly in a todo or a calendar event, I have trouble keeping track of it.&lt;br /&gt;&lt;br /&gt;I've been asking people all over what they did to keep track of non-actionable data. Most of them had no answers for me. Beau Merseraeu said that he's using OneNote. I'm well-acquainted with the other Office products, but OneNote always seemed like tablet software to me. I was wrong.&lt;br /&gt;&lt;br /&gt;If you read a quote that you want to remember, throw it in OneNote. If you see statistics to help you with a sales presentation....OneNote. I'm using it more and more. It's like having an online journal, but it is organizable, which allows for fast data retrieval. I love it and wish I hadn't wasted so much time not using it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1473252727009633367?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1473252727009633367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1473252727009633367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1473252727009633367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1473252727009633367'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/04/microsoft-onenote-answer-to-prayer.html' title='Microsoft OneNote, an Answer to Prayer'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/S7-pD_Li5UI/AAAAAAAAAD0/iGryYUVtVmE/s72-c/OneNote.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1843826067198912235</id><published>2010-04-05T09:57:00.000-07:00</published><updated>2010-04-05T10:27:17.600-07:00</updated><title type='text'>DigiGirlz - Blowing Away the Girl/Programmer Myths</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S7oakShecJI/AAAAAAAAADk/Nwg22kz49mc/s1600/DigiGirlz+Logo.png"&gt;&lt;img style="left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 313px; height: 104px;" src="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S7oakShecJI/AAAAAAAAADk/Nwg22kz49mc/s320/DigiGirlz+Logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5456703109262635154" /&gt;&lt;/a&gt;&lt;p/&gt;&lt;br /&gt;I spent last Friday volunteering with DigiGirlz. This awesome event, sponsored by Microsoft, exposes High School age girls to technology. In one day, they learn programming, database querying, robotics, and video game programming. In between classes, they meet IT professionals who explain what life is like when you choose a career in technology. All of the girls had a great time and learned a lot.&lt;br /&gt;&lt;br /&gt;Here are some myths that DigiGirlz helps debunk:&lt;br /&gt;&lt;br /&gt;Myth #1: Girls don't like programming, math, or science.&lt;br /&gt;&lt;br /&gt;False. While teaching some of these classes, I never saw a student waver in her interest. I never caught one texting on her cell phone. I never saw one not complete an assignment. When the programming class was over, many of them were disappointed that it ended. Many asked how they could program at home on their own time. Most of them thirsted for more.&lt;br /&gt;&lt;br /&gt;Myth #2: Girls aren't good at programming.&lt;br /&gt;&lt;br /&gt;Totally false. During a one hour SmallBasic class, I saw many students immediately understand the language constructs. Some girls only needed about 10 minutes of direction and they were free styling. By the end of the class, the girls were shocking me with the images and vectors they were programmatically drawing. They fluently understood the math, and could quickly grasp the creation of geometric shapes. I've seen adult programmers who struggled with concepts that the girls immediately learned.&lt;br /&gt;&lt;br /&gt;Myth #3: Girls who do like technology and programming are basically boys (or aren't very cute.)&lt;br /&gt;&lt;br /&gt;Lynn Langitt &lt;A HREF="http://blogs.msdn.com/SoCalDevGal/"&gt;(SoCalDevGal)&lt;/A&gt; and Linda Routson (Microsoft Account Manager Extraordinaire)  did a great job finding female instructors for these courses. They were all beautiful women who were professional, intelligent, and feminine. One was a programmer for a fashion company. These examples taught the girls that you can be good at traditional male professions without surrendering what you like about being a girl.&lt;br /&gt;&lt;br /&gt;I think any girl would enjoy this event.  Find more information here:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.microsoft.com/about/diversity/programs/digigirlz/default.aspx"&gt;DigiGirlz&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S7obJKRNDoI/AAAAAAAAADs/TR1juCNOiuY/s1600/bg_logofloral.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 640px; height: 130px;" src="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S7obJKRNDoI/AAAAAAAAADs/TR1juCNOiuY/s320/bg_logofloral.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5456703742702063234" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1843826067198912235?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1843826067198912235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1843826067198912235' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1843826067198912235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1843826067198912235'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/04/digigirlz-blowing-away-girlprogrammer.html' title='DigiGirlz - Blowing Away the Girl/Programmer Myths'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wtQnQ0Is4lk/S7oakShecJI/AAAAAAAAADk/Nwg22kz49mc/s72-c/DigiGirlz+Logo.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-2303532538065310898</id><published>2010-03-30T15:53:00.000-07:00</published><updated>2010-04-09T18:00:26.445-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><title type='text'>ASP.NET AJAX Still Flickering and Posting Back</title><content type='html'>We looked everywhere to solve this problem, and finally found this blog post.  Neil clearly outlines the solution to our issue and it worked for us.&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://neilkilbride.blogspot.com/2008/01/aspnet-ajax-not-working-full-page.html"&gt;neil kilbride's blog&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-2303532538065310898?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/2303532538065310898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=2303532538065310898' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2303532538065310898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2303532538065310898'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/03/aspnet-ajax-still-flickering-and.html' title='ASP.NET AJAX Still Flickering and Posting Back'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5803297065257465280</id><published>2010-03-18T11:53:00.000-07:00</published><updated>2010-03-18T12:14:03.715-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Productivity'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Mind Map Software - Free Mind</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S6J7BMbTJqI/AAAAAAAAAC4/-VsuRp9QaTQ/s1600-h/gw_mindmap1.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 228px;" src="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S6J7BMbTJqI/AAAAAAAAAC4/-VsuRp9QaTQ/s320/gw_mindmap1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5450053759517533858" /&gt;&lt;/a&gt;&lt;br /&gt;A friend of mine, Chris York, turned me on to mind mapping as a way to flush out projects and requirements.  I love it.  &lt;br /&gt;&lt;br /&gt;Mind mapping is a way to document and diagram meeting notes, while the meeting is taking place.  It allows the meeting to be a freeform expression of thoughts, while maintaining the general topic.&lt;br /&gt;&lt;br /&gt;During meetings, conversations tend to move from one topic to another, seemingly directionless.  This is an excellent place to capture salient points about a software or technology project, without overcontrolling the meeting.  It can also help to avoid repetition, because you can go to a branch on the map and add or remove detail as needed.&lt;br /&gt;&lt;br /&gt;You can also use mindmapping outside meetings to organize your own thoughts and projects.  It will help you take a general idea and create concrete action items and ToDos.&lt;br /&gt;&lt;br /&gt;Here's some info on mindmapping:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://en.wikipedia.org/wiki/Mind_map"&gt;Mind Map Wikipedia Entry&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Here's FreeMind, an open source, java software package that will help you implement it:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://freemind.sourceforge.net/wiki/index.php/Main_Page"&gt;FreeMind&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5803297065257465280?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5803297065257465280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5803297065257465280' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5803297065257465280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5803297065257465280'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/03/mind-map-software-free-mind.html' title='Mind Map Software - Free Mind'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wtQnQ0Is4lk/S6J7BMbTJqI/AAAAAAAAAC4/-VsuRp9QaTQ/s72-c/gw_mindmap1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5273751560820706745</id><published>2010-03-04T17:15:00.001-08:00</published><updated>2010-03-04T17:17:56.739-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quotes'/><title type='text'>Quote from David Kekich and others.</title><content type='html'>Anxiety is caused by a lack of control, organization, preperation, and action.&lt;br /&gt;-David Kekich&lt;br /&gt;&lt;br /&gt;Think like a man of action, act like a man of thought.&lt;br /&gt;-Henry Bergson&lt;br /&gt;&lt;br /&gt;It is not enough to stare up the steps; we must step up the stairs.&lt;br /&gt;-Vaclav Havel&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5273751560820706745?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5273751560820706745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5273751560820706745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5273751560820706745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5273751560820706745'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/03/quote-from-david-kekich-and-others.html' title='Quote from David Kekich and others.'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-2136098990846385846</id><published>2010-03-04T10:19:00.000-08:00</published><updated>2010-03-04T17:13:03.363-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quotes'/><title type='text'>Thomas Edison and Bill Maher</title><content type='html'>Here are a couple more quotes:&lt;br /&gt;&lt;br /&gt;"People would rather be nice than right, rather be sensitive than be true.  Well, being nice and sensitive are important, but they're not more important than being right; they're not more important than the truth."&lt;br /&gt;Bill Maher&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S5BalSHYfhI/AAAAAAAAACA/_4oQe0T2cHY/s1600-h/thumbnail.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 160px; height: 159px;" src="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S5BalSHYfhI/AAAAAAAAACA/_4oQe0T2cHY/s320/thumbnail.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5444951546055392786" /&gt;&lt;/a&gt;&lt;br /&gt;"Opportunity is missed by most people because it is dressed in overalls and looks like work"&lt;br /&gt;Thomas Edison&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-2136098990846385846?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/2136098990846385846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=2136098990846385846' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2136098990846385846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2136098990846385846'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/03/thomas-edison-and-bill-maher.html' title='Thomas Edison and Bill Maher'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wtQnQ0Is4lk/S5BalSHYfhI/AAAAAAAAACA/_4oQe0T2cHY/s72-c/thumbnail.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5179486866271438570</id><published>2010-03-04T09:09:00.001-08:00</published><updated>2010-03-04T17:18:21.628-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Quotes'/><title type='text'>Favorite Quotes</title><content type='html'>I was out to dinner with some friends and was going through a few of my favortie quotes.  I realized that I don't have any posted, so here they are:&lt;br /&gt;&lt;br /&gt;*All comments are written in first person by Ike.  &lt;br /&gt;"Reduce everything to it's essence, so that form harmonizes with function"&lt;br /&gt;Cris Kobryn &lt;br /&gt;Chair, U2 Partners' UML 2.0 Submission Team &lt;br /&gt;&lt;br /&gt;"If we pursue the parsimony koan to its full intent, we should find UML modeling projects to be as enjoyable as we found finger-painting and drawing classes in grammer school." &lt;br /&gt;Cris Kobryn&lt;br /&gt;Chair, U2 Partners' UML 2.0 Submission Team &lt;br /&gt;&lt;br /&gt;"Do not rely on Rigid, Inefficient Processes (RIP)." &lt;br /&gt;Steve McConnell &lt;br /&gt;Software Project Survival Guide&lt;br /&gt;&lt;br /&gt;"Early in the project you can have firm cost and schedule targets or a firm feature set, but not both." &lt;br /&gt;Steve McConnell &lt;br /&gt;Software Project Survival Guide &lt;br /&gt;&lt;br /&gt;"There is a word for software that cannot be changed after delivery. That word is hardware." &lt;br /&gt;Ward Cunningham &lt;br /&gt;co-Inventor of Extreme Programming&lt;br /&gt;Preface to Extreme Programming Pocket Guide &lt;br /&gt;&lt;br /&gt;"The problem with quick and dirty is that dirty remains long after quick is forgotten." &lt;br /&gt;Unknown &lt;br /&gt;&lt;br /&gt;"As a programmer writing computer programs, you must develop a very special relationship with a shadowy being who lurks just beyond the periphery of your vision. At the same time needy, confused, angry, and malicious, that person is known to you only as The User." &lt;br /&gt;Charles Petzold&lt;br /&gt;Programming in the Key of C# &lt;br /&gt;&lt;br /&gt;"Some people hold the view that the UML should be used to create a design that is independent of the programming language that's used for implementation. Others believe that language-independent design is an oxymoron, with a strong emphasis on the moron." &lt;br /&gt;Martin Fowler&lt;br /&gt;UML Distilled &lt;br /&gt;I agree with this on most topics, not just on software design, ie database design, T-SQL authoring, multi-platform development. -Ike&lt;br /&gt;&lt;br /&gt;"Question: What is the difference between a methodologist and a terrorist?&lt;br /&gt;Answer: You can negotiate with a terrorist." &lt;br /&gt;Martin Fowler&lt;br /&gt;UML Distilled &lt;br /&gt;&lt;br /&gt;"You should use iterative development only on projects that you want to succeed.&lt;br /&gt;Perhaps that's a bit glib, but as I get older, I get more aggressive about using iterative development." &lt;br /&gt;Martin Fowler, espousing Extreme Programming&lt;br /&gt;UML Distilled &lt;br /&gt;&lt;br /&gt;"Often, you'll find that the more stable packages tend to have a higher proportion of interfaces and abstract classes." &lt;br /&gt;Martin Fowler, espousing Polymorphism&lt;br /&gt;UML Distilled&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S5Ba6ZHqueI/AAAAAAAAACI/2rVKAk1BY7U/s1600-h/thumbnailCAK83UKD.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 124px; height: 160px;" src="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S5Ba6ZHqueI/AAAAAAAAACI/2rVKAk1BY7U/s320/thumbnailCAK83UKD.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5444951908712888802" /&gt;&lt;/a&gt;&lt;br /&gt;"The real moments of discovery aren't when someone shouts "Eureka", but when someone mumbles, "Hmmm....that's wierd." " &lt;br /&gt;Carl Sagan &lt;br /&gt;&lt;br /&gt;"Too often, however, the metaphor is used to assert that the child class inherits the internals of the parent class, an allusion to the fact that biological organisms inherit the DNA structures of their parents. This is a poor and potentially misleading use of the metaphor....&lt;br /&gt;The desire for a child class to inherit internals of its parent classes can be better accommodated if we change the notion of inheritance from DNA to assets. It has been noted that an object has access to whatever resources it needs to fulfill its behavioural expectations. " &lt;br /&gt;David West&lt;br /&gt;Author of Object Thinking &lt;br /&gt;&lt;br /&gt;"The best programmers are up to 28 times better than the worst programmers, according to "individual differences" research. Given that their pay is never commensurate, they are the biggest bargains in the software field." &lt;br /&gt;Robert L. Glass&lt;br /&gt;Author of Facts and Fallacies of Software Engineering&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5179486866271438570?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5179486866271438570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5179486866271438570' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5179486866271438570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5179486866271438570'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/03/favorite-quotes.html' title='Favorite Quotes'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wtQnQ0Is4lk/S5Ba6ZHqueI/AAAAAAAAACI/2rVKAk1BY7U/s72-c/thumbnailCAK83UKD.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8100734372098112881</id><published>2010-02-12T06:02:00.001-08:00</published><updated>2010-02-12T06:14:00.599-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>Agile Development - Not A License to Skip Steps</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S3Vg6cVnp5I/AAAAAAAAAB4/BI07VMMJYts/s1600-h/Systems_Development_Life_Cycle.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 201px;" src="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S3Vg6cVnp5I/AAAAAAAAAB4/BI07VMMJYts/s320/Systems_Development_Life_Cycle.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5437358682275293074" /&gt;&lt;/a&gt;&lt;br /&gt;We've all been part of software development projects that didn't have a very good project plan.  I believe that it is still possible for a project to be successful without a project plan, but it introduces unnecessary risk.  A properly agreed upon project plan will not eliminate that risk, but it will greatly reduce it.  Proejects without planning documents are about 50% successful.  When they have a plan, they are about 90% successful.  That is independent of developer talent.  &lt;br /&gt;&lt;br /&gt;Often as agile developers, we skip some of the SDLC steps.  Agile does not mean that SDLC steps are skipped.  It just means that they are compressed into shorter, more frequent release cycles.&lt;br /&gt;&lt;br /&gt;Here are the SDLC steps that are mandatory:&lt;br /&gt;&lt;br /&gt;Planning/Design&lt;br /&gt;Development&lt;br /&gt;Review&lt;br /&gt;Testing&lt;br /&gt;Rollout&lt;br /&gt;Support Plan&lt;br /&gt;&lt;br /&gt;The two steps that are most frequently skipped or inappropriately shortened are arguably the most important: planning and testing.  This is just a friendly reminder to review how those steps are implemented and delivered.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8100734372098112881?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8100734372098112881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8100734372098112881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8100734372098112881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8100734372098112881'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/02/agile-development-not-license-to-skip.html' title='Agile Development - Not A License to Skip Steps'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wtQnQ0Is4lk/S3Vg6cVnp5I/AAAAAAAAAB4/BI07VMMJYts/s72-c/Systems_Development_Life_Cycle.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-146613061128634138</id><published>2010-01-06T14:17:00.000-08:00</published><updated>2010-02-12T06:16:04.082-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Programmers Are Like Boy Scouts On A Hike</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S0UOnX8W20I/AAAAAAAAABs/x2DBu_T2mic/s1600-h/boyscouts.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 220px; height: 147px;" src="http://3.bp.blogspot.com/_wtQnQ0Is4lk/S0UOnX8W20I/AAAAAAAAABs/x2DBu_T2mic/s320/boyscouts.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423757395842489154" /&gt;&lt;/a&gt;&lt;br /&gt;I was reading "The Goal", by Eliyahu Goldratt, when I came across an analogy that was familiar.  I'm a scout leader, and so get plenty of opportunities to watch boy scouts hike on trails. I've noticed that when each one walks at their own pace, some boys will get to the end of the trail far faster than the slowest boy. If it's a two hour hike, one boy will finish in 90 minutes, while the slowest boy will finish in 2 1/2 hours.&lt;br /&gt;&lt;br /&gt;If this were a software development department, that would mean that some developers would finish far ahead of others. The entire project would be delivered according the pace of the slowest developer.&lt;br /&gt;&lt;br /&gt;When Boy Scouts march as a troop, the most amazing thing happens. They work together as a team. Two hour hikes are often completed between 1 3/4 hours and 2 hours. That means that the team environment compensates for the slowest guy far more than it slows down the fastest guy.&lt;br /&gt;&lt;br /&gt;For a software development department, this increase of productivity is immediate. As the team gets used to working together, they get faster and faster, often sprinting and running towards finish lines. Each software project is delivered on or before the deadline, as long as we are implementing the principles of team development.&lt;br /&gt;&lt;br /&gt;Now if I could just get the developers to "Be Prepared", we'd be all set.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-146613061128634138?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/146613061128634138/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=146613061128634138' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/146613061128634138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/146613061128634138'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/01/boy-scouts-are-like-programmers.html' title='Programmers Are Like Boy Scouts On A Hike'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_wtQnQ0Is4lk/S0UOnX8W20I/AAAAAAAAABs/x2DBu_T2mic/s72-c/boyscouts.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1254671939320161520</id><published>2009-10-01T14:06:00.000-07:00</published><updated>2010-02-12T06:16:23.334-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review - Marketing Metrics, by Paul Farris</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0O3xCV3KII/AAAAAAAAABg/qihDsKeuYhg/s1600-h/MarketingMetrics.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 107px; height: 137px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0O3xCV3KII/AAAAAAAAABg/qihDsKeuYhg/s320/MarketingMetrics.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423380429354248322" /&gt;&lt;/a&gt;&lt;br /&gt;I have seen some very poorly run marketing departments.  Because of my past experience, I’ve been skeptical every time I deal with marketing.  This book made me reevaluate those feelings and grow to respect the new found science of marketing.   Marketing can be effective when metrics are measured and qualified.  While reading this book, I met Ron Hendricks, CMO for Northcentral University.  He runs his department like a lab, and he is very, very effective.  Thanks to this book and Ron, I admire a well-run marketing department and look forward to dealing with more of them.&lt;br /&gt;&lt;br /&gt;The metrics in this book are well thought-out, with clear formulas, good examples, and thoughtful insights.  I think this should be on every executive’s desk.  These measures will make you rethink your business.   Hopefully, you’ll have new ideas on how it can grow.&lt;br /&gt;&lt;br /&gt;Also, our business intelligence practice will be better equipped to interact with marketing executives, salesmen, and creatives.&lt;br /&gt;&lt;br /&gt;Here's the Amazon link:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Marketing-Metrics-Executive-Should-Master/dp/0131873709/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262729064&amp;sr=1-1"&gt;Marketing Metrics&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1254671939320161520?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1254671939320161520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1254671939320161520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1254671939320161520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1254671939320161520'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/10/book-review-marketing-metrics-by-paul.html' title='Book Review - Marketing Metrics, by Paul Farris'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0O3xCV3KII/AAAAAAAAABg/qihDsKeuYhg/s72-c/MarketingMetrics.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8218019272837566710</id><published>2009-09-25T13:33:00.000-07:00</published><updated>2010-02-12T06:16:32.434-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review - The McGraw-Hill 36-Hour Course In Finance for Non-Financial Managers, by Robert Cooke</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OwCcnOODI/AAAAAAAAABY/GhLRLl8N5cg/s1600-h/McGrawHillFinanceBook.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 78px; height: 116px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OwCcnOODI/AAAAAAAAABY/GhLRLl8N5cg/s320/McGrawHillFinanceBook.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423371932371138610" /&gt;&lt;/a&gt;&lt;br /&gt;This book is perfect if you are not an accountant and one of the following things are true.&lt;br /&gt;&lt;br /&gt;-You need to read financial reports&lt;br /&gt;-You interact with executives&lt;br /&gt;-Deal with CFOs or Controllers&lt;br /&gt;-Prepare budgets&lt;br /&gt;-Invest in companies&lt;br /&gt;&lt;br /&gt;As a technology consultant, I’m often asked to help with difficult business problems, and more often than not, those issues deal with accounting principles.   I’ve tried reading Accounting 101 books, but I don’t need to know how to keep a "T" account.  I needed a summary book for Accounting 400, and this book fit the bill.&lt;br /&gt;&lt;br /&gt;There is also an online test that will grant you a certificate of completion.  I didn't do that, but you might like to.&lt;br /&gt;&lt;br /&gt;Here's the Amazon link:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/McGraw-Hill-36-Hour-Finance-Non-Financial-Managers/dp/0071425462/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262726879&amp;sr=1-1"&gt;The McGraw-Hill 36-Hour Course In Finance for Non-Financial Managers&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8218019272837566710?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8218019272837566710/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8218019272837566710' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8218019272837566710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8218019272837566710'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/09/book-review-mcgraw-hill-36-hour-course.html' title='Book Review - The McGraw-Hill 36-Hour Course In Finance for Non-Financial Managers, by Robert Cooke'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OwCcnOODI/AAAAAAAAABY/GhLRLl8N5cg/s72-c/McGrawHillFinanceBook.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3987983339739974874</id><published>2009-09-15T13:07:00.000-07:00</published><updated>2010-02-12T06:16:40.898-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review, Hiring Smart by Pierre Mornell</title><content type='html'>&lt;a href="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S0OpQ9ZDRBI/AAAAAAAAABQ/gIBSFvO_zts/s1600-h/HiringSmart.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 91px; height: 130px;" src="http://4.bp.blogspot.com/_wtQnQ0Is4lk/S0OpQ9ZDRBI/AAAAAAAAABQ/gIBSFvO_zts/s320/HiringSmart.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423364485106844690" /&gt;&lt;/a&gt;&lt;br /&gt;Before reading this book, I thought my philosophy of hiring fast and firing fast was a sound management principle.  I was wrong.  After reading the horror stories in this book, I am recommitted to interviewing thoroughly, completely a full background check, checking all references, and then proceeding cautiously.  I still believe that we should terminate employees very soon after discovering that they weren’t who we thought they were.&lt;br /&gt;&lt;br /&gt;I also have a habit of being captivated and intrigued by everyone I meet.  I need time to let that fade away.  I need reality to set in before making an objective hiring decision. &lt;br /&gt;&lt;br /&gt;This book is filled with 45 great tips on hiring good people, but all of them don't need to be applied all at once.  In fact, I think that would be impossible. Instead, I intend to continuously evolve the hiring process by selectively applying these tips.   I’ll just keep experimenting until the perfect team is assembled.&lt;br /&gt;&lt;br /&gt;I liked the idea of putting prospects on projects immediately.  For instance, I could show a prospect a user interface design and tell them to improve it.  I could show them a database and ask them to write a query.  &lt;br /&gt;&lt;br /&gt;Mornell mentions that we should walk the prospect to his or her car.  He says you can tell a lot about a person by how they organize their car.  Mornell is a psychiatrist, and brings a unique insight to the hiring process.&lt;br /&gt;&lt;br /&gt;Mornell mentions a 49er's Football scout that would not recommend a player until he observed 200 plays of the player.  He did this so he could feel comfortable with how they react in different situations. It's impossible to observer 200 plays when hiring people, but we should watch the person in a variety of situations before making a hiring decision.&lt;br /&gt;&lt;br /&gt;This book was very easy to read, had very big type, lots of pretty pictures, and can be completed in about 2 hours.&lt;br /&gt;&lt;br /&gt;Software development is increasingly becoming a team sport.  This book reinforced my belief that the team needs to be part of the entire hiring process.&lt;br /&gt;&lt;br /&gt;Here's the Amazon link:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Hiring-Smart-Incredibly-Expensive-People-Reading/dp/1580085148"&gt;Hiring Smart&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3987983339739974874?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3987983339739974874/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3987983339739974874' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3987983339739974874'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3987983339739974874'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/09/book-review-hiring-smart-by-pierre.html' title='Book Review, Hiring Smart by Pierre Mornell'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_wtQnQ0Is4lk/S0OpQ9ZDRBI/AAAAAAAAABQ/gIBSFvO_zts/s72-c/HiringSmart.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1583003717259950217</id><published>2009-08-07T12:20:00.000-07:00</published><updated>2010-02-12T06:16:50.487-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review - Lean Thinking, by Womack &amp; Jones</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0Oe0iMJk4I/AAAAAAAAABI/kui8OImO7_A/s1600-h/LeanThinking.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 84px; height: 129px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0Oe0iMJk4I/AAAAAAAAABI/kui8OImO7_A/s320/LeanThinking.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423353001652360066" /&gt;&lt;/a&gt;&lt;br /&gt;Lean Principles are a hot topic in today's economy.  It isn't just about cost reduction; it's about observing every aspect of our lives and our businesses and making them more efficient.&lt;br /&gt;&lt;br /&gt;I learned: &lt;br /&gt;&lt;br /&gt;1)  Muda, the Japanese word for waste, is everywhere and should be shunned and eliminated in every circumstance.&lt;br /&gt;&lt;br /&gt;2)  Eliminating muda will make workers happier, reduce costs, and will simplify complicated processes.&lt;br /&gt;&lt;br /&gt;3)  My new hero is &lt;A HREF="http://en.wikipedia.org/wiki/Taiichi_Ohno"&gt;Taiichi Ohno&lt;/A&gt;, who was the original anti-muda engineer. &lt;br /&gt;&lt;br /&gt;4) This book is full of examples of real world companies who applied these principles and did great things with them. &lt;br /&gt;&lt;br /&gt;5)  After reading this book, I now observe waste wherever I am.  I see it in the airport security line, at the DMV, when filing my taxes, at the hospital waiting room, and at the butcher counter.&lt;br /&gt;&lt;br /&gt;Software Developers see waste every day, but often do nothing about it.  They are too worried about breaking code that is working.  Proper testing methods would give them the confidence they need to eliminate wasteful code.  I would remind them of their responsibility to remove code that does nothing, simplify complicated code, and to never repeat themselves.&lt;br /&gt;&lt;br /&gt;Here's the Amazon link:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Lean-Thinking-Corporation-Revised-Updated/dp/0743249275"&gt;Lean Thinking&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1583003717259950217?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1583003717259950217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1583003717259950217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1583003717259950217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1583003717259950217'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/01/book-review-lean-thinking-by-womack.html' title='Book Review - Lean Thinking, by Womack &amp; Jones'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0Oe0iMJk4I/AAAAAAAAABI/kui8OImO7_A/s72-c/LeanThinking.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8888658482557367921</id><published>2009-07-25T12:05:00.000-07:00</published><updated>2010-02-12T06:17:18.008-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review - The Copywriter's Handbook, by Bob Bly</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0ObXQB63mI/AAAAAAAAABA/w5-8Sa0Zab8/s1600-h/CopywritersHandbook.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 87px; height: 130px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0ObXQB63mI/AAAAAAAAABA/w5-8Sa0Zab8/s320/CopywritersHandbook.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423349200026525282" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before reading this book, I wasn’t clear on what a copywriter actually did.   A copywriter creates print and web content for marketing purposes.  They are wordsmiths who choose their words to capture their audience’s attention.&lt;br /&gt;&lt;br /&gt;Here’s what I learned:&lt;br /&gt;&lt;br /&gt;1)  We see the same words repeated in a variety of ads because those words are proven to sell, time and time again.&lt;br /&gt;&lt;br /&gt;2)  Copywriter's sell things with their words, so every copywriter should look at the end product and ask, “is this going to sell something?”  Everything else is irrelevant.&lt;br /&gt;&lt;br /&gt;3)  Copy (the text that copywriters produce) should tell a compelling story that keeps people reading.&lt;br /&gt;&lt;br /&gt;Here's Bob Bly's website:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.bly.com/new/index.html"&gt;Bob Bly&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Here’s the Amazon link:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/s/ref=nb_ss?url=search-alias%3Dstripbooks&amp;field-keywords=the+copywriter%27s+handbook"&gt;The Copywriter's Handbook&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8888658482557367921?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8888658482557367921/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8888658482557367921' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8888658482557367921'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8888658482557367921'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/07/book-review-copywriters-handbook-by-bob.html' title='Book Review - The Copywriter&apos;s Handbook, by Bob Bly'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0ObXQB63mI/AAAAAAAAABA/w5-8Sa0Zab8/s72-c/CopywritersHandbook.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5045268835057068584</id><published>2009-07-10T11:50:00.000-07:00</published><updated>2010-02-12T06:17:43.259-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review - Getting Things Done, by David Allen</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OX0jPZa7I/AAAAAAAAAA4/4C-04NTcmsE/s1600-h/GettingThingsDone.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 87px; height: 129px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OX0jPZa7I/AAAAAAAAAA4/4C-04NTcmsE/s320/GettingThingsDone.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423345305353022386" /&gt;&lt;/a&gt;&lt;br /&gt;Getting Things Done&lt;br /&gt; This book is a very quick read and worth the couple of hours it will take to get through it.&lt;br /&gt;&lt;br /&gt;Here’s what I learned:&lt;br /&gt;&lt;br /&gt; 1)  Manage your TODOs using an electronic medium.  Set a start date, a complete date, and a priority.  Don’t use your email as your to-do list.  A clear to-do list will clear your mind and lift a burden.  I tried this and it worked.&lt;br /&gt;&lt;br /&gt; 2)  A good day means that we've completed 3 important things that day.  At the beginning of the day, choose which 3 things you will complete.&lt;br /&gt;&lt;br /&gt; 3)  If your organizational system is simple, you are more likely to follow through with it and complete it.&lt;br /&gt;&lt;br /&gt;Here's the Amazon link:&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280"&gt;Getting Things Done&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5045268835057068584?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5045268835057068584/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5045268835057068584' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5045268835057068584'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5045268835057068584'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/07/book-review-getting-things-done-by.html' title='Book Review - Getting Things Done, by David Allen'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OX0jPZa7I/AAAAAAAAAA4/4C-04NTcmsE/s72-c/GettingThingsDone.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-937014313188241173</id><published>2009-06-09T09:19:00.001-07:00</published><updated>2010-02-12T06:18:07.393-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Differences Between SSRS Report Builder 1.0 and Report Builder 2.0</title><content type='html'>I was going to draft a blog post on this topic when I found this one:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://blogs.technet.com/andrew/archive/2008/07/16/sql-server-2008-end-user-reporting.aspx"&gt; Andrew Fryer's Blog&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Andrew wrote this very clearly and I don't feel the need to add to it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-937014313188241173?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/937014313188241173/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=937014313188241173' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/937014313188241173'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/937014313188241173'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/06/differences-between-ssrs-report-builder.html' title='Differences Between SSRS Report Builder 1.0 and Report Builder 2.0'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8593706056114865302</id><published>2009-06-05T11:30:00.000-07:00</published><updated>2010-02-12T06:18:34.558-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review - The Power of Full Engagement By Jim Loehr</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S0OS5jGO9VI/AAAAAAAAAAo/NUPD3k1Ivno/s1600-h/ThePowerofFullEngagement.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 85px; height: 139px;" src="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S0OS5jGO9VI/AAAAAAAAAAo/NUPD3k1Ivno/s320/ThePowerofFullEngagement.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423339893655795026" /&gt;&lt;/a&gt;&lt;br /&gt;This is a great book that taught me a lot about energy management.  I learned that mental energy should be conserved and used much like physical energy.  Here are my takeaways:&lt;br /&gt;&lt;br /&gt;1) Manage your energy, instead of managing time.  This is contrary to the mountain of books written on time management.  This is the first book I've read on energy management.  When you workout, you have intervals of high energy, followed by a rest interval. The work day should follow the same pattern.  Now I'm trying to work in 90 minute sprints, followed by a 5 - 15 minute break.  I'm also devising a way to apply this when managing software developers on projects.&lt;br /&gt;&lt;br /&gt;2) Stress is not always a bad thing, but can be very good if it results in positive results.  Stress also pushes us out of our comfort zone and enhances our abilities.  Constant stress is a bad thing.&lt;br /&gt;&lt;br /&gt;3) Working out, eating well, and getting sleep will provide more energy to accomplish your goals and should not be ignored.  Bad eating and low activity creates negative stress and a loss of concentration. &lt;br /&gt;&lt;br /&gt;Here is the Amazon link:&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Power-Full-Engagement-Managing-Performance/dp/0743226755/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262714136&amp;sr=1-1"&gt;The Power of Full Engagement&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8593706056114865302?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8593706056114865302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8593706056114865302' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8593706056114865302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8593706056114865302'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/01/book-review-power-of-full-engagement-by.html' title='Book Review - The Power of Full Engagement By Jim Loehr'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wtQnQ0Is4lk/S0OS5jGO9VI/AAAAAAAAAAo/NUPD3k1Ivno/s72-c/ThePowerofFullEngagement.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4504977711974458840</id><published>2009-06-04T11:43:00.000-07:00</published><updated>2010-02-12T06:18:57.320-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Productivity'/><title type='text'>Internet Explorer Timer</title><content type='html'>One of the chapters in "The Power of Less" focuses on Internet usage.  That led me to wonder how much time I spend on the Internet.  I looked for different applications, but couldn't find one that would simply tell me the total amount of time I use Internet Explorer.  I decided to write one myself.&lt;br /&gt;&lt;br /&gt;This application simply times how long the iexplore.exe process is in memory.  I know that doesn't answer how long I'm on the Internet, but it should give me a pretty good idea.&lt;br /&gt;&lt;br /&gt;You can download it here:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.ellisbi.com/files/IETimer.exe"&gt;IE Timer&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;FYI, it requires the Microsoft DotNet Framework 2.0.  You probably already have it installed.&lt;br /&gt;&lt;br /&gt;Here's a screenshot of my IE time as of this writing:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_4PW4OaDjoW0/SigWjETtSsI/AAAAAAAAABo/s-4LKQy_J1o/s1600-h/IETimer.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 41px;" src="http://4.bp.blogspot.com/_4PW4OaDjoW0/SigWjETtSsI/AAAAAAAAABo/s-4LKQy_J1o/s320/IETimer.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5343545749582727874" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4504977711974458840?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4504977711974458840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4504977711974458840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4504977711974458840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4504977711974458840'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/06/internet-explorer-timer.html' title='Internet Explorer Timer'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_4PW4OaDjoW0/SigWjETtSsI/AAAAAAAAABo/s-4LKQy_J1o/s72-c/IETimer.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-5491287969366579487</id><published>2009-06-02T06:00:00.000-07:00</published><updated>2010-02-12T06:19:10.009-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>The Power of Less</title><content type='html'>&lt;a href="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S0OUjUtLKYI/AAAAAAAAAAw/ym3F5dJmKpI/s1600-h/ThePowerofLess.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 85px; height: 128px;" src="http://2.bp.blogspot.com/_wtQnQ0Is4lk/S0OUjUtLKYI/AAAAAAAAAAw/ym3F5dJmKpI/s320/ThePowerofLess.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423341710858725762" /&gt;&lt;/a&gt;&lt;br /&gt;Overall, I enjoyed the book I learned the following things:&lt;br /&gt;&lt;br /&gt;1) Get to the essentials in everything in life and ignore the rest. Eliminate things that do not add value towards a primary goal.&lt;br /&gt;&lt;br /&gt;2) Only work on one primary goal at a time. Either lose weight or finish the degree or write the great American novel. Avoid spreading yourself too thin.&lt;br /&gt;&lt;br /&gt;3) Focus on a single task until that task is accomplished. Trying to complete a project while keeping the cell phone on and watching for new email notifications is not very efficient. It also leads to a hectic and harried life. Turn off all outside extractions and immerse into a project. Time will go by faster and happiness will follow.&lt;br /&gt;&lt;br /&gt;This book should have been 50 pages, rather than a 160. It is a tad repetitive and is easily skimmed.  You can also learn everything you need to know by looking at this guy’s blog:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://zenhabits.net/"&gt;Zen Habits&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;Here's the Amazon link:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Power-Less-Limiting-Yourself-Essential/dp/1401309704"&gt;The Power of Less&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-5491287969366579487?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/5491287969366579487/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=5491287969366579487' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5491287969366579487'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/5491287969366579487'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/06/power-of-less.html' title='The Power of Less'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_wtQnQ0Is4lk/S0OUjUtLKYI/AAAAAAAAAAw/ym3F5dJmKpI/s72-c/ThePowerofLess.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1582852368428392167</id><published>2009-05-21T15:56:00.000-07:00</published><updated>2010-02-12T06:19:33.655-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server 2008 Shrink Log File</title><content type='html'>When DBAs wanted to shrink a log file in SQL 2000 and 2005, they would often backup the log with TRUNCATE_ONLY.  When they attempt to do the same thing in SQL Server 2008, they will be greeted with this message:&lt;br /&gt;&lt;br /&gt;'TRUNCATE_ONLY' is not a recognized BACKUP option.&lt;br /&gt;&lt;br /&gt;Here is a replacement script for SQL Server 2008:&lt;br /&gt;&lt;br /&gt;USE Test&lt;br /&gt;GO&lt;br /&gt;ALTER DATABASE Test&lt;br /&gt;SET RECOVERY SIMPLE&lt;br /&gt;GO&lt;br /&gt;&lt;br /&gt;DBCC SHRINKFILE(Test_Log, 10)&lt;br /&gt;&lt;br /&gt;GO&lt;br /&gt;ALTER DATABASE Test&lt;br /&gt;SET RECOVERY FULL&lt;br /&gt;&lt;br /&gt;This script puts the database in Simple Recovery mode.  It then shrinks the log file.  Finally, it puts the database back in Full Recovery mode.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1582852368428392167?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1582852368428392167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1582852368428392167' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1582852368428392167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1582852368428392167'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/05/sql-server-2008-shrink-log-file.html' title='SQL Server 2008 Shrink Log File'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6397691348310118083</id><published>2009-05-18T10:51:00.000-07:00</published><updated>2010-02-12T06:19:51.169-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>New Index grayed out in SQL Server Management Studio</title><content type='html'>In SQL Server Management Studio, if you right-click on the indexes and you see new index grayed out, it is because the table is schema-locked in another window.  Close the design view of the table and new index should now be black and usable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6397691348310118083?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6397691348310118083/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6397691348310118083' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6397691348310118083'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6397691348310118083'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/05/new-index-grayed-out-in-sql-server.html' title='New Index grayed out in SQL Server Management Studio'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-2133412137987021092</id><published>2009-05-14T15:01:00.000-07:00</published><updated>2010-02-12T06:20:06.041-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><title type='text'>Putting for Analytics</title><content type='html'>I often do my best thinking on a putting green that is conveniently located about half mile from my desk.  &lt;br /&gt;&lt;br /&gt;Recently, I was all lined up, taking a practice swing, and it was perfect, very smooth.  My practice swings are usually pretty good, I remember and focus on all the technique I have learned from coaches, lectures, books, experience.  I swing freely and effortlessly.  &lt;br /&gt;&lt;br /&gt;Things only seem to go awry when I put a ball in front of me.  I stop swinging freely, I tense up, tighten my grip, and both my swing and the ball become erratic.  I have spent years attempting to recreate my practice swing with a ball present, I am sometimes successful, sometimes less so, but I’m always a scratch golfer when I golf without a ball. &lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_4PW4OaDjoW0/SgyU5Zr3VzI/AAAAAAAAABY/29r_XN44ZsQ/s1600-h/tpc_17_17a.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_4PW4OaDjoW0/SgyU5Zr3VzI/AAAAAAAAABY/29r_XN44ZsQ/s320/tpc_17_17a.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5335803372395517746" /&gt;&lt;/a&gt;&lt;br /&gt;Why is there a difference between my practice swing and my real swing?  I think it's because when the ball is there, I become so focused on performance that I no longer think about the process that gets me the putt I am after.  &lt;br /&gt;&lt;br /&gt;I have found the same to be true about a performance focused mindset in business intelligence.  Companies spend much less time examining the fundamentals of what got them to where they are in the first place.  While examining the reports of a standard company, all focus is directed on dissecting "What happened?"  When companies are only performance-oriented, much time is spent analyzing sales by product, by territory, by sales person, by location, or by time of the year.  Retail organizations look sharply at sales during "the season", while time and billing firms examine their "top performers" with a keen interest.  But how much do these things impact the future?  Regardless of what the answer might have been in the past, our current recession has made it very clear that the companies that are solid are those who focused on sound fundamentals, on the process.  How effective is it now to examine December 2007 sales?  Will those figures have any impact or accurate prediction on what sales will be like in December 2009?  What about December 2010?  It is likely that if companies continue to be overly performance focused, reactions will be tense and erratic. &lt;br /&gt;&lt;br /&gt;I see examples of this behavior in the news, all the time.  The latest government stimulus packages are very reactive, with little thought put into goals, impact, future.  Wall Street is too results oriented.  Every time a firm posts numbers that are shorter than expectations, there is a direct impact on stock price, which affects the longevity of that organization.  As companies focus on current numbers, avoid creating a vision, and the process to implement it, they too compromise the future.  &lt;br /&gt;&lt;br /&gt;So I loosen up, I remember what I have been taught and what I have learned from experience.  I know how to do this.  I remind myself that keeping an eye on the ball is important...but I will never make it to the hole/goal if I lose my grip on the club.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-2133412137987021092?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/2133412137987021092/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=2133412137987021092' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2133412137987021092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2133412137987021092'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/05/putting-for-analytics.html' title='Putting for Analytics'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4PW4OaDjoW0/SgyU5Zr3VzI/AAAAAAAAABY/29r_XN44ZsQ/s72-c/tpc_17_17a.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-9150345506721178399</id><published>2009-05-12T13:41:00.000-07:00</published><updated>2010-02-12T06:20:25.726-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Reporting Services'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SSRS 2008 List All Reports, Users, Roles, and Security</title><content type='html'>Someone on the newsgroups today asked the following question:&lt;br /&gt;&lt;br /&gt;Is there any report that can be run in Reporting Services that lists&lt;br /&gt;all reports and the users that have access?&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I assumed he meant that he wanted a list of all the reports he has, and a list or roles and the users that are in them.  I quickly wrote the following query for him.  I hope some of you find it useful:&lt;br /&gt;&lt;br /&gt;SELECT u.UserName, c.[Path], c.[Name], r.RoleName,  * &lt;br /&gt; FROM Users u &lt;br /&gt;   JOIN PolicyUserRole pur&lt;br /&gt; ON u.UserID = pur.UserID &lt;br /&gt;   JOIN Policies p &lt;br /&gt; ON pur.policyID = p.PolicyID&lt;br /&gt;   JOIN Catalog c &lt;br /&gt; ON p.policyID = c.policyID &lt;br /&gt;   JOIN Roles r &lt;br /&gt; ON pur.RoleID = r.RoleID &lt;br /&gt;        ORDER BY u.UserName, c.[Name], r.RoleName&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-9150345506721178399?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/9150345506721178399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=9150345506721178399' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/9150345506721178399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/9150345506721178399'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/05/ssrs-2008-list-all-reports-users-roles.html' title='SSRS 2008 List All Reports, Users, Roles, and Security'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-2318719267412210018</id><published>2009-05-05T09:39:00.000-07:00</published><updated>2010-01-05T11:19:38.959-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review - 10 Days to Faster Reading</title><content type='html'>&lt;a href="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OQsJunz_I/AAAAAAAAAAg/NruPSjy0DYA/s1600-h/10Days_.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 90px; height: 135px;" src="http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OQsJunz_I/AAAAAAAAAAg/NruPSjy0DYA/s320/10Days_.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5423337464484319218" /&gt;&lt;/a&gt;&lt;br /&gt;I loved this book, and I think all software developers and business stakeholders should read it. We all have a lot to read, and getting through some of it quickly will give us back the gift of time.&lt;br /&gt;&lt;br /&gt;Here is what I learned:&lt;br /&gt;&lt;br /&gt;1) In general, authors are repetitive, so once you get the point, and you don't need to see the supporting evidence used to reinforce it, just skip the rest and find the next point.&lt;br /&gt;&lt;br /&gt;2) Read with an index card covering the line and you'll stay focused and read faster. I don't find that particularly enjoyable. I only do this when there's a book I have to read for work, like a standards specification, or something really boring.&lt;br /&gt;&lt;br /&gt;3) If I read 150 words per minute or 400 words per minute, my comprehension stays the same, around 80%. So if my comprehension is the same, I might as well read fast.&lt;br /&gt;&lt;br /&gt;If you want to buy this book, here's the Amazon link:&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Faster-Reading-Princeton-Language-Institute/dp/B002YNS0PI/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1262712804&amp;sr=8-1"&gt;10 Days to Faster Reading&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-2318719267412210018?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/2318719267412210018/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=2318719267412210018' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2318719267412210018'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2318719267412210018'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2010/01/book-review-10-days-to-faster-reading.html' title='Book Review - 10 Days to Faster Reading'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/02197875751662723251</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_wtQnQ0Is4lk/S0OQsJunz_I/AAAAAAAAAAg/NruPSjy0DYA/s72-c/10Days_.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-662571821218049282</id><published>2009-04-12T13:26:00.000-07:00</published><updated>2010-02-12T06:20:58.750-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Book Review'/><title type='text'>Book Review:  Getting Started with Consulting</title><content type='html'>&lt;a href="http://3.bp.blogspot.com/_4PW4OaDjoW0/Sgne5aDGTEI/AAAAAAAAABQ/HNlNLYmRdfQ/s1600-h/GettingStarted.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 240px; height: 240px;" src="http://3.bp.blogspot.com/_4PW4OaDjoW0/Sgne5aDGTEI/AAAAAAAAABQ/HNlNLYmRdfQ/s320/GettingStarted.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5335040311423290434" /&gt;&lt;/a&gt;&lt;br /&gt;I just finished reading "Getting Started with Consulting" and I loved it.  I've been a consultant for nine years.  This book did three things for me:&lt;br /&gt;&lt;br /&gt;1)  It confirmed the things I was doing right, but felt like I was the only one doing them.&lt;br /&gt;2)  It told me to stop doing things that weren't working, but I kept trying anyway.  I suppose I did this because I felt like everyone else was doing them, so why shouldn't I?&lt;br /&gt;3)  It gave me important insight into consulting as a business.  It taught me how to market, how to arrive at good pricing, and how to network more efficiently.&lt;br /&gt;&lt;br /&gt;In this job market that many of you are looking for new positions.  If you are considering a consulting practice, this book will be an excellent beginning.&lt;br /&gt;&lt;br /&gt;&lt;A HREF="http://www.amazon.com/Getting-Started-Consulting-Alan-Weiss/dp/0470419806/ref=sr_1_1?ie=UTF8&amp;s=books&amp;qid=1242160834&amp;sr=8-1"&gt;Amazon Link&lt;/A&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-662571821218049282?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/662571821218049282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=662571821218049282' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/662571821218049282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/662571821218049282'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2009/04/book-review-getting-started-with.html' title='Book Review:  Getting Started with Consulting'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_4PW4OaDjoW0/Sgne5aDGTEI/AAAAAAAAABQ/HNlNLYmRdfQ/s72-c/GettingStarted.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3385277799436145916</id><published>2008-11-06T08:31:00.001-08:00</published><updated>2010-02-12T06:22:16.608-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Excel at Excel (Or My Quick Tips for MS Excel)</title><content type='html'>In this space, sometimes I'll offer strategic insight into the Business Intelligence space, and sometimes I'll offer helpful tips to the grunts* in the field, actually doing the heavy lifting of reporting, analyzing, and planning.  These tips will cover mostly Microsoft products, since that’s what I specialize in.  I have tips for SQL Reporting Services, SQL Integration Services, SQL Analysis Services, MDX, T-SQL, and most importantly, Microsoft Excel.&lt;br /&gt;&lt;br /&gt;The major arrow of every analyst's quiver is Microsoft Excel.  Without exception, it is heavily used at every single one of my customers.  I won't give away all of my tips now.  What would keep you coming back?  Certainly not my charming personality...&lt;br /&gt;Here are a few overlooked gems that Microsoft Excel offers you:&lt;br /&gt;&lt;br /&gt;-By default, when you look at a spreadsheet, you see the results of the formulas, not the formulas themselves.  You can manually set "Show Formulas", or you can just click CTRL-' (that a single quote.)  Usually you can find that key just to the left of the 1 key on the top row of your keyboard.&lt;br /&gt;&lt;br /&gt;-You can look at the same workbook in two different windows.  You can keep "Show Formula" on one view of the workbook and the default results of the formulas on the other view of the workbook.  This works great if you have multiple monitors, displaying each view on its own monitor.&lt;br /&gt;&lt;br /&gt;-In Excel 2007, the status bar is better than ever.  Highlight some cells and look at your status bar at the bottom of the screen.  You'll see a count, sum, and average right in front of you.  In addition, right-click on the status bar and check out all of your options.  You'll be surprised at what you can view down there.&lt;br /&gt;&lt;br /&gt;-Most people know how to save a workbook, but did you know you can save an entire workspace?  When you work on those month-end reports, and you find yourself looking at the same four worksheets over and over again, save it as a workspace.  The next time you work on month-end, just open up the workspace and those four worksheets will open right in front of you.  It's hidden on the View tab of the ribbon.  It's called "Save Workspace."&lt;br /&gt;&lt;br /&gt;-If you want the same report to open each time you start your computer, just follow these steps.  First, put a shortcut to MS Excel in the Startup folder of your Start menu.  Then find the startup folder of MS Excel.  Put your workbook in there.  You can usually find it at "C:\Users\Ike(unless your name is not Ike, then just use your name)\AppData\Roaming\Microsoft\Excel\XLStart".  &lt;br /&gt;&lt;br /&gt;That's it for now.  Keep checking back for more quick tips and hints.&lt;br /&gt;&lt;br /&gt;*I use the word “grunts” with nothing but respect and fondness.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3385277799436145916?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3385277799436145916/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3385277799436145916' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3385277799436145916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3385277799436145916'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2008/11/excel-at-excel-or-my-quick-tips-for-ms.html' title='Excel at Excel (Or My Quick Tips for MS Excel)'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8299874822926245192</id><published>2008-10-15T13:41:00.000-07:00</published><updated>2010-02-12T06:21:57.435-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><title type='text'>QlikView vs Gemini</title><content type='html'>Last week, at Microsoft's Business Intelligence Conference, I was excited to see that QlikView had a booth.  There's been a lot of buzz about this little company.  Gartner recently named them as a challenger in the BI space.  They are positioning themselves as a BI solution that the business users control with very little IT involvement.  As far as I can tell, here are their main selling points:&lt;br /&gt;&lt;br /&gt;-No IT-built cubes.  I can see why this is so attractive.  Most contemporary business users see IT as their main stumbling block.  Business users hate waiting so long to see business requirements finally make their way into the cubes.  QlikView does this by creating something called "in-memory" cubes.  Supposedly, you create the cubes using the interface and it stores them internally for you.  All you need is access to the data warehouse.&lt;br /&gt;&lt;br /&gt;-Lightening-fast queries.  Because the data is stored in memory, response time is minimized and performance is increased.&lt;br /&gt;&lt;br /&gt;-Intuitive user interface design.  I didn't find it all that intuitive.  It was OK, but I thought it was a little clunky.&lt;br /&gt;&lt;br /&gt;Anyway, I think this company has some really neat technology, but it probably doesn't have much of a future on the Microsoft platform.  Microsoft headlined Project Gemini at the conference.  It seemed to me to be the exact same product, including using "in-memory cubes."  They also used the phrase "empowering business users."  That is the same phrase the QlikView booth guys said about their product.  Microsoft demo'd Gemini and it looked exactly like MS Excel.  They showed how they can build in-memory cubes, upload it into SharePoint, and share them with other business users.  Microsoft said that Gemini was just another cube storage option.  You’ll be able to choose between MOLAP, HOLAP, and in-memory cube storage.  It was pre-beta (probably pre-alpha) and I think it spells bad news for QlikView.  We’ll see how quickly Microsoft can get this shipped to us.&lt;br /&gt;&lt;br /&gt;Here are some links for you:&lt;br /&gt;&lt;br /&gt;http://www.qlikview.com/home.aspx&lt;br /&gt;http://www.microsoft.com/Presspass/press/2008/oct08/10-06BI08PR.mspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8299874822926245192?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8299874822926245192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8299874822926245192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8299874822926245192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8299874822926245192'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2008/10/qlikview-vs-gemini.html' title='QlikView vs Gemini'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-325002344747269574</id><published>2008-08-11T20:56:00.001-07:00</published><updated>2010-02-12T06:22:44.003-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>The Ideal Customer: One Person Who Calls The Shots</title><content type='html'>Further reading from Mr. Parmenter’s “Key Performance Indicators”, unveiled this nugget; “Any layer between the CEO and the [KPI] team indicates that Step 1 has not been successfully achieved.  This point is so important that the project should not proceed if the CEO does wish to be involved in this way.”&lt;br /&gt;&lt;br /&gt;Mr. Parmenter’s point is that the KPI project team should report directly to the CEO and no one else.&lt;br /&gt;&lt;br /&gt;I was just talking to my oft-quotable, former business partner, Roy Allen.  He said, “I only want to work with customers who have a single person who is responsible for the entire organization, and that person mandates what the other employees of that organization do.”&lt;br /&gt;&lt;br /&gt;In other words, Roy likes decision makers who actually make decisions and he wants to report directly to that decision maker.  He feels like that’s the only way to ensure success of his projects at that organization.&lt;br /&gt;&lt;br /&gt;I don’t know about Roy’s projects, but Business Intelligence projects need a top-down mandate in order to succeed.  I don’t always get to report to the CEO, but I love it when I do.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-325002344747269574?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/325002344747269574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=325002344747269574' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/325002344747269574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/325002344747269574'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2008/08/ideal-customer-one-person-who-calls.html' title='The Ideal Customer: One Person Who Calls The Shots'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1634974333241917607</id><published>2008-08-05T20:50:00.000-07:00</published><updated>2010-02-12T06:23:01.015-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Agile'/><title type='text'>I'm Not Pete Rose</title><content type='html'>I went to Lake &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Havasu&lt;/span&gt; with my old business partner, Roy Allen, this weekend.&lt;br /&gt;While we were out boating with our families, hanging out in the nice cool lake, avoiding the 120 degree heat, he said something pretty interesting.&lt;br /&gt;He said, "You know your problem, Ike? You suffer what most of us suffer from. You are a terrible player-manager."&lt;br /&gt;&lt;br /&gt;After I got over my shock, I asked him what he meant by that. He explained that there hasn't been a really good player-manager in baseball since Pete Rose, and even he wasn't all that great. He said that in a services firm, there are players (&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;billers&lt;/span&gt;) and there are managers, and you can't be really good at both. You can stink at both, or stink at one, but being good at both is not an option. He explained that someone has to play the game and someone has to watch the players objectively, because only the manager will have good insight on how the game is progressing.&lt;br /&gt;&lt;br /&gt;After some thought, I totally agree. And since I find consulting, teaching, and creating solutions so much fun, it looks like I'm going to need a full-time manager for the rest of the staff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1634974333241917607?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1634974333241917607/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1634974333241917607' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1634974333241917607'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1634974333241917607'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2008/08/im-not-pete-rose.html' title='I&apos;m Not Pete Rose'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-2884785811191020237</id><published>2008-07-15T20:55:00.000-07:00</published><updated>2010-02-12T06:23:47.148-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Business Intelligence'/><title type='text'>Don't Rush to Buy Software</title><content type='html'>I was reading “Key Performance Indicators”, by David Parmenter today, and came across an interesting passage.   Mr. Parmenter says, “Much can be done with existing application such as Excel, PowerPoint, SharePoint Team Services, and Access.  There is often no need to purchase specialized software at this stage.  Any such purchases can be done more efficiently and effectively 12 months down the track.”&lt;br /&gt;&lt;br /&gt;Wow, finally someone is speaking my language.   Managing a business through effective KPIs is such a drastic culture change, that most organizations fail at it.   Instead of introducing new tools and applications, organizations should really take a hard look at the software they already own and use.  Once the KPI project is in place and a seamless part of the atmosphere of the company, then new and more effective tools can be researched.&lt;br /&gt;&lt;br /&gt;Though Mr. Parmenter is a technology agnostic consultant, I find it interesting that he lists all Microsoft applications.  I suppose he does this because it is safe to assume that most organizations already own these products.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-2884785811191020237?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/2884785811191020237/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=2884785811191020237' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2884785811191020237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/2884785811191020237'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2008/07/dont-rush-to-buy-software.html' title='Don&apos;t Rush to Buy Software'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-227090534148411521</id><published>2008-06-30T20:57:00.000-07:00</published><updated>2008-08-11T20:58:37.439-07:00</updated><title type='text'>Down the Rabbit Hole</title><content type='html'>At the beginning of Brian Larson's book, "Delivering Business Intelligence with Microsoft SQL Server 2005", the author quotes Alice's Adventure in Wonderland.&lt;br /&gt;&lt;br /&gt;"Would you tell me please, which way I ought to go from here?" asked Alice.&lt;br /&gt;"That depends a good deal on where you want to get to," said the Cat.&lt;br /&gt;"I don't much care where," said Alice.&lt;br /&gt;"Then, it doesn't matter which way you go," said the Cat.&lt;br /&gt;&lt;br /&gt;The Cheshire Cat reminds us how important goals and direction are to leadership. All the immaculate data in the world won't help an organization if it doesn't have a clear idea on where it wants to go. Unfortunately, it is sometimes a chicken and the egg situation. Leadership has a hard time mapping direction when it doesn't have a clear idea on the current state of the company.&lt;br /&gt;&lt;br /&gt;This analogy provides an excellent case on why monitoring projects should be implemented before planning projects.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-227090534148411521?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/227090534148411521/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=227090534148411521' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/227090534148411521'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/227090534148411521'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2008/08/down-rabbit-hole.html' title='Down the Rabbit Hole'/><author><name>Ike Ellis</name><uri>http://www.blogger.com/profile/15497978705410843645</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3751970151471344737</id><published>2007-12-06T13:42:00.000-08:00</published><updated>2010-02-12T06:24:06.783-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>SQL Server Support with VMWare</title><content type='html'>I have a client who is running &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;SQL&lt;/span&gt; Server 2005 &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_1"&gt;Standard&lt;/span&gt; Edition on a &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;VMWare&lt;/span&gt; &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ESX&lt;/span&gt; operating system.  I wondered if Microsoft supported this environment and did some digging.  I had some difficulty finding current information, so once I found it, I thought I'd share it with you.&lt;br /&gt;&lt;br /&gt;As of November 2007, Microsoft says they do not support third party software &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;virtualization&lt;/span&gt;.  They require that you reproduce the issue in a non-&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;virtualized&lt;/span&gt; environment before they will help you.  Here's the link confirming that:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://support.microsoft.com/kb/897615"&gt;http://support.microsoft.com/kb/897615&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3751970151471344737?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3751970151471344737/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3751970151471344737' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3751970151471344737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3751970151471344737'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/12/sql-server-support-with-vmware.html' title='SQL Server Support with VMWare'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8187827509230601665</id><published>2007-11-25T07:10:00.000-08:00</published><updated>2010-02-12T06:24:36.199-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Tracing Events Appropriately</title><content type='html'>When using SQL Server Profiler, it is generally a good idea to only trace COMPLETED events, instead of starting events.&lt;br /&gt;&lt;br /&gt;Completed events have all necessary performance information. The starting events do not have important performance statistics because they haven't been collected yet. This will reduce the load of tracing and give you less data to filter out later.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8187827509230601665?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8187827509230601665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8187827509230601665' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8187827509230601665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8187827509230601665'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/12/tracing-events-appropriately.html' title='Tracing Events Appropriately'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4443470968171681543</id><published>2007-11-11T06:48:00.000-08:00</published><updated>2010-02-12T06:24:49.065-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Performance Tuning and the Heisenberg Uncertainty Principle</title><content type='html'>Often when I visit a new client, they say, "We need you to start SQL Server Profiler and tell us why our server is so slow."&lt;br /&gt;&lt;br /&gt;I'm reluctant to immediately resort to the SQL Server tracing utilities because of the performance load that they cause. Sometimes, I explain to the Heisenberg Uncertainty Principle:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Uncertainty_principle"&gt;http://en.wikipedia.org/wiki/Uncertainty_principle&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;and similarly the Observer Effect:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/Observer_effect"&gt;http://en.wikipedia.org/wiki/Observer_effect&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Developed by Werner Heisenberg in 1927, this principal states that when you measure something, there is uncertainty caused by the measuring process. For instance, if we write our trace logs to a file and we're looking for disk contention, the tracing itself might be contributing to it. The uncertainty might also be caused by the measuring logic. We might be looking at excessive disk contention and determine that we need faster disks. But what if memory paging is causing the pages to be written to disk? In that case, our measuring logic was flawed, and we would need to add more RAM to resolve the performance bottlenecks.&lt;br /&gt;&lt;br /&gt;So before I start SQL tracing, I like to use other tools first. Task Manager, System Monitor, Activity Monitor, and DMVs will tell us an awful lot about a server's performance before tracing is even needed. This allows me to observe the server's performance with an open mind, before using invasive tracing utilities.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4443470968171681543?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4443470968171681543/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4443470968171681543' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4443470968171681543'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4443470968171681543'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/11/performance-tuning-and-heisenberg.html' title='Performance Tuning and the Heisenberg Uncertainty Principle'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8151323649353660884</id><published>2007-10-21T11:01:00.000-07:00</published><updated>2007-10-30T10:07:28.236-07:00</updated><title type='text'>Max Column Length</title><content type='html'>This script will return all the columns in a table and the maximum length of all data in them.&lt;br /&gt;&lt;br /&gt;DECLARE ColumnList CURSOR&lt;br /&gt;FOR&lt;br /&gt;SELECT c.[name] AS ColumnName&lt;br /&gt;FROM sys.Columns c&lt;br /&gt;JOIN sys.Tables t&lt;br /&gt;ON c.Object_ID = t.Object_ID&lt;br /&gt;WHERE t.Name = 'reyAASerWIP'&lt;br /&gt;DECLARE @ColumnName varchar(30)&lt;br /&gt;OPEN ColumnList&lt;br /&gt;FETCH NEXT FROM ColumnList INTO @ColumnName&lt;br /&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;BEGIN&lt;br /&gt;PRINT @ColumnName&lt;br /&gt;EXECUTE('SELECT MAX(LEN(RTRIM(' + @ColumnName+ '))) AS ' + @ColumnName + ' FROM reyAASerWIP ')&lt;br /&gt;FETCH NEXT FROM ColumnList INTO @ColumnName&lt;br /&gt;END&lt;br /&gt;CLOSE ColumnList&lt;br /&gt;DEALLOCATE ColumnList&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8151323649353660884?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8151323649353660884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8151323649353660884' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8151323649353660884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8151323649353660884'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/10/max-column-length.html' title='Max Column Length'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-8410884092184153634</id><published>2007-10-14T19:56:00.000-07:00</published><updated>2007-10-14T20:25:37.906-07:00</updated><title type='text'>Importing CSVs with SSIS</title><content type='html'>&lt;p&gt;The CSV import process is much more difficult with SSIS than it was for DTS. Scanning the MS newsgroups it looks like many of the problems will be corrected in SQL Server 2008. That's a long ways off, so let's look at some of the issues and how we can solve them.&lt;br /&gt;&lt;br /&gt;Our CSV looks like this:&lt;br /&gt;&lt;br /&gt;1- Name, Address, PhoneNumber, InvoiceAmount&lt;br /&gt;2- "Fred Flintstone", "365 Stone Ave, BedRock, StoneAge", "928-555-1212", "25.00"&lt;br /&gt;3- "Barney Rubble, "152 Granite Street, BedRock, StoneAge", "928.555.6326"&lt;br /&gt;4- "Mister Slate", "52 Diamond Road", BedRock, StoneAge", "928.555.5332", "14.00"&lt;br /&gt;&lt;br /&gt;The first problem is that there are commas enclosed by quotation marks in the Address field. SSIS will put BedRock as the PhoneNumber and StoneAge as the InvoiceAmount. This is very easy to solve. In the properties window of the Flat File Connection Manager, you will see a textbox labeled "Text qualifier." Just put a quotation mark in that field and it will see that the address column contains commas.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_uaeA9FCikbQ/RxLZLyLwfCI/AAAAAAAAAEo/gpPMrmpCu8k/s1600-h/ConnectionProperties.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5121394522746551330" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; WIDTH: 483px; CURSOR: hand; HEIGHT: 353px" height="319" alt="" src="http://4.bp.blogspot.com/_uaeA9FCikbQ/RxLZLyLwfCI/AAAAAAAAAEo/gpPMrmpCu8k/s320/ConnectionProperties.jpg" width="590" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;The next issue is that record #3 does not have the appropriate number of columns. It is one column short. DTS would handle this by inserting NULLs in the missing fields and then moving on to the next record. SSIS chokes on this. It will attempt to put "Mister Slate" in the InvoiceAmount field of record #3.&lt;br /&gt;&lt;br /&gt;To solve this issue, I wrote the following script. I had to write it in VB.NET, since SSIS does not allow C# quite yet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Imports System&lt;br /&gt;Imports System.Data&lt;br /&gt;Imports System.Math&lt;br /&gt;Imports Microsoft.SqlServer.Dts.Runtime&lt;br /&gt;Imports System.IO&lt;br /&gt;Imports System.Text&lt;br /&gt;Public Class ScriptMain&lt;br /&gt;Public Sub Main()&lt;br /&gt;Dim myLineCount As Int32 = 0&lt;br /&gt;Dim myFilePath As String = Dts.Connections("FlintstoneCSV").ConnectionString&lt;br /&gt;Dim myNewFilePath As String = Dts.Connections("NewFlintstoneCSV").ConnectionString&lt;br /&gt;Dim myNewFile As FileInfo = New FileInfo(myNewFilePath)&lt;br /&gt;Dim myNewFileStream As FileStream = myNewFile.Create()&lt;br /&gt;Dim myFileStream As FileStream = New FileStream(myFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite)&lt;br /&gt;Dim myStreamReader As New StreamReader(myFileStream)&lt;br /&gt;Dim myStreamWriter As StreamWriter = New StreamWriter(myNewFileStream, Encoding.ASCII)&lt;br /&gt;Dim myLine As String&lt;br /&gt;Try&lt;br /&gt;myLine = myStreamReader.ReadLine&lt;br /&gt;While Not myStreamReader.EndOfStream&lt;br /&gt;Dim myOffSet As Int32 = 1&lt;br /&gt;Dim myBeginIndex As Int32&lt;br /&gt;Dim myEndIndex As Int32&lt;br /&gt;Dim myCount As Int32 = 0&lt;br /&gt;Dim myColumnCount As Int32 = 41&lt;br /&gt;Dim myCommaCount As Int32 = 0&lt;br /&gt;Dim myChar As Char&lt;br /&gt;'myLineCount += 1&lt;br /&gt;'Dts.Events.FireInformation(0, "Cleaning CSV", "Processing Line " + myLineCount.ToString(), "", 0, True)&lt;br /&gt;Dim myLineChars As Char() = myLine.ToCharArray()&lt;br /&gt;While myCount &lt;= myLineChars.Length - 1 If myLineChars(myCount) = """" Then myCount = InStr(myCount + 2, myLine, """") Else If myLineChars(myCount) = Convert.ToChar(",") Then myCommaCount += 1 End If myCount += 1 End If End While Dim myCommas As String = "" If myColumnCount - myCommaCount &gt; 0 Then&lt;br /&gt;myCommas = New String(Convert.ToChar(","), myColumnCount - myCommaCount)&lt;br /&gt;End If&lt;br /&gt;myStreamWriter.WriteLine(myLine.Replace(vbCrLf, "") + myCommas)&lt;br /&gt;myLine = myStreamReader.ReadLine&lt;br /&gt;End While&lt;br /&gt;&lt;br /&gt;Dts.TaskResult = Dts.Results.Success&lt;br /&gt;Catch ex As Exception&lt;br /&gt;Dts.Events.FireError(0, "Cleaning CSV", "Encountered Error " + ex.Message _&lt;br /&gt;+ " While Processing Line " + myLine, "", 0)&lt;br /&gt;Dts.TaskResult = Dts.Results.Failure&lt;br /&gt;Finally&lt;br /&gt;myStreamReader.Close()&lt;br /&gt;myStreamReader.Dispose()&lt;br /&gt;myStreamWriter.Flush()&lt;br /&gt;myStreamWriter.Close()&lt;br /&gt;myFileStream.Close()&lt;br /&gt;End Try&lt;br /&gt;End Sub&lt;br /&gt;End Class&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Originally, I put a call to DTS.Events.FireInformational to tell us how many records have completed processing. It turns out that calls to DTS.Events are very, very slow. I removed those lines and processing was much, much faster.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I recently imported a CSV file with very dirty data. It included fields that will stretch across multiple rows and fields with quotes in the data. After struggling with SSIS, I finally decided to write my own CSV importer. As I was beginning my project and doing CSV research, I stumbled upon this project, called "A Fast CSV Reader."&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/cs/database/CsvReader.asp"&gt;http://www.codeproject.com/cs/database/CsvReader.asp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I used this code, along with a SQLBulkCopy object from DotNet 2.0. It imported 9 million large rows of dirty data in just a few minutes. I was amazed. What cleaning it didn't do, I will do in a SPROC.&lt;br /&gt;&lt;br /&gt;Here is the extent of the code I wrote myself:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;using (LumenWorks.Framework.IO.Csv.CsvReader&lt;br /&gt;myCSVReader = new LumenWorks.Framework.IO.Csv.CsvReader(&lt;br /&gt;new StreamReader("c:\\Data\\Flintstone.csv", Encoding.ASCII), true,&lt;br /&gt;Convert.ToChar(",")&lt;br /&gt;, Convert.ToChar("\""), Convert.ToChar("\\"), Convert.ToChar("#"), true))&lt;br /&gt;{&lt;br /&gt;myCSVReader.DefaultParseErrorAction = ParseErrorAction.ThrowException;&lt;br /&gt;myCSVReader.MissingFieldAction = MissingFieldAction.ReplaceByEmpty;&lt;br /&gt;myCSVReader.SkipEmptyLines = true;&lt;br /&gt;myCSVReader.SupportsMultiline = true;&lt;br /&gt;using (SqlBulkCopy myBulkCopy = new SqlBulkCopy(SqlHelper.ConnectionString))&lt;br /&gt;{&lt;br /&gt;myBulkCopy.DestinationTableName = "Destination";&lt;br /&gt;myBulkCopy.BulkCopyTimeout = 30;&lt;br /&gt;myBulkCopy.BatchSize = 10000;&lt;br /&gt;myBulkCopy.WriteToServer(myCSVReader);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;MessageBox.Show("Import Success");&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-8410884092184153634?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/8410884092184153634/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=8410884092184153634' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8410884092184153634'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/8410884092184153634'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/10/importing-csvs-with-ssis.html' title='Importing CSVs with SSIS'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_uaeA9FCikbQ/RxLZLyLwfCI/AAAAAAAAAEo/gpPMrmpCu8k/s72-c/ConnectionProperties.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4624799071893493383</id><published>2007-09-22T13:08:00.000-07:00</published><updated>2011-01-27T16:37:40.799-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='T-SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Format dates and times in T-SQL</title><content type='html'>I stole this script off of the internet a few years ago.  I wish I could give the author credit for it, but I can't remember who he is.  If anyone knows, let me know and I'll add him to this post.&lt;br /&gt;&lt;br /&gt;This function allows you to do date/time formatting just like you do it in C# or VB.NET.&lt;br /&gt;&lt;br /&gt;I find it enormously useful.  My code is littered with calls to it.&lt;br /&gt;&lt;br /&gt;&lt;code style="font-size: 12px;"&gt;&lt;span style="color:black"&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;USE &lt;/span&gt;&lt;span style="color:black"&gt;[ncu]&lt;br&gt;GO&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;/****** Object:&amp;nbsp;&amp;nbsp;UserDefinedFunction [dbo].[FormatDateTime]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Script Date: 01/27/2011 17:31:15 ******/&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;SET &lt;/span&gt;&lt;span style="color:black"&gt;ANSI_NULLS &lt;/span&gt;&lt;span style="color:blue"&gt;ON&lt;br&gt;&lt;/span&gt;&lt;span style="color:black"&gt;GO&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;SET &lt;/span&gt;&lt;span style="color:black"&gt;QUOTED_IDENTIFIER &lt;/span&gt;&lt;span style="color:blue"&gt;ON&lt;br&gt;&lt;/span&gt;&lt;span style="color:black"&gt;GO&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;ALTER FUNCTION &lt;/span&gt;&lt;span style="color:black"&gt;[dbo].[FormatDateTime]&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;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime &lt;/span&gt;&lt;span style="color:blue"&gt;DATETIME&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; &lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_format&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;60&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;RETURNS VARCHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;60&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;AS&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;/*&lt;br&gt;||======================================================================&lt;br&gt;|| Purpose:&amp;nbsp;&amp;nbsp;Provide a more intuitive method of converting DATETIME&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; values to character.&amp;nbsp;&amp;nbsp;Only the parts specified within&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the input format request are sent back, and any other&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; characters are returned in their respective places.&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; Here are the special-request symbols:&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; [YY] or [YYYY]&amp;nbsp;&amp;nbsp; -&amp;gt; year&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [MM] or [M]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; month (numeric; 'M' means one digit&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;where possible)&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DD] or [D]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; day&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DWEEK]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; day of week&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DWK]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; 3-characters day of week abbreviation&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [MON]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; 3-character month abbreviation&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [MONTH]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; entire month name&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [HH] or [H]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; hour&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [24HH] or [24H]&amp;nbsp;&amp;nbsp;-&amp;gt; 24-hour clock&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [mm] or [m]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; minute&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [NN] or [N]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; minute&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [SS] or [S]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;-&amp;gt; second&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [AA] or [PP]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; 'AM' or 'PM'&lt;br&gt;||&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [AM] or [PM]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -&amp;gt; 'AM' or 'PM'&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; Every other character is considered part of the output.&lt;br&gt;||======================================================================&lt;br&gt;*/&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;/*&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;|| Data declarations...&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;60&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;7&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@translation &lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;9&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@hhmmss&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;CHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;8&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@year&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@month&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@day&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@minute&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@second&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@len&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;/*&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;|| Validations...&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;&amp;nbsp;&amp;nbsp;/*&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;|| A NULL input earns a NULL output...&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;IF &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime &lt;/span&gt;&lt;span style="color:blue"&gt;IS &lt;/span&gt;&lt;span style="color:gray"&gt;NULL&lt;br&gt;&amp;nbsp;&amp;nbsp;OR &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_format&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;IS &lt;/span&gt;&lt;span style="color:gray"&gt;NULL&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;--THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;GOTO &lt;/span&gt;&lt;span style="color:black"&gt;FNC_EXIT&lt;br&gt;&lt;/span&gt;&lt;span style="color:green"&gt;--END IF&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;/*&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;|| End of validations...&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;&amp;nbsp;&amp;nbsp;/*&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;|| Main logic...&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;&amp;nbsp;&amp;nbsp;/*&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;|| Acquire the value of each of the date-time components in integer&lt;br&gt;&amp;nbsp;&amp;nbsp;|| form...&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@hhmmss&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;8&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_format&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@year&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;YEAR&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;/span&gt;&lt;span style="color:#434343"&gt;@month&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;MONTH &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;/span&gt;&lt;span style="color:#434343"&gt;@day&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;DAY&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;LEFT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@hhmmss&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;/span&gt;&lt;span style="color:#434343"&gt;@minute&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;SUBSTRING &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@hhmmss&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;4&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; , &lt;/span&gt;&lt;span style="color:#434343"&gt;@second&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;INT&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@hhmmss&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;/*&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;|| For users' convenience, we allow small-case m to denote minutes&lt;br&gt;&amp;nbsp;&amp;nbsp;|| large-case M to denote month; or they can use the unintuitive&lt;br&gt;&amp;nbsp;&amp;nbsp;|| 'N' to denote minutes.&lt;br&gt;&amp;nbsp;&amp;nbsp;||&lt;br&gt;&amp;nbsp;&amp;nbsp;|| However, in order to support case-seensitivity even in a case-&lt;br&gt;&amp;nbsp;&amp;nbsp;|| insensitive environment, the code below locates each special symbol&lt;br&gt;&amp;nbsp;&amp;nbsp;|| within the specified format and replaces small-case '[m]' and&lt;br&gt;&amp;nbsp;&amp;nbsp;|| '[mm]' with '[N]' and '[NN]', or else all other small-case letters&lt;br&gt;&amp;nbsp;&amp;nbsp;|| with their large-case equivalents...&lt;br&gt;&amp;nbsp;&amp;nbsp;||====================================================================&lt;br&gt;&amp;nbsp;&amp;nbsp;*/&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos &lt;/span&gt;&lt;span style="color:blue"&gt;= CHARINDEX &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'['&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHILE &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos &lt;/span&gt;&lt;span style="color:gray"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:black"&gt;0&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos2 &lt;/span&gt;&lt;span style="color:blue"&gt;= CHARINDEX &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;']'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;IF &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos2 &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:black"&gt;0&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;--THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:black"&gt;0&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BEGIN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@len&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos2 &lt;/span&gt;&lt;span style="color:gray"&gt;- &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:black"&gt;1&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; &lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;SUBSTRING &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@len&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;IF &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARBINARY &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;120&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARBINARY &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;120&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:red"&gt;'[m]'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;--THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:red"&gt;'[N]'&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE IF &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARBINARY &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;120&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARBINARY &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;120&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:red"&gt;'[mm]'&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;--THEN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:red"&gt;'[NN]'&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;UPPER &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol&lt;/span&gt;&lt;span style="color:gray"&gt;)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;--END IF&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@translation &lt;/span&gt;&lt;span style="color:blue"&gt;=&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:magenta"&gt;CASE &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol&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;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[YYYY]' &lt;/span&gt;&lt;span style="color:green"&gt;-- year&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;CHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;4&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:#434343"&gt;@year&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[YY]'&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:green"&gt;-- year&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;CHAR &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;4&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:#434343"&gt;@year&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[MONTH]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;UPPER &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;DATENAME &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;MM&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[MON]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;LEFT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;UPPER &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;DATENAME &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;MM&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&gt;)), &lt;/span&gt;&lt;span style="color:black"&gt;3&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[M]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@month&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[MM]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@month&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[D]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@day&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[DD]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@day&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[DWEEK]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;UPPER &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;DATENAME &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;DW&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[DWK]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;UPPER &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;LEFT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:magenta"&gt;DATENAME &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:black"&gt;DW&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@f_datetime&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;3&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[H]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN&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;&lt;/span&gt;&lt;span style="color:magenta"&gt;CASE&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;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour &lt;/span&gt;&lt;span style="color:gray"&gt;BETWEEN &lt;/span&gt;&lt;span style="color:black"&gt;1 &lt;/span&gt;&lt;span style="color:gray"&gt;AND &lt;/span&gt;&lt;span style="color:black"&gt;12&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;ABS &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@hour &lt;/span&gt;&lt;span style="color:gray"&gt;- &lt;/span&gt;&lt;span style="color:black"&gt;12&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;END&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;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[HH]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN&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;&lt;/span&gt;&lt;span style="color:magenta"&gt;CASE&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;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour &lt;/span&gt;&lt;span style="color:gray"&gt;BETWEEN &lt;/span&gt;&lt;span style="color:black"&gt;1 &lt;/span&gt;&lt;span style="color:gray"&gt;AND &lt;/span&gt;&lt;span style="color:black"&gt;12&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:magenta"&gt;ABS &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@hour &lt;/span&gt;&lt;span style="color:gray"&gt;- &lt;/span&gt;&lt;span style="color:black"&gt;12&lt;/span&gt;&lt;span style="color:gray"&gt;)), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;END&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;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[24H]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[24HH]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[N]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@minute&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[NN]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@minute&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[S]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@second&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:red"&gt;'[SS]'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:magenta"&gt;RIGHT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'0' &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;CONVERT &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@second&lt;/span&gt;&lt;span style="color:gray"&gt;), &lt;/span&gt;&lt;span style="color:black"&gt;2&lt;/span&gt;&lt;span style="color:gray"&gt;)&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;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE&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;&lt;/span&gt;&lt;span style="color:magenta"&gt;CASE&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;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol &lt;/span&gt;&lt;span style="color:blue"&gt;IN &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'[AM]'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'[PM]'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'[AA]'&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:red"&gt;'[PP]'&lt;/span&gt;&lt;span style="color:gray"&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;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN&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;&lt;/span&gt;&lt;span style="color:magenta"&gt;CASE&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;&lt;/span&gt;&lt;span style="color:blue"&gt;WHEN &lt;/span&gt;&lt;span style="color:#434343"&gt;@hour &lt;/span&gt;&lt;span style="color:gray"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color:black"&gt;12&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;&lt;/span&gt;&lt;span style="color:blue"&gt;THEN &lt;/span&gt;&lt;span style="color:red"&gt;'AM'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;ELSE &lt;/span&gt;&lt;span style="color:red"&gt;'PM'&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;&lt;/span&gt;&lt;span style="color:blue"&gt;END&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;ELSE &lt;/span&gt;&lt;span style="color:#434343"&gt;@symbol&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;&lt;/span&gt;&lt;span style="color:blue"&gt;END&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;END&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT &lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime &lt;/span&gt;&lt;span style="color:blue"&gt;= &lt;/span&gt;&lt;span style="color:magenta"&gt;STUFF &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@len&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@translation&lt;/span&gt;&lt;span style="color:gray"&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;nbsp; , &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;= CHARINDEX &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:red"&gt;'['&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime&lt;/span&gt;&lt;span style="color:gray"&gt;, &lt;/span&gt;&lt;span style="color:#434343"&gt;@pos &lt;/span&gt;&lt;span style="color:gray"&gt;+ &lt;/span&gt;&lt;span style="color:magenta"&gt;LEN &lt;/span&gt;&lt;span style="color:gray"&gt;(&lt;/span&gt;&lt;span style="color:#434343"&gt;@translation&lt;/span&gt;&lt;span style="color:gray"&gt;))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;END&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:green"&gt;--END IF&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;END&lt;br&gt;&lt;br&gt;&lt;/span&gt;&lt;span style="color:black"&gt;FNC_EXIT:&lt;br&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color:blue"&gt;RETURN &lt;/span&gt;&lt;span style="color:#434343"&gt;@datetime&lt;br&gt;&lt;/span&gt;&lt;span style="color:blue"&gt;END&lt;br&gt;&lt;/span&gt;&lt;/code&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4624799071893493383?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4624799071893493383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4624799071893493383' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4624799071893493383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4624799071893493383'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/format-dates-and-times-in-t-sql.html' title='Format dates and times in T-SQL'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-1192275940348705554</id><published>2007-09-20T07:03:00.000-07:00</published><updated>2010-02-12T06:25:44.249-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Do Your Foreign Key Columns Have Indices?</title><content type='html'>When I do a database audit, I always check for the &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;existence&lt;/span&gt; of foreign keys that enforce referential integrity. That is often a great sign on whether or not a data-centric developer has been involved in the project. Once foreign keys have been created, indices must manually be configured, for &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;SQL&lt;/span&gt; Server does not create them automatically.&lt;br /&gt;&lt;br /&gt;I wrote this script to tell you if you have indices on all of your foreign key columns:&lt;br /&gt;&lt;br /&gt;SELECT o.[Name] AS &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;TableName&lt;/span&gt;, c.[Name] AS &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;ColumnName&lt;/span&gt;&lt;br /&gt;    FROM &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;sysForeignKeys&lt;/span&gt; f&lt;br /&gt;    JOIN &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_5"&gt;sysObjects&lt;/span&gt; o&lt;br /&gt;        ON f.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_6"&gt;fkeyID&lt;/span&gt; = o.[id]&lt;br /&gt;    JOIN &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_7"&gt;sysColumns&lt;/span&gt; c&lt;br /&gt;        ON c.[ID] = f.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_8"&gt;fkeyID&lt;/span&gt; AND c.[&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_9"&gt;colid&lt;/span&gt;] = f.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_10"&gt;fkey&lt;/span&gt;&lt;br /&gt;    LEFT OUTER JOIN &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_11"&gt;sysIndexKeys&lt;/span&gt; i&lt;br /&gt;        ON f.[&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_12"&gt;fkeyid&lt;/span&gt;] = i.[id] AND f.[&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_13"&gt;fkey&lt;/span&gt;] = i.[&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_14"&gt;colid&lt;/span&gt;] AND f.[&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_15"&gt;keyno&lt;/span&gt;] = i.[&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_16"&gt;keyno&lt;/span&gt;]&lt;br /&gt;    WHERE i.[id] IS NULL&lt;br /&gt;&lt;br /&gt;Even if referential integrity is being enforced at the application layer (GASP!), you should still have indices created on those virtual foreign key columns. Unfortunately, that will have to be audited manually by the application developer, which pretty much means it will never happen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-1192275940348705554?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/1192275940348705554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=1192275940348705554' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1192275940348705554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/1192275940348705554'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/do-your-foreign-key-columns-have.html' title='Do Your Foreign Key Columns Have Indices?'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4471010259710076348</id><published>2007-09-16T16:06:00.000-07:00</published><updated>2010-02-12T06:25:58.428-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Hard Disk Configuration</title><content type='html'>When asked where hardware dollars are best spent, I always recommend a great disk &lt;span class="blsp-spelling-corrected" id="SPELLING_ERROR_0"&gt;subsystem&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Hard drives are often the source of performance bottlenecks. Any dime spent on a high-performing hard drives will not go to waste.&lt;br /&gt;&lt;br /&gt;Disks are also the component that will most likely fail. Matt, the Microsoft blogger, claims that disks have a failure rate of 2% per year per disk. If that's the case, then an investment in RAID arrays would be very wise.&lt;br /&gt;&lt;br /&gt;As far as specific drive components go, it's difficult to make a recommendation without knowing the purpose of the SQL Server.&lt;br /&gt;&lt;br /&gt;Here's Matt's post:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://blogs.msdn.com/matt_hollingsworth/archive/2007/04/02/mtbf-is-useless-how-to-decide-when-to-use-raid-for-database-high-availability.aspx"&gt;http://blogs.msdn.com/matt_hollingsworth/archive/2007/04/02/mtbf-is-useless-how-to-decide-when-to-use-raid-for-database-high-availability.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4471010259710076348?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4471010259710076348/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4471010259710076348' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4471010259710076348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4471010259710076348'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/hard-disk-configuration.html' title='Hard Disk Configuration'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-6214947582944118591</id><published>2007-09-07T09:29:00.000-07:00</published><updated>2010-02-12T06:26:11.705-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>No More DBCC SHOWCONTIG</title><content type='html'>In SQL Server 2005, DBCC SHOWCONTIG has been replaced with the function sys.dm_db_index_physical_stats.  Use this function if you need to diagnose fragmentation and page usage issues. &lt;br /&gt;&lt;br /&gt;Pay attention to the fragmentation levels in the output.  This is reporting more accurately than in SQL Server 2000.&lt;br /&gt;&lt;br /&gt;Here's a Books Online link explaining the new function:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms188917.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms188917.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;And a link on index fragmentation:&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms189858.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms189858.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-6214947582944118591?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/6214947582944118591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=6214947582944118591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6214947582944118591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/6214947582944118591'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/no-more-dbcc-showcontig.html' title='No More DBCC SHOWCONTIG'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3293664889302536253</id><published>2007-09-05T09:23:00.000-07:00</published><updated>2010-02-12T06:26:26.905-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Dedicated Administrator Connection</title><content type='html'>In previous version of SQL, it was possible for the server to tie up so many resources, that one more connection was no longer possible.  For instance, you could have one process that was blocking all the others, and have no way to open the SQL Server tools to kill it.&lt;br /&gt;&lt;br /&gt;That all changed with the DAC.  Here's the Microsoft article on how to use it:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms189595.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms189595.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Kalen Delaney (Inside SQL Server 2005) has this great query for determining the SPID of the DAC:&lt;br /&gt;&lt;br /&gt;SELECT t2.session_id&lt;br /&gt;FROM sys.tcp_endpoints as t1&lt;br /&gt;JOIN sys.dm_exec_sessions as t2   &lt;br /&gt;    ON t1.endpoint_id = t2.endpoint_id&lt;br /&gt;WHERE t1.name='Dedicated Admin Connection';  GO&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3293664889302536253?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3293664889302536253/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3293664889302536253' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3293664889302536253'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3293664889302536253'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/dedicated-administrator-connection.html' title='Dedicated Administrator Connection'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-3514512480035122910</id><published>2007-09-04T06:00:00.000-07:00</published><updated>2007-09-03T15:30:01.456-07:00</updated><title type='text'>Question of the Week</title><content type='html'>What is the maximum number of SQL Server instances that can be loaded on one physical server?&lt;br /&gt;&lt;br /&gt;Ready for the answer?&lt;br /&gt;&lt;br /&gt;There is no real maximum, only a supported maximum.  On the Enterprise Edition, Microsoft supports 50 instances in a non-clustered environment.  Microsoft supports 25 instances on a cluster.  Other instances of SQL Server have a supported maximum of 16.&lt;br /&gt;&lt;br /&gt;Here a link:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/technet/technetmag/issues/2006/03/SQLQA/"&gt;http://www.microsoft.com/technet/technetmag/issues/2006/03/SQLQA/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-3514512480035122910?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/3514512480035122910/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=3514512480035122910' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3514512480035122910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/3514512480035122910'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/question-of-week.html' title='Question of the Week'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-4035805345357791673</id><published>2007-09-03T07:22:00.000-07:00</published><updated>2010-02-12T06:27:05.165-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>32-bit vs 64-bit SQL</title><content type='html'>When it comes to hardware, most SQL Servers I have seen are over-powered.  Memory and CPU are most often underuntilized.  So when I'm asked whether a customer needs the 64-bit version of SQL server, I think it comes down to one question.  Do you need more than 3GB of memory addressed?&lt;br /&gt;&lt;br /&gt;It's important to note that the 32-bit version of Windows can only address 4GB of memory.  By default, it reserves 2GB for itself, however this can be reduced to 1GB by using an operating system switch.  Memory beyond the 4GB addressed by the OS can be accessed by SQL Server indirectly using the PAE switch.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms190673.aspx"&gt;http://msdn2.microsoft.com/en-us/library/ms190673.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The 64-bit version of SQL Server can address an incredible amount of memory directly, with no need of these work-arounds.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-4035805345357791673?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/4035805345357791673/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=4035805345357791673' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4035805345357791673'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/4035805345357791673'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/32-bit-vs-64-bit-sql.html' title='32-bit vs 64-bit SQL'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5790493286190870944.post-154555742999016620</id><published>2007-09-01T09:11:00.000-07:00</published><updated>2010-02-12T06:27:16.818-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Administration'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Free SQL Server 2005</title><content type='html'>Just a friendly reminder that you can evaluate SQL Server 2005 for free for 120 days.  This is an excellent way to learn the features of the product before purchasing it.  It is the full Enterprise edition.  You can download it here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.microsoft.com/technet/prodtechnol/eval/sqlsrv05/default.mspx"&gt;http://www.microsoft.com/technet/prodtechnol/eval/sqlsrv05/default.mspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5790493286190870944-154555742999016620?l=ellisteam.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ellisteam.blogspot.com/feeds/154555742999016620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=5790493286190870944&amp;postID=154555742999016620' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/154555742999016620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5790493286190870944/posts/default/154555742999016620'/><link rel='alternate' type='text/html' href='http://ellisteam.blogspot.com/2007/09/free-sql-server-2005.html' title='Free SQL Server 2005'/><author><name>Ike Ellis</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
