<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Tools</title>
        <link>http://weblogs.sqlteam.com/damianm/category/7.aspx</link>
        <description>Tools</description>
        <language>en-US</language>
        <copyright>Damian Maclennan</copyright>
        <managingEditor>merkin@sqlteam.com</managingEditor>
        <generator>Subtext Version 1.9.4.0</generator>
        <item>
            <title>QuickCode.Net</title>
            <link>http://weblogs.sqlteam.com/damianm/archive/2004/02/25/979.aspx</link>
            <description>&lt;style type="text/css"&gt;
.S0 {
 color: #808080;
}
.S2 {
 font-family: monospace;
 color: #007F00;
 font-size: 9pt;
}
.S5 {
 font-weight: bold;
 color: #00007F;
}
.S10 {
 font-weight: bold;
 color: #000000;
}
.S15 {
 font-family: monospace;
 color: #3F703F;
 font-size: 9pt;
}
span {
 font-family: monospace;
 font-size: 10pt;
}
&lt;/style&gt;

&lt;P&gt;I was listening to the Brian Noyes episode of &lt;A href="http://www.franklins.net/dotnetrocks"&gt;DotNetRocks&lt;/A&gt; today and one of his recommended essential tools was &lt;A href="http://www.dvxp.com/en/QuickCode.aspx"&gt;QuickCode.Net&lt;/A&gt;, a Visual Studio addin for code expansion. &lt;/P&gt;
&lt;P&gt;Essentially, this works like a macro that pastes in simple code templates based on a pattern. Make sense ? No, I didn't think so.&lt;/P&gt;
&lt;P&gt;One of the default templates looks for a pattern like prop [datatype] [propertyname] and expands it to a public property.&lt;/P&gt;
&lt;P&gt;If I type : &lt;/P&gt;
&lt;P&gt;prop int foo&lt;/P&gt;
&lt;P&gt;and hit Alt + Q, it automagically turns it into :&lt;BR&gt;&lt;/P&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S15&gt;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S15&gt;/// Property Foo (int)&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S15&gt;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S5&gt;public&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S5&gt;int&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S11&gt;Foo&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S10&gt;{&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S11&gt;get&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S10&gt;{&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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;&lt;/SPAN&gt;&lt;SPAN class=S5&gt;return&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S5&gt;this&lt;/SPAN&gt;&lt;SPAN class=S10&gt;.&lt;/SPAN&gt;&lt;SPAN class=S11&gt;foo&lt;/SPAN&gt;&lt;SPAN class=S10&gt;;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S10&gt;}&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S11&gt;set&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S10&gt;{&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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;&lt;/SPAN&gt;&lt;SPAN class=S5&gt;this&lt;/SPAN&gt;&lt;SPAN class=S10&gt;.&lt;/SPAN&gt;&lt;SPAN class=S11&gt;foo&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S10&gt;=&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S11&gt;value&lt;/SPAN&gt;&lt;SPAN class=S10&gt;;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S10&gt;}&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S10&gt;}&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;
&lt;P&gt;Another one is :&lt;/P&gt;
&lt;P&gt;Class Yak&lt;/P&gt;
&lt;P&gt;Turns into :&lt;BR&gt;&lt;/P&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S15&gt;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S15&gt;/// Class Yak&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S15&gt;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S5&gt;public&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S5&gt;class&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S11&gt;Yak&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S10&gt;{&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S15&gt;/// &amp;lt;summary&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S15&gt;/// Default constructor&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S15&gt;/// &amp;lt;/summary&amp;gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S5&gt;public&lt;/SPAN&gt;&lt;SPAN class=S0&gt; &lt;/SPAN&gt;&lt;SPAN class=S11&gt;Yak&lt;/SPAN&gt;&lt;SPAN class=S10&gt;()&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S10&gt;{&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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;&lt;/SPAN&gt;&lt;SPAN class=S2&gt;// TODO: insert constructor code here&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&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 class=S10&gt;}&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=S0&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=S10&gt;}&lt;/SPAN&gt; 
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Of course, my favourite code generation tool of all time &lt;A href="http://www.ericjsmith.net/codesmith/"&gt;CodeSmith&lt;/A&gt; does this and more, but it involves switching focus to a CodeSmith window, possibly loading a new template and running it. QuickCode does shorter, more commonly typed snippets with only a few keystrokes. At the grand total price of $30 a licence, a tool like this will pay for itself in no time at all. Awesome.&lt;/P&gt;
&lt;P&gt;I have to agree with all the testimonials on their website, this thing rocks.&lt;BR&gt;&lt;/P&gt;&lt;img src="http://weblogs.sqlteam.com/damianm/aggbug/979.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Damian Maclennan</dc:creator>
            <guid>http://weblogs.sqlteam.com/damianm/archive/2004/02/25/979.aspx</guid>
            <pubDate>Wed, 25 Feb 2004 12:49:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/damianm/archive/2004/02/25/979.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/damianm/comments/commentRss/979.aspx</wfw:commentRss>
        </item>
        <item>
            <title>SQL Server Web Administrator</title>
            <link>http://weblogs.sqlteam.com/damianm/archive/2004/02/18/925.aspx</link>
            <description>&lt;p&gt;Microsoft have released the &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=c039a798-c57a-419e-acbc-2a332cb7f959&amp;displaylang=en"&gt;SQL Server Web Data Administrator&lt;/a&gt;. A web intrerface to managing your datbases, users, stored procedures and for running ad-hoc queries.&lt;/p&gt;

&lt;p&gt;&lt;i&gt;via &lt;a href="http://www.larkware.com/Articles/TheDailyGrind301.html"&gt;Mike Gunderloy&lt;/a&gt;&lt;/i&gt;&lt;img src="http://weblogs.sqlteam.com/damianm/aggbug/925.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Damian Maclennan</dc:creator>
            <guid>http://weblogs.sqlteam.com/damianm/archive/2004/02/18/925.aspx</guid>
            <pubDate>Wed, 18 Feb 2004 22:17:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/damianm/archive/2004/02/18/925.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/damianm/comments/commentRss/925.aspx</wfw:commentRss>
        </item>
        <item>
            <title>More on CodeSmith</title>
            <link>http://weblogs.sqlteam.com/damianm/archive/2003/12/08/643.aspx</link>
            <description>&lt;p&gt;A good article at &lt;a href="http://aspalliance.com/"&gt;AspAlliance&lt;/a&gt; on using &lt;a href="http://aspalliance.com/288"&gt;CodeSmith for generating database documentation&lt;/a&gt;.&lt;/p&gt;
&lt;img src="http://weblogs.sqlteam.com/damianm/aggbug/643.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Damian Maclennan</dc:creator>
            <guid>http://weblogs.sqlteam.com/damianm/archive/2003/12/08/643.aspx</guid>
            <pubDate>Tue, 09 Dec 2003 00:38:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/damianm/archive/2003/12/08/643.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/damianm/comments/commentRss/643.aspx</wfw:commentRss>
        </item>
        <item>
            <title>This article brought to you by....</title>
            <link>http://weblogs.sqlteam.com/damianm/archive/2003/11/10/470.aspx</link>
            <description>&lt;p&gt;I just published a new article on SQLTeam titled "&lt;a href="http://www.sqlteam.com/item.asp?ItemID=15044"&gt;Using the PARSENAME function to split delimited data&lt;/a&gt;". I've already had a few comments from people about the code coloring in the article. Not being one to shy away from plugging utilities and tools that I think rock, I thought I'd let everyone in on the trick.&lt;/p&gt;

&lt;p&gt;I use &lt;a href="http://www.scintilla.org/SciTE.html"&gt;SciTE&lt;/a&gt;. SciTE is a lightweight text editor for Windows and Linux. It's small and fast and has pretty much become a notepad replacement for me ( although compiler integration makes it some peoples primary code editor). One of it's really cool features is the export to HTML or RTF function which preserves code formatting and coloring. Great for formatting documentation or..... SQLTeam articles :)&lt;/p&gt;

&lt;img src="http://weblogs.sqlteam.com/damianm/aggbug/470.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Damian Maclennan</dc:creator>
            <guid>http://weblogs.sqlteam.com/damianm/archive/2003/11/10/470.aspx</guid>
            <pubDate>Mon, 10 Nov 2003 13:35:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/damianm/archive/2003/11/10/470.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/damianm/comments/commentRss/470.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Run CLR code inside a stored procedure!</title>
            <link>http://weblogs.sqlteam.com/damianm/archive/2003/10/14/293.aspx</link>
            <description>&lt;p&gt;When Yukon comes we can all do this (for better or for worse). Until then, here is an extended stored proc that acts as a CLR bridge.&lt;/p&gt;
&lt;p&gt;Get it at &lt;a href="http://www.turtlenecksoftware.com/default.aspx?section=0"&gt;http://www.turtlenecksoftware.com/default.aspx?section=0&lt;/a&gt;&lt;/p&gt;
&lt;img src="http://weblogs.sqlteam.com/damianm/aggbug/293.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Damian Maclennan</dc:creator>
            <guid>http://weblogs.sqlteam.com/damianm/archive/2003/10/14/293.aspx</guid>
            <pubDate>Tue, 14 Oct 2003 06:11:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/damianm/archive/2003/10/14/293.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/damianm/comments/commentRss/293.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Version Controlled SQL Tools</title>
            <link>http://weblogs.sqlteam.com/damianm/archive/2003/10/02/233.aspx</link>
            <description>&lt;p&gt;Sean Price asks in &lt;a href="http://weblogs.sqlteam.com/damianm/posts/198.aspx#226"&gt;my comments&lt;/a&gt; about the existance of SQL development tools that integrate with source control tools.&lt;/p&gt;
&lt;p&gt;He also points out that you can use Visual Studio, I really don't like that way Visual Studio implements this as you still aren't getting a script generated for the objects you have developed. The best candidate I found a while back was &lt;a href="http://www.embarcadero.com/products/rapidsql/index.asp"&gt;Rapid SQL&lt;/a&gt; from &lt;a href="http://www.embarcadero.com/"&gt;Embarcadero&lt;/a&gt;. It generated scripts for all your procs, and checked them into VSS. Then when you did work, you worked inside the script and it deployed the code. It was all pretty seamless. It's not cheap though, would be fine if you have a big tools budget, but I'm an independant.&lt;/p&gt;

&lt;p&gt;What does look promising is a tool that is being advertised on &lt;a href="http://www.sqlteam.com/"&gt;SQLTeam&lt;/a&gt; a lot right now called &lt;a href="http://www.xpressapps.com/mssqlXpress_Product.shtm"&gt;MSSQLExpress&lt;/a&gt;. I haven't tried it but it claims to integrate with VSS seamlessly. Maybe if someone has tried it they might like to post a comment here.&lt;/p&gt;

&lt;p&gt;Being a web guy, until recently most of my work was classic ASP, and I use &lt;a href="http://www.macromedia.com/"&gt;Macromedia&lt;/a&gt;'s HomeSite for this. HomeSite is quite easy to script for so you can write an addin to run script files against a database. I kept all my proc files inside the HomeSite project and deployed them from there. Not perfect, but it does work. HomeSite will talk to most source control tools through the Microsoft SCC API. I plan to do something similar inside Visual Studio.NET but haven't gotten around to that one yet.&lt;/p&gt;

&lt;p&gt;However, as I said in my previous post, I mainly use CVS now. What once was solely the realm of Unix coders is now really simple to set up on a Windows server thanks to the great work of Tony Hoyle at &lt;a href="http://www.cvsnt.org/"&gt;CVSNT&lt;/a&gt;. There is a tool available to integrate CVS with your IDE, it's called &lt;a href="http://www.jalindi.com/igloo/"&gt;Igloo&lt;/a&gt; and it works pretty well. But my favourite CVS client (as I mentioned in the comments previously) is a tool called &lt;a href="http://www.tortoisecvs.org/"&gt;Tortoise CVS&lt;/a&gt;. It integrates into Windows Explorer giving you a right click context menu on all your version controlled directories. This is such a cool way to work, after you have made a batch of changes and are ready to commit them, right click in the directory in Explorer and you get a list of all the files underneath that folder to be checked in (yes, it does it recursively).&lt;/p&gt;

&lt;p&gt;The main difference between working the VSS way and the CVS way, is that in VSS you check out a file to work on it, and that stops anyone else from touching it. In CVS, anyone can work on a file and it does its best to merge changes together on checkin (and lets you know if it's not sure). &lt;a href="http://www.sourgear.com/"&gt;Vault&lt;/a&gt; (which is way cool) will work in either of these two ways as well.&lt;/p&gt;

&lt;p&gt; Switching to CVS from VSS is a bit of a headshift, but I'm glad I made it. I don't even think about IDE integration anymore. This way makes so much more sense to me.&lt;/p&gt;
&lt;p&gt;My name is Damian.... and I am a source control geek&lt;/p&gt;
&lt;img src="http://weblogs.sqlteam.com/damianm/aggbug/233.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Damian Maclennan</dc:creator>
            <guid>http://weblogs.sqlteam.com/damianm/archive/2003/10/02/233.aspx</guid>
            <pubDate>Thu, 02 Oct 2003 23:58:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/damianm/archive/2003/10/02/233.aspx#feedback</comments>
            <slash:comments>7</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/damianm/comments/commentRss/233.aspx</wfw:commentRss>
        </item>
        <item>
            <title>Codesmith</title>
            <link>http://weblogs.sqlteam.com/damianm/archive/2003/09/29/185.aspx</link>
            <description>&lt;p&gt;&lt;a href="http://weblogs.sqlteam.com/justinb/"&gt;Justin&lt;/a&gt; FINALLY got around to learning how to use &lt;a href="http://www.ericjsmith.net/codesmith/"&gt;Codesmith&lt;/a&gt;. I have only been trying to get him to do that for 2 months.&lt;/p&gt;

&lt;p&gt;I have mentioned Codesmith on the &lt;a href="http://www.sqlteam.com/forums/"&gt;forums&lt;/a&gt; before as I feel compelled to let everyone know how useful this tool is. It does take a bit of getting used to, but once you have the hang of it you can save hours.&lt;/p&gt;

&lt;p&gt;For anyone who has NO idea what I am talking about, Codesmith is a template driven code generation tool with the ability to explore your database schema. What that means is you can create templates to generate add/update/delete/select stored procs from a table. Or data access code for calling your stored procs from something else. Pretty much anywhere you are writing repetitive code, you could set up a template to do it.&lt;/p&gt;

&lt;p&gt;Give it a go, I promise you won't look back&lt;/p&gt;

&lt;img src="http://weblogs.sqlteam.com/damianm/aggbug/185.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Damian Maclennan</dc:creator>
            <guid>http://weblogs.sqlteam.com/damianm/archive/2003/09/29/185.aspx</guid>
            <pubDate>Mon, 29 Sep 2003 04:10:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/damianm/archive/2003/09/29/185.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/damianm/comments/commentRss/185.aspx</wfw:commentRss>
        </item>
    </channel>
</rss>