<?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-8214699729339673750</id><updated>2012-01-30T07:55:18.687-08:00</updated><category term='IT Services'/><category term='udp'/><category term='tsql'/><category term='.NET Framework SP1'/><category term='Madison Wisconsin'/><category term='naming convention'/><category term='ibuzz'/><category term='execute multiple scripts'/><category term='query sql server from ipad'/><category term='schema snapshot'/><category term='Jim Gray Systems Lab'/><category term='linkedin'/><category term='programmer job resume'/><category term='t-sql'/><category term='software publishing'/><category term='database change management'/><category term='msde'/><category term='end user'/><category term='comment out'/><category term='sql browser service'/><category term='Data Compare'/><category term='sql server data compare'/><category term='SQL Server Tools'/><category term='rename objects'/><category term='database administrator'/><category term='organizational culture'/><category term='US presidential elections'/><category term='facebook'/><category term='software publisher'/><category term='deploy sql database to remote host'/><category term='Windows Vista'/><category term='bad update'/><category term='SQL CE'/><category term='compensation'/><category term='moral dilemma'/><category term='commit'/><category term='SQL Server 2005'/><category term='Governer'/><category term='Georgia'/><category term='deprecated features'/><category term='offshoring'/><category term='incentives'/><category term='query optimizer'/><category term='database version contron'/><category term='Free tools'/><category term='offshore'/><category term='xSQL SDK'/><category term='execute sql scripts from command line'/><category term='publish database changes'/><category term='split string sql function'/><category term='trace SQL Server Express'/><category term='deploy scripts'/><category term='database comparison'/><category term='Microsoft'/><category term='trace MSDE'/><category term='data synchronization'/><category term='data guy'/><category term='search engine'/><category term='ssms'/><category term='change tracking'/><category term='Lite Edition Licensing'/><category term='blocking'/><category term='SQL Server Express 2008'/><category term='batch parsing'/><category term='programmer'/><category term='trace SQL Server'/><category term='sql compare'/><category term='Oracle data compare'/><category term='funny story'/><category term='xsqlvc'/><category term='software licensing'/><category term='xsql comparison bundle'/><category term='date functions'/><category term='random password generator'/><category term='Sonny Perdue'/><category term='begin transaction'/><category term='Mirroring SQL Jobs'/><category term='creative use'/><category term='software business'/><category term='SQL Server 2008'/><category term='xSQL Builder'/><category term='SSWUG'/><category term='xsql software'/><category term='deploy database'/><category term='synchronize database schema'/><category term='my sql'/><category term='change script'/><category term='degree'/><category term='pay'/><category term='xsql documenter'/><category term='data types'/><category term='stimulus bill'/><category term='sctipt executor'/><category term='ipod'/><category term='google adwords'/><category term='twitter'/><category term='sql server performance'/><category term='sql express'/><category term='xsql database version control'/><category term='data compression'/><category term='Monitoring'/><category term='management'/><category term='4th of july software giveaway'/><category term='sql tools'/><category term='sql server remote connection'/><category term='deadline'/><category term='index seek'/><category term='Project management'/><category term='logic puzzle'/><category term='SQL Server 2000'/><category term='index scan'/><category term='promo'/><category term='sql server resources'/><category term='precedence constraint'/><category term='puzzle of the month'/><category term='complex data types'/><category term='xSQL Object Search'/><category term='db2'/><category term='Environment'/><category term='David DeWitt'/><category term='nolock'/><category term='Free sql compare tools'/><category term='give-away'/><category term='most helpful professional award'/><category term='performance'/><category term='deploy schema changes'/><category term='Compare Bundle'/><category term='contest'/><category term='SQL puzzles'/><category term='business'/><category term='document database'/><category term='MySQL'/><category term='entrepreneur'/><category term='custom keys'/><category term='execution order'/><category term='SQL Server jobs'/><category term='protectionism'/><category term='security'/><category term='query governor'/><category term='xSQL Profiler'/><category term='language'/><category term='extend'/><category term='xSQL Data Compare'/><category term='multiple result sets'/><category term='salary'/><category term='oracle'/><category term='rollback'/><category term='software'/><category term='evangelist'/><category term='SQL Data Compare'/><category term='DBA'/><category term='MCDBA'/><category term='components'/><category term='rss reporter'/><category term='exclusive advertising'/><category term='script data'/><category term='track database schema changes'/><category term='database compare'/><category term='yahoo'/><category term='random string generator'/><category term='one-to-many join'/><category term='apple'/><category term='SQL Server'/><category term='full time employee'/><category term='SQL Server Profiler'/><category term='Auditing'/><category term='ipad'/><category term='database changes'/><category term='progrmmers'/><category term='global economy'/><category term='bulk insert'/><category term='bing'/><category term='translate site'/><category term='script schema'/><category term='compare large databases'/><category term='convert vertical list to horizontal'/><category term='Product Review'/><category term='SQL Profiler'/><category term='database version control'/><category term='execute scripts'/><category term='Outsourcing'/><category term='non-profit'/><category term='rss feed'/><category term='search objects in SQL Server 2005'/><category term='Oracle Collections'/><category term='stored procedure'/><category term='zune'/><category term='employees'/><category term='programming'/><category term='run multiple T-SQL scripts'/><category term='server side trace'/><category term='experience'/><category term='identity column scripting'/><category term='Script Executor'/><category term='free schema compare tool'/><category term='employer'/><category term='praising'/><category term='Oracle geometry'/><category term='kindle'/><category term='xSQL Script Executor'/><category term='Microsoft MVP'/><category term='alter trigger'/><category term='script database'/><category term='independent consultant'/><category term='xSQL Object'/><category term='sql server query optimizer'/><category term='trial period'/><category term='ms outlook performance'/><title type='text'>SQL Tools</title><subtitle type='html'>by xSQL Software</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default?start-index=101&amp;max-results=100'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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>160</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8214699729339673750.post-4174444420047142217</id><published>2012-01-04T07:36:00.000-08:00</published><updated>2012-01-04T07:44:29.042-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mirroring SQL Jobs'/><title type='text'>SQL Jobs on a Mirrored Environment</title><content type='html'>One of the little challenges a DBA has to deal with when setting up SQL Server mirroring is handling of SQL Server jobs. SQL Server mirroring works at the database level so SQL Server instance level objects are not mirrored.&amp;nbsp;To achieve a transparent failover some of those instance level objects, like certain SQL Jobs related to your mirrored databases, need to be somehow "mirrored" as well. The objective is simple: any relevant jobs that were running on the principal, on failover should start running on the mirror. So we have to make sure the jobs are kept in sync and are activated at the right moment (you don't want those jobs to be running on the mirror until the failover happens). &lt;br /&gt;&lt;br /&gt;One approach would be to have scheduled jobs that periodically syncs the SQL Jobs on the principal with those on the mirror and periodically checks the mirroring status to determine if the jobs on the mirror need to be activated. &lt;br /&gt;&lt;br /&gt;Another simpler approach would be to use multi-server jobs. You can use a third server, like the witness for example, as the job "master" and&amp;nbsp;do the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;All the jobs that must be "mirrored" should be created on the job "master"&amp;nbsp;server as multi-server jobs.&amp;nbsp;&lt;/li&gt;&lt;li&gt;The target for those jobs is set to be the principal&amp;nbsp;&lt;/li&gt;&lt;li&gt;Create a job on the job master server that checks the mirror status, let's say every minute&lt;/li&gt;&lt;li&gt;If a failover has happened and the mirror has become the principal then it changes the target server for those jobs. &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Here is a simple stored procedure that checks the mirroring status and switches the target server for those jobs. &lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="background-color: #eeeeee; font-size: x-small;"&gt;CREATE PROCEDURE [dbo].[usp_ChangeJobTarget] &lt;br /&gt;&amp;nbsp; @DBName varchar(256) = 'MyMirroredDB',&lt;br /&gt;&amp;nbsp; @Principal varchar(256) = 'MyPrincipal',&lt;br /&gt;&amp;nbsp; @Mirror varchar(256) = 'MyMirror'&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;&amp;nbsp; SET NOCOUNT ON;&lt;br /&gt;&amp;nbsp; DECLARE @current_principal varchar(256)&lt;br /&gt;&amp;nbsp; DECLARE @principalID int&lt;br /&gt;&amp;nbsp; DECLARE @mirrorID int&lt;br /&gt;&amp;nbsp; DECLARE @jobname&amp;nbsp; varchar(256)&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="background-color: #eeeeee; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; SELECT @current_principal = principal_server_name FROM sys.database_mirroring_witnesses WHERE database_name = @DBName&lt;br /&gt;&amp;nbsp;&amp;nbsp; SELECT @principalID = server_id from msdb.dbo.systargetservers WHERE server_name = @Principal&lt;br /&gt;&amp;nbsp;&amp;nbsp; SELECT @mirrorID = server_id from msdb.dbo.systargetservers WHERE server_name = @Mirror&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="background-color: #eeeeee; font-size: x-small;"&gt;&amp;nbsp;IF @current_principal like @Mirror&lt;br /&gt;&amp;nbsp;&amp;nbsp; BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -- principal has changed so we need to change the target for all jobs&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; -- first let's get the complete list of jobs that target the principal&lt;br /&gt;&amp;nbsp;&amp;nbsp; DECLARE @JobList TABLE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; (&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [JobName] [varchar](256) NOT NULL,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Changed] bit NOT NULL&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; )&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; INSERT INTO @JobList&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT [name], 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM msdb.dbo.sysjobs as a INNER JOIN msdb.dbo.sysjobservers as b on a.job_id = b.job_id&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE b.server_id = @principalID &lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;-- now for each job on the @JobList we need to change the target from principal to mirror&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SELECT TOP 1 @jobname = [JobName] FROM @JobList WHERE [Changed] = 0 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHILE (@jobname IS NOT NULL)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; exec msdb.dbo.sp_delete_jobserver @job_name = @jobname, @server_name = @Principal&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; exec msdb.dbo.sp_add_jobserver @job_name = @jobname, @server_name = @Mirror&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; UPDATE @JobList SET [Changed] = 1 WHERE [JobName] = @jobname&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; SET @jobname = null&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; SELECT TOP 1 @jobname = [JobName] FROM @JobList WHERE [Changed] = 0 &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;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;END&lt;br /&gt;&amp;nbsp; END&lt;br /&gt;GO&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="background-color: #eeeeee;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="background-color: white;"&gt;A couple of notes to keep in mind:&lt;/span&gt;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;There is a small delay on replicating a multi-server job. In other words, if you change a job or add a new job on the job master server it will take up to a minute for those changes to be reflected on the target server(s).&amp;nbsp;&lt;/li&gt;&lt;li&gt;The above stored procedure only goes in one direction – changes the target from principal to mirror in case of failover. You will need to adjust it to make it work both ways – one simple way to accomplish this is to simply compare the current principal with the target for those jobs and if they don’t match then change the target. &lt;/li&gt;&lt;li&gt;The above script is provided as is - use at your own risk. &lt;/li&gt;&lt;/ol&gt;Last but not least: check out our SQL Server comparison and synchronization tools, &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; and &lt;a href="http://www.xsqlsoftware.com/Product/Oracle_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; they will&amp;nbsp;make your database deployment a breeze.&amp;nbsp;Also, check out our &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; - no other tool in the market today comes close to it. &lt;br /&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/8214699729339673750-4174444420047142217?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4174444420047142217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4174444420047142217' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4174444420047142217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4174444420047142217'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2012/01/sql-jobs-on-mirrored-environment.html' title='SQL Jobs on a Mirrored Environment'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-3010356423702974538</id><published>2011-12-09T11:33:00.000-08:00</published><updated>2011-12-09T11:33:39.852-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsql comparison bundle'/><category scheme='http://www.blogger.com/atom/ns#' term='kindle'/><title type='text'>Kindle time at xSQL Software - get one</title><content type='html'>Don't "burn" your left over 2011 budget, put it to good use and get a great gift. Purchase a new, full xSQL Comparison Bundle license &lt;strong&gt;before Friday, December 16, 2011&lt;/strong&gt; and we will send you an awesome thank you gift, &lt;strong&gt;a Kindle&lt;/strong&gt;. We will send the gift to whoever you direct us to send it to, anywhere in the United States and Canada. Here are the levels:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;a &lt;strong&gt;Kindle&lt;/strong&gt; when you purchase a  &lt;a href="http://www.xsqlsoftware.com/Order/SupportOptions.aspx?ProdID=xSQLBundle&amp;amp;LicID=SingUsrNewPro"&gt;single machine / single user license &lt;/a&gt;&lt;/li&gt;&lt;li&gt;a &lt;strong&gt;Kindle Touch 3G&lt;/strong&gt; when you purchase a&amp;nbsp;  &lt;a href="http://www.xsqlsoftware.com/Order/SupportOptions.aspx?ProdID=xSQLBundle&amp;amp;LicID=FiveUsrNewPro"&gt;five machine / five user license pack&lt;/a&gt; &lt;/li&gt;&lt;li&gt;a &lt;strong&gt;Kindle Fire&lt;/strong&gt; when you purchase a  &lt;a href="http://www.xsqlsoftware.com/Order/SupportOptions.aspx?ProdID=xSQLBundle&amp;amp;LicID=SiteNewPro"&gt;site license (unlimited activations within one physical site)&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;u&gt;You must&lt;/u&gt; plug in the discount code &lt;strong&gt;KINDLE&lt;/strong&gt; on the "discount" textbox on the shopping cart page otherwise no gift for you. Also, the purchase &lt;u&gt;must be completed&lt;/u&gt; before December 16, 2011 - no exceptions. &lt;br /&gt;&lt;br /&gt;Once you complete the order email us at sales@xsqlsoftware.com with instructions as to where you want your gift shipped to (a United States or Canada address only).&lt;br /&gt;&lt;br /&gt;If you are not already, &lt;a href="http://twitter.com/xsqlsoftware"&gt;follow us on twitter&lt;/a&gt; and &lt;a href="http://www.facebook.com/xsqlsoftware"&gt;like us on facebook&lt;/a&gt;, we would appreciate it very much.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3010356423702974538?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3010356423702974538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3010356423702974538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3010356423702974538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3010356423702974538'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/12/kindle-time-at-xsql-software-get-one.html' title='Kindle time at xSQL Software - get one'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4356152383157224555</id><published>2011-10-27T04:44:00.000-07:00</published><updated>2012-01-30T07:45:47.771-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rss reporter'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server jobs'/><category scheme='http://www.blogger.com/atom/ns#' term='query sql server from ipad'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><title type='text'>iPad and SQL Server</title><content type='html'>In the last few months we noticed a jump in the number of downloads for &lt;a href="http://www.xsqlsoftware.com/products/rss_reporter/"&gt;&lt;strong&gt;RSS Reporter&lt;/strong&gt;&lt;/a&gt; and were not sure what to attribute it to. So we started probing the users who were downloading the product and found that the increased interest in our &lt;a href="http://www.xsqlsoftware.com/products/rss_reporter/"&gt;RSS Reporter for SQL Server&lt;/a&gt; was directly related to an ever increasing number of SQL Server Database Administrators carrying an iPad around. &lt;br /&gt;&lt;br /&gt;&lt;div&gt;What's so great about &lt;a href="http://www.xsqlsoftware.com/products/rss_reporter/"&gt;RSS Reporter&lt;/a&gt;? A couple of things:&lt;/div&gt;&lt;ul&gt;&lt;li&gt;You don't need a client, just install the &lt;a href="http://www.xsqlsoftware.com/products/rss_reporter/"&gt;RSS Reporter&lt;/a&gt; on a machine with IIS that has access to the&amp;nbsp; SQL Server instances you are interested on and then access it from anywhere with an internet browser, iPad, iPhone, tablet – anything that can read a standard rss feed;&lt;/li&gt;&lt;li&gt;Your executives need live data on their iPads, no problem, you add an ad-hoc query on RSS Reporter and simply send them the url;&lt;/li&gt;&lt;li&gt;You need to see what happened with your SQL Server Jobs last night, no problem. You can get an aggregate report from all your SQL Servers right on your iPad, and you can drill down and see exactly what happened. &lt;/li&gt;&lt;/ul&gt;If you haven't tried RSS Reporter &lt;a href="http://www.xsqlsoftware.com/download/package.aspx?packageid=20"&gt;check it out&lt;/a&gt; – it is &lt;strong&gt;completely free for a single SQL Server Instance&lt;/strong&gt; and very reasonably priced if you want to monitor multiple SQL Server instances in one place. &lt;br /&gt;&lt;br /&gt;After you try make sure to send us your comments and suggestions as on how we might make RSS Reporter even more useful to you.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4356152383157224555?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4356152383157224555/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4356152383157224555' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4356152383157224555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4356152383157224555'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/10/ipad-and-sql-server.html' title='iPad and SQL Server'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-7978992284800924881</id><published>2011-10-21T08:32:00.000-07:00</published><updated>2011-10-21T09:29:45.307-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='complex data types'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle geometry'/><title type='text'>xSQL’s Oracle Data Compare vs. the others</title><content type='html'>&lt;div&gt;When you do a search for data compare tools for Oracle a bunch of competing tools come up and at first look they all seem to be similar but once you start digging a bit deeper most of them get crossed off the list because they don’t amount to more than an amateurish effort. The very few that remain are hard to separate and you are inclined to go with the most known brand - after all, who has the time to thoroughly test all the available products! &lt;/div&gt;&lt;div&gt;We decided to take the time and do a more thorough review of a couple of those products that made the first cut and compared them to our &lt;a href="http://www.xsqlsoftware.com/Product/Oracle_Data_Compare.aspx"&gt;Oracle Data Compare&lt;/a&gt;. Here is what we found:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Functionality:&amp;nbsp;&lt;a href="http://www.xsqlsoftware.com/Product/Oracle_Data_Compare.aspx"&gt;Oracle Data Compare&lt;/a&gt; supports Oracle Geometry,&amp;nbsp;complex data types and unicode data; &lt;u&gt;they DON’T&lt;/u&gt;&lt;/li&gt;&lt;li&gt;Performance: in the tests we did xSQL’s &lt;a href="http://www.xsqlsoftware.com/Product/Oracle_Data_Compare.aspx"&gt;Oracle Data Compare&lt;/a&gt; completed the tasks&amp;nbsp; 30% to 40% faster while keeping the memory consumption under 100 MB whereas the next best one was at 200 MB.&lt;/li&gt;&lt;li&gt;GUI: An argument can certainly be made in favor of simplicity but in the world of Oracle professionals having flexibility and control is important and xSQL’s Oracle Data Compare gives the user significantly more control and flexibility over the comparison and synchronization operation.&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Download the &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=11&amp;amp;ProdID=OracleData"&gt;free trial&lt;/a&gt; and see for yourself. If you wish to challenge our findings please do so – we will be delighted to hear from you!&amp;nbsp; Email us at the &lt;strong&gt;info&lt;/strong&gt;&amp;nbsp;address on &lt;strong&gt;xsqlsoftware.com&lt;/strong&gt; &lt;/div&gt;&lt;div&gt;Note: the &lt;strong&gt;introductory price of $174&lt;/strong&gt; expires on October 31, 2011. After that the price goes back to $349. To get the introductory price use promo code &lt;strong&gt;ORACLEPROMO&lt;/strong&gt; on checkout.&lt;/div&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/8214699729339673750-7978992284800924881?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/7978992284800924881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=7978992284800924881' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7978992284800924881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7978992284800924881'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/10/xsqls-oracle-data-compare-vs-others.html' title='xSQL’s Oracle Data Compare vs. the others'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8879040482796730180</id><published>2011-10-17T12:21:00.000-07:00</published><updated>2011-10-17T12:21:05.464-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Collections'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle data compare'/><title type='text'>Oracle Data Compare new build</title><content type='html'>Just released a new build of &lt;a href="http://www.xsqlsoftware.com/Product/Oracle_Data_Compare.aspx"&gt;Oracle Data Compare&lt;/a&gt; - support for Oracle collections was added. Download your three week trial copy &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=11&amp;amp;ProdID=OracleData"&gt;here...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8879040482796730180?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8879040482796730180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8879040482796730180' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8879040482796730180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8879040482796730180'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/10/oracle-data-compare-new-build.html' title='Oracle Data Compare new build'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4764018664250073367</id><published>2011-10-10T11:10:00.000-07:00</published><updated>2011-10-10T11:10:51.564-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server data compare'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Compare'/><title type='text'>xSQL Data Compare for SQL Server - new build available</title><content type='html'>We just published a new build of the &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; for SQL Server. Following is the list of enhancements and fixes included in this build:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Allows session naming by clicking on the name without launching it&lt;/li&gt;&lt;li&gt;Adds tooltip on session panel that shows the left/right databases, useful when the names of Sql Server/Database are too long and can't be fully seen in the UI&lt;/li&gt;&lt;li&gt;Fixes an issue with screen resizing &lt;/li&gt;&lt;li&gt;Fixes an issue with print wrapping for windows that support printing.&lt;/li&gt;&lt;li&gt;Adds a UI formatter for XML data types&lt;/li&gt;&lt;li&gt;Improves&amp;nbsp;the process of comparing select tables&lt;/li&gt;&lt;/ol&gt;You can download the new build from &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBUNDLE"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBUNDLE&lt;/a&gt;&lt;br /&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/8214699729339673750-4764018664250073367?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4764018664250073367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4764018664250073367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4764018664250073367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4764018664250073367'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/10/xsql-data-compare-for-sql-server-new.html' title='xSQL Data Compare for SQL Server - new build available'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-3853061259831974405</id><published>2011-10-06T13:45:00.000-07:00</published><updated>2011-10-06T13:45:24.965-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle data compare'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><title type='text'>Oracle Data Compare released</title><content type='html'>&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-US;"&gt;We have just released a new tool, &lt;a href="http://www.xsqlsoftware.com/Product/Oracle_Data_Compare.aspx"&gt;&lt;span style="color: blue;"&gt;Oracle Data Compare&lt;/span&gt;&lt;/a&gt;. The same awesome (to quote a user that called recently) data comparison and synchronization tool, many of you have become accustomed to, is now available for Oracle. You can learn more about the product &lt;a href="http://www.xsqlsoftware.com/Product/Oracle_Data_Compare.aspx"&gt;&lt;span style="color: blue;"&gt;here&lt;/span&gt;&lt;/a&gt;, and download a fully functional trial version from &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=11&amp;amp;ProdID=OracleData"&gt;&lt;span style="color: blue;"&gt;here&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;Please note that from now until the end of October you can get a license for the low &lt;strong&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;introductory price of $174&lt;/span&gt;&lt;/strong&gt; - use promo code &lt;strong&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;;"&gt;ORACLEPROMO&lt;/span&gt;&lt;/strong&gt; on checkout. &lt;br /&gt;&lt;br /&gt;A big thank you goes to all the beta testers of Oracle Data Compare who gave us a tremendous amount of help during those last crucial months in the product development - we are grateful for all you have done! &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3853061259831974405?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3853061259831974405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3853061259831974405' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3853061259831974405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3853061259831974405'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/10/oracle-data-compare-released.html' title='Oracle Data Compare released'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-5550563282386632075</id><published>2011-08-26T06:43:00.000-07:00</published><updated>2011-08-26T06:43:10.826-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deploy sql database to remote host'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><title type='text'>How to deploy a SQL Server database to a remote host</title><content type='html'>&lt;div&gt;&lt;strong&gt;CASE 1&lt;/strong&gt;: you have direct access to both the SQL Server where the source database is and the SQL Server where the target database is. &lt;/div&gt;&lt;ol&gt;&lt;li&gt;First time deployment&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Backup / restore&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Backup the database on the source&lt;/li&gt;&lt;li&gt;Copy the backup file to the target machine&lt;/li&gt;&lt;li&gt;Restore the database on the target&lt;/li&gt;&lt;li&gt;Create logins and set permissions as needed&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Compare and Synchronize&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Create database on the target machine (blank)&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; to compare and synchronize the database schemas of the source and the target.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; to populate the remote database with whatever data you might have on the source that you want to publish (lookup tables etc.)&lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;li&gt;Database exists in the target server&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Compare and Synchronize&lt;/li&gt;&lt;ol&gt;&lt;li&gt;Use &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; to compare and synchronize the database schemas of the source and the target.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; to push any data you need to push from the source to the target. &lt;strong&gt;Caution&lt;/strong&gt;: be careful not to affect any data that exists on the target already. &lt;/li&gt;&lt;/ol&gt;&lt;/ul&gt;&lt;/ol&gt;&lt;div&gt;&lt;strong&gt;CASE 2&lt;/strong&gt;: You can not directly access the target server but you have a way to deploy SQL scripts on that server. As is indeed the case in most scenarios you also should have a way to get a backup of your database from that remote host. In this case follow those simple steps:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Restore the remote database on your local environment&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; to compare your source database with the restored database. Generate the schema synchronization script and save it.&lt;/li&gt;&lt;li&gt;Use &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; to compare your source database with the restored database. Carefully make your selections to ensure you push only the data you want to push from the source to the target. Generate the data synchronization script and save it.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Deploy your schema synchronization script to the target machine.&amp;nbsp;&lt;/li&gt;&lt;li&gt;Deploy your data synchronization script to the target machine. &lt;/li&gt;&lt;/ol&gt;Both &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; and &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; are completely free for SQL Server Express with no restrictions or limitations. Furthermore, for other editions of SQL Server the tools are free if the database has under a certain number of objects in it (current limitations are listed &lt;a href="http://www.xsqlsoftware.com/LiteEdition.aspx"&gt;here&lt;/a&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-5550563282386632075?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/5550563282386632075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=5550563282386632075' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5550563282386632075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5550563282386632075'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/how-to-deploy-sql-server-database-to.html' title='How to deploy a SQL Server database to a remote host'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4457792325495222664</id><published>2011-08-25T07:07:00.000-07:00</published><updated>2011-08-25T07:08:45.516-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='split string sql function'/><title type='text'>Split String SQL function</title><content type='html'>If you work with SQL Server you have, or at some point will, run into a situation where you have a string of separated values that you may need to involve in a join or simply generate a list out of. So, you need to split the string and dump the values in a table. Following is a simple Table-valued function that takes a string and a divider as parameters and returns a table containing the values into a list form (one value for each row). The parameters are defined as a varchar(1024) for the string of values and char(1) for the divider but you can change those based on your needs. &lt;br /&gt;&lt;br /&gt;&lt;span style="color: green; font-size: x-small;"&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;CREATE &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;FUNCTION&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; SplitString &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @SeparatedValues &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;1024&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;@Divider &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;CHAR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;1&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;RETURNS&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @ListOfValues &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;TABLE &lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;[value] &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;VARCHAR&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;50&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;AS&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&amp;nbsp; BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;DECLARE&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1 &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos2 &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;int&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;SET&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;SET&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos2 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;CHARINDEX&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;@Divider&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @SeparatedValues&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; 0&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;  &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;WHILE&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos2 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; 0&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&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; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;BEGIN&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&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; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;INSERT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;INTO&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @ListOfValues &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;VALUES &lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;SUBSTRING&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;@SeparatedValues&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos2 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;SET&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos2 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; 1&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&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; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;SET&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos2 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;CHARINDEX&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;@Divider&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @SeparatedValues&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt; &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&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&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&gt;&lt;span style="color: green; font-size: x-small;"&gt;&lt;span style="color: green; font-size: x-small;"&gt;-- Now get the last value if there is onw&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: green; font-size: x-small;"&gt;&lt;span style="color: green; font-size: x-small;"&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; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;IF&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&amp;lt;=&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;LEN&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;@SeparatedValues&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&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: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;INSERT&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;INTO&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @ListOfValues &lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;VALUES &lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;SUBSTRING&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;@SeparatedValues&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;&lt;span style="color: magenta; font-size: x-small;"&gt;LEN&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;@SeparatedValues&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;-&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; @DividerPos1 &lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;+&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; 1&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;))&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size: x-small;"&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RETURN&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt; &amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;END&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;GO&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;Once you create the function you can call it like this:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; SELECT * FROM&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; [SplitString]&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;span style="color: red; font-size: x-small;"&gt;'value1|value2|value3'&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size: x-small;"&gt; &lt;/span&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;span style="color: red; font-size: x-small;"&gt;'|'&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: grey; font-size: x-small;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;This will return:&amp;nbsp;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp; value1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;  &amp;nbsp;&amp;nbsp; value2&lt;/span&gt;&lt;br /&gt;&lt;span style="color: grey; font-size: x-small;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;value3&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;Note that&amp;nbsp;if&amp;nbsp;the string starts with a divider like &lt;span style="font-size: x-small;"&gt;&lt;span style="color: red;"&gt;&lt;span style="color: red;"&gt;'|value1|value2|value3'&lt;/span&gt;&lt;/span&gt;&lt;span style="color: grey;"&gt;&lt;span style="color: grey;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;then the first value returned will be a blank value. &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;span style="color: blue; font-size: x-small;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4457792325495222664?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4457792325495222664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4457792325495222664' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4457792325495222664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4457792325495222664'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/split-string-sql-function.html' title='Split String SQL function'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1220801064317726277</id><published>2011-08-24T07:20:00.000-07:00</published><updated>2011-08-24T07:20:32.626-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='compare large databases'/><title type='text'>Comparing 1TB database taking too long!</title><content type='html'>&lt;div&gt;We got a call yesterday from a customer who was using our &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; to compare a 1TB database. He was concerned that the comparison was taking a very long time – when he called it had been running for about 10 hours and was still going! While we don’t think there are many users out there comparing 1TB or larger databases we thought it might be helpful to those few out there if we explained why such compare may take 10 hours or more depending on the environment. Here are the factors to consider:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Connection speed - in a typical scenario &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; is running on a client machine let’s call that Client1 and the databases being compared reside on let's say Server1 and Server2. In order to compare those databases the whole 1TB worth of data from Server1 and another 1TB worth of data from Server2 will have to be "brought" over to Client1. So you are gradually transferring 2TB of data over the wire (or over the air) and depending on how fast the connections Client1 – Server1 and Client1-Server2 are this process alone may take not just 10 but 30 or 40 hours. &lt;/li&gt;&lt;li&gt;Processing power – &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; running on Client1 needs to pair those millions of rows and compare them one by one. If you have a slow machine, even if the data is readily available it will take a long time to process all that data. &lt;/li&gt;&lt;li&gt;I/O and local disk speed – 2TB worth of data is being temporarily stored on the Client1 hard drive and that process alone may take a long time. &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;In short, when you are comparing large and very large databases don't be shocked if the process takes many hours to complete. The important thing is that, provided you have sufficient disk space on the machine where &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; is running, the databases will be compared successfully and you will be able to generate the synchronization script.&amp;nbsp; &lt;/div&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/8214699729339673750-1220801064317726277?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1220801064317726277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1220801064317726277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1220801064317726277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1220801064317726277'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/comparing-1tb-database-taking-too-long.html' title='Comparing 1TB database taking too long!'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-3474247131749482755</id><published>2011-08-23T06:11:00.000-07:00</published><updated>2011-08-23T06:11:20.366-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>Script Executor new build 3.5.1.1</title><content type='html'>A new build of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; that fixes a small issue with the command line logging options is available for download &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;here...&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Script Executor is the best tool for executing SQL Scripts against multiple databases on SQL Server, MySQL and DB2. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3474247131749482755?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3474247131749482755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3474247131749482755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3474247131749482755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3474247131749482755'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/script-executor-new-build-3511.html' title='Script Executor new build 3.5.1.1'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2632808974608244158</id><published>2011-08-22T11:15:00.000-07:00</published><updated>2011-08-22T11:15:09.274-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='execute sql scripts from command line'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>How to execute multiple SQL scripts from command line?</title><content type='html'>&lt;div&gt;How to execute multiple sql scripts from command line?&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; provides one of the most efficient ways of executing SQL scripts from the command line. Let’s assume you have a long list of scripts that need to be executed routinely on a number of servers. Here is how you can do that in a few easy steps using &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt;:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Launch the Script Executor user interface. Start a new project via File/New Project;&lt;/li&gt;&lt;li&gt;Add database(s) to the project;&lt;/li&gt;&lt;li&gt;Add Sql script(s);&lt;/li&gt;&lt;li&gt;Configure the mappings via Package/Configure. Mappings determine the databases that the scripts should run against. If there is only one database container and one script container, this step is not necessary;&lt;/li&gt;&lt;li&gt;Configure package options via Package/Options;&lt;/li&gt;&lt;li&gt;Save the projects and exit user interface;&lt;/li&gt;&lt;/ol&gt;Step number 4 above is where you will save a tremendous amount of time is you have a big number of scripts that need to be executed against certain databases. &lt;br /&gt;&lt;br /&gt;Once the project&amp;nbsp;has been&amp;nbsp;saved it can then be executed from the command line as follows:&lt;br /&gt;&lt;span style="background-color: #d0e0e3;"&gt;ExecCmd /p:&lt;project_name&gt; /l:logging_type=1;path=&lt;path&gt;&lt;/path&gt;&lt;/project_name&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can download a free trial version of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; from &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;here...&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2632808974608244158?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2632808974608244158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2632808974608244158' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2632808974608244158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2632808974608244158'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/how-to-execute-multiple-sql-scripts.html' title='How to execute multiple SQL scripts from command line?'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8780207107609806743</id><published>2011-08-19T08:51:00.000-07:00</published><updated>2011-08-19T08:51:44.766-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software business'/><title type='text'>Wrong product, wrong time!</title><content type='html'>&lt;div&gt;I recently met and spent a few hours with one of our "competitors" who had dedicated over 10 months of his life to building what he thought would be the best data compare tool for SQL Server and then a lot more time trying to promote his work. Now disillusioned he was on a quest to salvage what he could from this investment. I asked him how he made the decision to develop a data compare tool for SQL Server and here is his rationale he presented:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;I have a lot of experience with SQL server;&lt;/li&gt;&lt;li&gt;Building a tool that compares data in two SQL databases seemed like an easy thing that I could do in a couple of months so the risk wouldn’t be very big;&amp;nbsp; &lt;/li&gt;&lt;li&gt;There were a lot of data compare tools in the market so there must be a strong demand for such tool. &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;I asked him what went wrong and here is what he said:&lt;/div&gt;&lt;ol&gt;&lt;li&gt;This turned out to be a lot harder than I thought. Instead of two months I quit my job and spent 10 grueling months and I still wasn’t happy with the results. &lt;/li&gt;&lt;li&gt;Two months after the release I had gotten a handful of downloads mostly from acquaintances and zero feedback. &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;I tried to make him feel better by telling him that he was just unlucky but in fact luck is the last thing one can blame for a situation like this. This is the result of what plagues many of the programmers I have known over years, namely;&lt;/div&gt;&lt;ol&gt;&lt;li&gt;Overestimating their ability while underestimating the effort required to get something done;&lt;/li&gt;&lt;li&gt;Misjudging the market;&lt;/li&gt;&lt;li&gt;Often believing they know better than the customer what the customer really wants! &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;The candid conversation I had with him made me think about this. The software business is a great business if you pick the right product and introduce it at the right time but if one of those two factors is wrong then it is a terrible business. Unlike in many other businesses there is basically nothing that can be salvaged in the case of a failed software business. The World's hard drives are cluttered with billions of lines of code that have never seen the "joy" of actually "doing something for real" – they have only been "called upon" by their creator during the development. It is kind of sad!  &lt;/div&gt;&lt;br /&gt;&lt;div&gt;So before you jump into developing some “me too” tool just because you think you can do it please stop and ask yourself a few questions (not an exhaustive list by any means):&lt;/div&gt;&lt;ol&gt;&lt;li&gt;What is my goal? What will success look like?&lt;/li&gt;&lt;li&gt;Who am I building this tool for? How will this tool help them? How much are you really willing to pay for such tool if one was available today? Don’t overestimate this! In fact whatever number you spill out first divide it by two. &lt;/li&gt;&lt;li&gt;Who are the competitors? How is the market divided between them? Which ones do you believe you can take market share from and why do you believe that? &lt;/li&gt;&lt;li&gt;Have I thoroughly investigated the competing products? What do they do right? Where do they lack? &lt;/li&gt;&lt;li&gt;How fast can I bring this product to market (whatever time you come up please double or triple it)? How likely it is that during this time one or more of the competitors will release new and improved products that may pre-empt your move? &lt;/li&gt;&lt;li&gt;What will be that “killer” feature that is going to make the customers choose your product instead of those more established competing products?&lt;/li&gt;&lt;li&gt;What if things don’t work out? What is my risk? &lt;/li&gt;&lt;/ol&gt;If you use SQL Server and wish to check out the best SQL data compare and synchronization tool in the market you can download it from &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBUNDLE"&gt;here&lt;/a&gt;. It is free for SQL Server Express with no limitations and also free for other editions of SQL Server if the databases have a relatively small number of objects. &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8780207107609806743?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8780207107609806743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8780207107609806743' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8780207107609806743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8780207107609806743'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/wrong-product-wrong-time.html' title='Wrong product, wrong time!'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-794835706553584417</id><published>2011-08-15T06:58:00.000-07:00</published><updated>2011-08-15T06:58:19.253-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='identity column scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='Lite Edition Licensing'/><category scheme='http://www.blogger.com/atom/ns#' term='Compare Bundle'/><title type='text'>xSQL Comparison Bundle new build available</title><content type='html'>Just published a new build of xSQL Comparison Bundle that fixes the following:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Licensing issue with the Lite Edition.&amp;nbsp;Our&amp;nbsp;database comparison tools are currently free for SQL Server Express&amp;nbsp;however,&amp;nbsp;some users of the version 4 of the xSQL Comparison Bundle may have received the message "The Lite Edition does not support the databases you are trying to compare" even though the databases being compared were&amp;nbsp;SQL Server&amp;nbsp;Express databases.&lt;/li&gt;&lt;li&gt;Scripting issue with identity columns based on data types that support precision pr length such as numeric. &lt;/li&gt;&lt;/ol&gt;You can download the new build of xSQL Compare Bundle from: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBUNDLE"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBUNDLE&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-794835706553584417?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/794835706553584417/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=794835706553584417' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/794835706553584417'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/794835706553584417'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/xsql-comparison-bundle-new-build.html' title='xSQL Comparison Bundle new build available'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-5467374516427968372</id><published>2011-08-12T12:26:00.000-07:00</published><updated>2011-08-12T12:26:33.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='convert vertical list to horizontal'/><title type='text'>SQL convert vertical list to horizontal</title><content type='html'>Let's say you have a table that looks something like this:&lt;br /&gt;&lt;span style="background-color: #d0e0e3; font-size: x-small;"&gt;CREATE TABLE [Source_Vertical](&lt;br /&gt;&amp;nbsp;[ID] [int] IDENTITY(1,1) NOT NULL,&lt;br /&gt;&amp;nbsp;[GroupID] [int] NOT NULL,&lt;br /&gt;&amp;nbsp;[Col1_Group] [varchar](50) NULL,&lt;br /&gt;&amp;nbsp;[Col2_Group] [varchar](50) NULL,&lt;br /&gt;&amp;nbsp;[Col1_Individual] [varchar](50) NULL,&lt;br /&gt;&amp;nbsp;[Col2_Individual] [varchar](50) NULL)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You don't know how many rows there are for each&amp;nbsp;GroupID&amp;nbsp;and your job is&amp;nbsp;to generate a list that contains all values associated with a given GroupID in a single row. Here is a simple way to do it:&lt;br /&gt;&lt;br /&gt;First: create a target table that looks something like this:&lt;br /&gt;&lt;span style="background-color: #d0e0e3; font-size: x-small;"&gt;CREATE TABLE [Target_Horizontal](&lt;br /&gt;&amp;nbsp;[GroupID] [int] NOT NULL,&lt;br /&gt;&amp;nbsp;[GroupValues] [varchar](max) NULL)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Next copy,&amp;nbsp;adjust based on your needs and execute the following simple script (note I used a vertical line as a value separator - you can use whatever you need, just make sure the character you choose does not exist inside the actual values of the columns): &lt;br /&gt;&lt;span style="background-color: #d0e0e3; font-size: x-small;"&gt;DECLARE @GroupID int&lt;br /&gt;DECLARE @GroupID_Current int&lt;br /&gt;DECLARE @Col1_Group varchar(50)&lt;br /&gt;DECLARE @Col2_Group varchar(50)&lt;br /&gt;DECLARE @Col1_Individual varchar(50)&lt;br /&gt;DECLARE @Col2_Individual varchar(50)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #d0e0e3; font-size: x-small;"&gt;DECLARE list_cursor CURSOR&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOR SELECT * FROM dbo.Source_Vertical ORDER BY GroupID&lt;br /&gt;OPEN list_cursor&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #d0e0e3; font-size: x-small;"&gt;FETCH NEXT FROM list_cursor INTO &lt;br /&gt;&amp;nbsp;@GroupID,&lt;br /&gt;&amp;nbsp;@Col1_Group,&lt;br /&gt;&amp;nbsp;@Col2_Group,&lt;br /&gt;&amp;nbsp;@Col1_Individual,&lt;br /&gt;&amp;nbsp;@Col2_Individual&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #d0e0e3; font-size: x-small;"&gt;&amp;nbsp;SET @GroupID_Current = ''&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #d0e0e3; font-size: x-small;"&gt;WHILE @@FETCH_STATUS = 0&lt;br /&gt;&amp;nbsp;BEGIN&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;IF @GroupID_Current &amp;lt;&amp;gt; @GroupID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;INSERT INTO Target_Horizontal (Id, GroupValues) VALUES(@GroupID, @Col1_Group + '|' + @Col2_Group + '|' + @Col1_Individual + '|' + @Col2_Individual)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET @GroupID_Current = @GroupID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;END&lt;br /&gt;&amp;nbsp;&amp;nbsp;ELSE&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;UPDATE Target_Horizontal SET GroupValues = GroupValues + '|' + @Col1_Individual + '|' + @Col2_Individual WHERE GroupID = @GroupID&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;END&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;FETCH NEXT FROM list_cursor INTO &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@GroupID,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Col1_Group,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Col2_Group,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Col1_Individual,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Col2_Individual&lt;br /&gt;&amp;nbsp;END&lt;br /&gt;CLOSE list_cursor;&lt;br /&gt;DEALLOCATE list_cursor;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Finally you can take the results from the target table and dump them on Excel or wherever you need to.&amp;nbsp;&amp;nbsp;Hope this helps someone!&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-5467374516427968372?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/5467374516427968372/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=5467374516427968372' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5467374516427968372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5467374516427968372'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/sql-convert-vertical-list-to-horizontal.html' title='SQL convert vertical list to horizontal'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2324309844904695579</id><published>2011-08-12T06:58:00.000-07:00</published><updated>2011-08-12T06:58:03.333-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Data Compare'/><title type='text'>No one can beat our data compare tool, no one!</title><content type='html'>Yes, this may sound a bit cocky but we are tired of being modest and polite. We don't have an army of salesman to knock on your doors and we don't own and manipulate every user group there is but we focus on making our products the best there is and making them available to you at the lowest possible price including free. So, let's state it loud and clear – &lt;strong&gt;no one can beat our &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;data compare tool&lt;/a&gt;, no one&lt;/strong&gt;. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Performance&lt;/strong&gt;: throw in a large database and most of the competing tools will not be able to handle it at all or will take forever and a day to complete the job. Try it and see how xSQL Data Compare will knock the socks off all the alternatives.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Usability&lt;/strong&gt;: everything you need, nothing you don’t, all where it should be, one click compare – nothing approaches the efficiency of this interface.&amp;nbsp;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Value&lt;/strong&gt;: &lt;/li&gt;&lt;ol&gt;&lt;li&gt;Free for SQL Server Express – &lt;strong&gt;can anyone beat this?&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Free for other editions of SQL Server when the databases being compared have a limited number of objects – &lt;strong&gt;anyone out there can match this?&lt;/strong&gt;&amp;nbsp;&amp;nbsp;&lt;/li&gt;&lt;li&gt;Site license option, unlimited number of installations in your organization for a very modest price – &lt;strong&gt;can anyone come close to this&lt;/strong&gt;? &lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div&gt;Dare to compare for yourself, &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLData"&gt;download&lt;/a&gt; our &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;data compare&lt;/a&gt; and evaluate it against any and all competing tools in the market. Let us know what you think. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2324309844904695579?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2324309844904695579/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2324309844904695579' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2324309844904695579'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2324309844904695579'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/no-one-can-beat-our-data-compare-tool.html' title='No one can beat our data compare tool, no one!'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1055476676522872370</id><published>2011-08-11T19:45:00.000-07:00</published><updated>2011-08-11T19:45:35.291-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linkedin'/><title type='text'>LinkedIn – great concept but practically useless!</title><content type='html'>The other day I had a need to get introduced to an individual, let’s call her Jane Doe, who worked for company X. I searched for her on LinkedIn and was delighted to find that she was “in” my network – only one step away, directly connected to my friend “Jon”. So, I ask Jon to introduce me to Jane explaining why I wanted to talk to Jane. Jon’s response was the shocker – he said “I am really sorry but I barely know Jane (translation: I don’t really know Jane). I will send her an email but I am not sure if she will respond or not!” But, that defeats the very purpose of this media I said to myself! &lt;br /&gt;Well. after this I decided to examine my contact list and to my dismay I realized that gradually a good number of individuals that I can’t remember ever meeting has made it into my list of connections! Who are those people? Why are they on my list? What does it really mean to me to have those people in my list and what does it mean to them to be on my list? I certainly can’t vouch for them nor can I rely on them for anything since I don’t know them BUT the very fact that they are on my list of direct connections constitutes some sort of an endorsement.&amp;nbsp; What a mess! What is now the real value of this thing to the end users other than to sales professionals who may use it as a cheap way to compile prospect lists or to marketing professionals who can run highly targeted ads?&amp;nbsp; What motivates someone who has no prospecting interest to waste much valuable time there? I can't find a good answer!&lt;br /&gt;I am not trying to bash LinkedIn here – the concept was great and the implementation near perfect but we the people seem to have ruined a good thing as we often do.&amp;nbsp; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1055476676522872370?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1055476676522872370/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1055476676522872370' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1055476676522872370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1055476676522872370'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/linkedin-great-concept-but-practically.html' title='LinkedIn – great concept but practically useless!'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4029621285221714031</id><published>2011-08-10T10:37:00.000-07:00</published><updated>2011-08-10T10:40:07.210-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='evangelist'/><category scheme='http://www.blogger.com/atom/ns#' term='sql tools'/><title type='text'>Tech Evangelists – exclusive territories, great potential</title><content type='html'>If you "live" online and have solid knowledge of databases, especially SQL Server, this may be the perfect gig for you. As a technology evangelist you will promote the use of our database tools through blogging, reviews, demonstrations, presentations etc. You will be compensated for your effort based on your performance. Here are the guidelines:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;if you are selected to be the exclusive tech evangelist for a given territory we will show you the current status of affairs in that territory and establish a baseline based on historical data;&lt;/li&gt;&lt;li&gt;you will receive $0.1 for every unique visitor to our site, originating from your territory, over the established baseline.&amp;nbsp;&lt;/li&gt;&lt;li&gt;you will receive $0.5 for every unique product download (your territory only) over the established baseline.&lt;/li&gt;&lt;li&gt;you will receive 15% commission on all sales on your territory regardless of how the customer found us.&lt;/li&gt;&lt;/ol&gt;You can learn more about the products you will be promoting from our site at &lt;a href="http://www.xsqlsoftware.com/"&gt;http://www.xsqlsoftware.com/&lt;/a&gt; - if what you&amp;nbsp;read there sounds all greek to you then you know this is not for you. If you think you might be the right person for the job please get in touch with us via email (&lt;a href="mailto:sales@xsqlsoftware.com"&gt;sales@xsqlsoftware.com&lt;/a&gt;) and briefly tell us who you are and why you think you can excel on this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4029621285221714031?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4029621285221714031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4029621285221714031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4029621285221714031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4029621285221714031'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/tech-evangelists-exclusive-territories.html' title='Tech Evangelists – exclusive territories, great potential'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-5931163826761193118</id><published>2011-08-08T11:12:00.000-07:00</published><updated>2011-08-08T11:12:26.064-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='contest'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='creative use'/><title type='text'>$250 for the most creative use of xSQL Data Compare</title><content type='html'>Have you used &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; to solve a challenging problem? Send us a short essay describing your scenario and how you made use of xSQL Data Compare and &lt;strong&gt;you may win $250&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;How will this work? &lt;br /&gt;&lt;ul&gt;&lt;li&gt;All entries submitted from &lt;strong&gt;now until November 30, 2011&lt;/strong&gt; will be evaluated by an internal commission for: 		&lt;ul&gt;&lt;li&gt;Creativity &lt;/li&gt;&lt;li&gt;Challenge level&lt;/li&gt;&lt;li&gt;Presentation&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;The commission will select 3 winners and the &lt;strong&gt;winning entries will be announced no later than  		December 16, 2011&lt;/strong&gt;. The prizes are: 		&lt;ul&gt;&lt;li&gt;First place winner&amp;nbsp;-&amp;gt; $250 &lt;/li&gt;&lt;li&gt;Second place&amp;nbsp;-&amp;gt; $100 &lt;/li&gt;&lt;li&gt;Third place&amp;nbsp;-&amp;gt; $50&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;Please note that by submitting your entries you assign xSQL Software the right to anonymize and publish your essay online. &lt;br /&gt;&lt;br /&gt;Please submit your entries via email to &lt;a href="mailto:info@xsqlsoftware.com"&gt;info@xsqlsoftware.com&lt;/a&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-5931163826761193118?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/5931163826761193118/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=5931163826761193118' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5931163826761193118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5931163826761193118'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/08/250-for-most-creative-use-of-xsql-data.html' title='$250 for the most creative use of xSQL Data Compare'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-3575055101501679509</id><published>2011-07-06T06:00:00.000-07:00</published><updated>2011-07-06T06:00:56.056-07:00</updated><title type='text'>Major release: SQL Server Data Compare 4</title><content type='html'>Coming 7 years after the release of the very first version of xSQL Data Compare, the new &lt;strong&gt;xSQL Data Compare for SQL Server&lt;/strong&gt; version 4 reflects a wealth of accumulated experience, countless comments and suggestions we have received from you over those years, and the latest trends in software architecting and design. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Quick links:&lt;/strong&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBUNDLE"&gt;download Data Compare 4&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xsqlsoftware.com/News/press26.aspx"&gt;what's new?&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;product page&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.xsqlsoftware.com/Tour.aspx?ProdId=xSQLData&amp;amp;idx=-1"&gt;quick tour&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;Important notes:&lt;/strong&gt; &lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Have an active upgrade subscription?&lt;/strong&gt; You do not need to contact us. In the next 3-5 days you will receive your new license. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Have a licensed version installed already?&lt;/strong&gt; Please note that the new version installs on top of the existing version but the license you have will not work with the new version.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Single edition:&lt;/strong&gt; when you visit our site you will notice that there are no more standard and professional editions available. There is only one edition that includes everything. &lt;/li&gt;&lt;/ol&gt;&lt;strong&gt;Product reviewers&lt;/strong&gt;: if you would like to do a professional review of the new Data Compare 4 we will be glad to send you a license and provide answers to any questions you may have. Just email us at &lt;a href="mailto:info@xsqlsoftware.com"&gt;info@xsqlsoftware.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Stay connected:&lt;/strong&gt; - follow us on Twitter &lt;a href="http://twitter.com/xsqlsoftware"&gt;http://twitter.com/xsqlsoftware&lt;/a&gt;, and like us on Facebook &lt;a href="http://www.facebook.com/xsqlsoftware"&gt;http://www.facebook.com/xsqlsoftware&lt;/a&gt;. Also, next time you stop by our site don't forget to click on those "like" buttons on our product pages. As always, your comments, suggestions, and your critique are greatly appreciated!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3575055101501679509?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3575055101501679509/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3575055101501679509' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3575055101501679509'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3575055101501679509'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/07/major-release-sql-server-data-compare-4.html' title='Major release: SQL Server Data Compare 4'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6896811230714814444</id><published>2011-03-17T10:59:00.000-07:00</published><updated>2011-03-17T10:59:51.982-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='query optimizer'/><category scheme='http://www.blogger.com/atom/ns#' term='search objects in SQL Server 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='index scan'/><category scheme='http://www.blogger.com/atom/ns#' term='index seek'/><title type='text'>Why is SQL Server doing a clustered index scan?</title><content type='html'>This is a simple real life scenario I ran into recently. Client is experiencing performance issues with SQL Server. A quick investigation reveals that a certain table, let's call it MyTable which contains over 50 million rows seems to be the source of contention. In particular there is a frequently run, innocent looking query that is causing the trouble. The query&amp;nbsp;looks something like this &lt;br /&gt;&lt;br /&gt;SELECT c1, c2 FROM MyTable WHERE MyTable_PK BETWEEN 5 and 9&lt;br /&gt;&lt;br /&gt;The execution plan shows that the SQL Server query optimizer has decided to do a clustered index scan on the primary key (terribly expensive on a large table like this). Why can't the query optimizer "see" that an index seek would be significantly more efficient than the scan? Upon closer examination I realized that an implicit conversion of the PK is happening. Now I can see the light – I check the table structure and realize that the Primary Key column has been defined as a varchar and that is being compared with integer values. That is what's "tricking" the query optimizer into picking the wrong plan. A little tweak: &lt;br /&gt;&lt;br /&gt;SELECT * FROM MyTable WHERE MyTable_PK IN (' 5', '6', '7',' 8', '9')&lt;br /&gt;&lt;br /&gt;Success&amp;nbsp;- now instead of scanning 50 million rows the query optimizer has picked the right plan, that is, it is doing a quick index seek and getting the rows we need in a fraction of the time. All the contention disappears – everybody is happy! &lt;br /&gt;&lt;br /&gt;Note: the real query was much more complex and the tweak is not necessarily as simple, but the point here is to highlight the fact that if the type of the index column does not match the type of the values with which it is being compared then the index is rather useless.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6896811230714814444?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6896811230714814444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6896811230714814444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6896811230714814444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6896811230714814444'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/03/why-is-sql-server-doing-clustered-index.html' title='Why is SQL Server doing a clustered index scan?'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8170742625708657768</id><published>2011-02-15T06:25:00.000-08:00</published><updated>2011-02-15T06:25:48.825-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>Script Executor for MySQL free today</title><content type='html'>Today&amp;nbsp;and tomorrow&amp;nbsp;only (February 15-16, 2011) you can get a &lt;strong&gt;free&lt;/strong&gt; license for &lt;a href="http://www.xsqlsoftware.com/Order/SupportOptions.aspx?ProdID=ScriptExecutorLic&amp;amp;LicID=ExSUNMySql"&gt;Script Executor for&amp;nbsp;MySQL&lt;/a&gt; - simply plug in the &lt;strong&gt;MYSQLEX11&lt;/strong&gt; discount code on the shopping cart page - the price will go down to $0 and you will not be asked to provide any payment information. One license per customer only please. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; is one of the best tools for deploying t-sql scripts to your database server "farm". Whether you are running MySQL, DB2, SQL Server or a combination of those platforms, Script Executor allows you to easily create deployment packages involving hundreds of scripts that have to be executed in a certain order targeting as many servers as you need on any of those platforms, simultaneously. &lt;br /&gt;&lt;br /&gt;Download a free, fully functional trial version and see for yourself what you have been missing until now: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8170742625708657768?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8170742625708657768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8170742625708657768' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8170742625708657768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8170742625708657768'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/02/script-executor-for-mysql-free-today.html' title='Script Executor for MySQL free today'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1163434532480831835</id><published>2011-01-18T13:38:00.000-08:00</published><updated>2011-01-18T13:38:30.915-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rename objects'/><category scheme='http://www.blogger.com/atom/ns#' term='ssms'/><title type='text'>Don’t rename SPs, UDFs and Views – drop and create instead</title><content type='html'>When developers at client X need to make changes to an SP (let’s call that SP1) they usually go through those simple steps:&amp;nbsp; &lt;ol&gt;&lt;li&gt;Script SP1 out as CREATE&lt;/li&gt;&lt;li&gt;Right click on SP1 on the left panel and rename it to SP1_backup&lt;/li&gt;&lt;li&gt;Work with the script and when done with the changes execute it to create the new SP1&lt;/li&gt;&lt;/ol&gt;If you try this in 2005 you would get an error telling you that the SP1 already exists in the database even though it was just renamed to SP1_backup! There is a perfectly good explanation for this on a Microsoft kb article – basically when you rename an object like a stored procedure, user defined function or view the name of the object in the catalog is changed but the name of the object in the definition of the object is not changed! While this is annoying, at least it stops the user from making a complete mess. &lt;br /&gt;&lt;br /&gt;With SQL Server 2008 Microsoft decided to eliminate this little annoyance, so now step 3 above will work just fine, the new SP1 is created successfully and you will be happy until you decide to look into SYS.sql_modules and realize that you now have two SPs with identical names in the definition. Fine, that’s not the end of the World you say. But just for a little fun try executing the sp_refreshsqlmodule 'dbo.SP1_Backup' - this should be completely harmless, simply updates the outdated metadata right? Well, try looking into SYS.sql_modules again after you execute that – surprise, all the work you did on SP1 just disappeared! Now, the definition of the SP1 is exactly the same as that of SP1_backup. Definitely not what you wanted or expected! &lt;br /&gt;&lt;br /&gt;The renaming issue has been there forever – they (Microsoft) must have a pretty good reason for not fixing it, so I am assuming it will never be fixed. In the meantime the advise to SSMS user is: when it comes to SPs, UDFs and Views just pretend that the rename functionality does not exist – if you want to rename such an object script it out, change the name in the CREATE statement and execute the script; then just drop the original object.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1163434532480831835?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1163434532480831835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1163434532480831835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1163434532480831835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1163434532480831835'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2011/01/dont-rename-sps-udfs-and-views-drop-and.html' title='Don’t rename SPs, UDFs and Views – drop and create instead'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8459386522555695274</id><published>2010-12-17T07:57:00.000-08:00</published><updated>2010-12-17T07:57:27.554-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ms outlook performance'/><category scheme='http://www.blogger.com/atom/ns#' term='bad update'/><title type='text'>Outlook takes forever to switch from one folder to another after update Kb2412171</title><content type='html'>After installing Microsoft Outlook update Kb2412171 it takes forever to switch from one folder to another – uninstall the update and you will be fine. Only do this if you are experiencing the problem – in this case it was Windows 7/ 64 bit running Outlook 2007 with SP2. To uninstall: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to Control Panel \ System and Security \ Windows Update \ View installed update &lt;/li&gt;&lt;li&gt;Find the above mentioned update and uninstall &lt;/li&gt;&lt;/ul&gt;Note if you have your system configured to install the updates automatically this will install again so you will need to change your configuration.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8459386522555695274?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8459386522555695274/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8459386522555695274' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8459386522555695274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8459386522555695274'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/12/outlook-takes-forever-to-switch-from.html' title='Outlook takes forever to switch from one folder to another after update Kb2412171'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6030746903716503211</id><published>2010-12-15T09:08:00.000-08:00</published><updated>2010-12-15T09:08:21.163-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='Free sql compare tools'/><title type='text'>Free Executor license with xSQL Comparison Bundle purchase</title><content type='html'>From &lt;strong&gt;now until December 31, 2010&lt;/strong&gt; you can choose to take advantage of one of the following special offers: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;A complimentary&amp;nbsp;Script Executor Professional license with the purchase of a xSQL Comparison Bundle Professional license;&amp;nbsp;&lt;/li&gt;&lt;li&gt;A complimentary 12 months upgrade subscription with the purchase of any of our products. &lt;/li&gt;&lt;/ul&gt;As always your comments and suggestions are greatly appreciated. Also, we would like to encourage you to follow us on Twitter &lt;a href="http://twitter.com/xsqlsoftware"&gt;http://twitter.com/xsqlsoftware&lt;/a&gt;, like us on Facebook &lt;a href="http://www.facebook.com/xsqlsoftware"&gt;http://www.facebook.com/xsqlsoftware&lt;/a&gt;, and don't forget to click on that "like" button on our products' pages. &lt;br /&gt;&lt;br /&gt;Happy Holidays! May the season be filled with joy and may you have a healthy, happy and prosperous New Year!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6030746903716503211?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6030746903716503211/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6030746903716503211' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6030746903716503211'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6030746903716503211'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/12/free-executor-license-with-xsql.html' title='Free Executor license with xSQL Comparison Bundle purchase'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-412111096217314933</id><published>2010-11-29T06:52:00.000-08:00</published><updated>2010-11-29T06:52:50.335-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><title type='text'>xSQL Data Compare new build</title><content type='html'>New build of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; that fixes an issue with the sync script serialization is available for &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLData"&gt;download&lt;/a&gt;. Under certain conditions the serialization of the synchronization script would fail – while that failure is mostly transparent to the end user as the process will continue normally, it would be exposed in cases when the synchronization script is very large. &lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; provides for comparing and synchronizing data in two SQL Server databases. The current version supports SQL Server 2008/2005/2000 - all editions. xSQL Data Compare is free for SQL Server Express with no restrictions. For other editions of SQL Server it is only free if the number of objects does not exceed certain limits listed here: &lt;a href="http://www.xsqlsoftware.com/LiteEdition.aspx"&gt;http://www.xsqlsoftware.com/LiteEdition.aspx&lt;/a&gt;. You can download your free copy from here: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLData"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLData&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-412111096217314933?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/412111096217314933/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=412111096217314933' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/412111096217314933'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/412111096217314933'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/11/xsql-data-compare-new-build.html' title='xSQL Data Compare new build'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-265442728020139382</id><published>2010-11-22T07:05:00.000-08:00</published><updated>2010-11-22T07:05:06.096-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><title type='text'>Script Executor for DB2 free today</title><content type='html'>Today only you can get a free license for &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; for DB2 - use discount code &lt;strong&gt;TWITDB2EX&lt;/strong&gt; when placing the order. &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; is one of the best tools for deploying t-sql scripts to your database server "farm". Whether you are running DB2, SQL Server, MySQL or a combination of those platforms, &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; allows you to easily create deployment packages involving hundreds of scripts that have to be executed in a certain order targeting as many servers as you need on any of those platforms, simultaneously. &lt;br /&gt;&lt;br /&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;span style="color: red; font-size: x-small;"&gt;&lt;span style="color: black; font-size: small;"&gt;Download a free, fully functional trial version and see for yourself what you have been missing until now:&amp;nbsp; &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-265442728020139382?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/265442728020139382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=265442728020139382' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/265442728020139382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/265442728020139382'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/11/script-executor-for-db2-free-today.html' title='Script Executor for DB2 free today'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-513448309788723966</id><published>2010-11-12T06:58:00.000-08:00</published><updated>2010-11-12T07:19:32.671-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='msde'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Profiler'/><category scheme='http://www.blogger.com/atom/ns#' term='sql express'/><title type='text'>Profiler for SQL Express</title><content type='html'>The lack of profiling tools for SQL Server Express has been one of the issues small developers have had to grapple with. If you are one of those developers check out &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Profiler.aspx"&gt;xSQL Profiler&lt;/a&gt; – it provides all the functionality of the SQL Profiler and more. It supports all editions of SQL Server including MSDE and SQL Express. What’s more the &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Profiler.aspx"&gt;xSQL Profiler&lt;/a&gt; is &lt;strong&gt;free for&amp;nbsp;two SQL Server instances&lt;/strong&gt; – fully functional, no strings attached. &lt;br /&gt;&lt;br /&gt;So, if you are looking for a profiler for SQL Express you can get it &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=12&amp;amp;ProdID=xSQLProfiler"&gt;here&lt;/a&gt; for free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-513448309788723966?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/513448309788723966/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=513448309788723966' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/513448309788723966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/513448309788723966'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/11/profiler-for-sql-express.html' title='Profiler for SQL Express'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4870766545572832560</id><published>2010-11-10T06:15:00.000-08:00</published><updated>2010-11-10T06:15:42.277-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsql documenter'/><category scheme='http://www.blogger.com/atom/ns#' term='document database'/><title type='text'>xSQL Documenter V4 released</title><content type='html'>One of the best database documenting tools in the market just got better - we released &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter V4&lt;/a&gt; with the following new and enhanced features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;support for Microsoft Integration Server 2005/2008, Teradata 13 and SQLite;&lt;/li&gt;&lt;li&gt;enhanced Extended Property Editor to support more platforms and support for comments on procedure parameters;&lt;/li&gt;&lt;li&gt;A new “columns” section for table valued functions shows what columns they return (SQL Server only);&lt;/li&gt;&lt;li&gt;Deterministic, schema bound and inline properties for functions were added (SQL Server only);&lt;/li&gt;&lt;li&gt;Ability to suppress object dependencies on schemas (SQL Server only);&lt;/li&gt;&lt;li&gt;Ability to specify max number of threads in GUI (the equivalent of the command line switch /threads);&lt;/li&gt;&lt;li&gt;Support for replacing tabs with spaces in DDL;&lt;/li&gt;&lt;li&gt;Scripting of users, logins, and roles for SQL Server;&lt;/li&gt;&lt;li&gt;Support for connecting to Oracle using ODBC;&lt;/li&gt;&lt;li&gt;More details in the foreign keys section for SQL Server;&lt;/li&gt;&lt;li&gt;Specify sample rows from tables separately from sample rows for views since views can be very "expensive";&lt;/li&gt;&lt;li&gt;Ability to order sample rows;&lt;/li&gt;&lt;/ul&gt;Database management systems that were already supported in the previous version are: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft SQL Server 2000/2005/2008&lt;/li&gt;&lt;li&gt;Microsoft Analysis Server 2005/2008&lt;/li&gt;&lt;li&gt;Microsoft Report Server 2005/2008&lt;/li&gt;&lt;li&gt;Oracle 9i and above&lt;/li&gt;&lt;li&gt;DB2 8.2 and above&lt;/li&gt;&lt;li&gt;MySQL 5.0 and above&lt;/li&gt;&lt;li&gt;Sybase ASE 12.0 and above&lt;/li&gt;&lt;li&gt;Sybase SQL Anywhere 10.0 and up&lt;/li&gt;&lt;li&gt;Informix IDS 10.0 and above&lt;/li&gt;&lt;li&gt;PostgreSQL 8.0 and above&lt;/li&gt;&lt;li&gt;Microsoft Access 97 and above&lt;/li&gt;&lt;li&gt;VistaDB 3.0 and above&lt;/li&gt;&lt;li&gt;ENEA Polyhedra 7.0 and above&lt;/li&gt;&lt;li&gt;Raima RDM Server 8.1&lt;/li&gt;&lt;/ul&gt;Download a free, non-expiring&amp;nbsp;trial version from &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=15&amp;amp;ProdID=xSQLDocumenter"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=15&amp;amp;ProdID=xSQLDocumenter&lt;/a&gt;&amp;nbsp;and let us know what you think.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4870766545572832560?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4870766545572832560/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4870766545572832560' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4870766545572832560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4870766545572832560'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/11/xsql-documenter-v4-released.html' title='xSQL Documenter V4 released'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2962432283142139729</id><published>2010-11-09T09:42:00.000-08:00</published><updated>2010-11-09T09:42:34.641-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Builder'/><title type='text'>xSQL Builder new build available</title><content type='html'>Just published a new build of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; with improved handling of backup files when the user chooses the "Create destination database from a backup" option. The new build also comes with a new and improved install mechanism. &lt;br /&gt;&lt;br /&gt;Targeting primarily software publishers, &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; is one of the&amp;nbsp;best SQL Server&amp;nbsp;database deployment tools. In just minutes you can create an executable package that embeds wither the schema of the master database only or a complete backup of the master database. When you run the executable on the client depending on the configuration it will either create and restore the database from scratch or compare the existing database with the embedded schema and update the target with the changes. Of course software publishers are not the only ones who would benefit from using &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; - anyone in need of deploying a SQL Server database will find &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; to be an indispensible tool. &lt;br /&gt;&lt;br /&gt;You can download the new build from: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=30&amp;amp;ProdID=xSQLBuilder"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=30&amp;amp;ProdID=xSQLBuilder&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2962432283142139729?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2962432283142139729/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2962432283142139729' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2962432283142139729'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2962432283142139729'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/11/xsql-builder-new-build-available.html' title='xSQL Builder new build available'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-163369652490694643</id><published>2010-11-01T14:11:00.000-07:00</published><updated>2010-11-01T14:14:42.320-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rss reporter'/><title type='text'>Best way to create an rss feed from SQL Server</title><content type='html'>If you are looking for a quick and easy way to create and maintain dynamic rss feeds from SQL Server then &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Rss_Reporter.aspx"&gt;RSS Reporter&lt;/a&gt; is your best bet. Completely free for one SQL Server instance &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Rss_Reporter.aspx"&gt;RSS Reporter for SQL Server&lt;/a&gt; supports SQL Server 2008, 2005 and 2000. It allows you to write a t-sql query and automatically generates an rss feed with the results of the query. Every time a feed reader refreshes the feed the query you have defined will be executed against the chosen database and the feed will be updated with the new results. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/_gVoDZlsD5-g/TM8smxTXpTI/AAAAAAAAAB0/5eYkrH-tzI8/s1600/RSS_Reporter_Ad_hoc_Query.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" nx="true" src="http://1.bp.blogspot.com/_gVoDZlsD5-g/TM8smxTXpTI/AAAAAAAAAB0/5eYkrH-tzI8/s320/RSS_Reporter_Ad_hoc_Query.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Need to change the rss feed? No problem – simply login to the rss reporter admin interface, modify the query, save it and you are done – all users that are reading that feed will get the new results next time the feed is refreshed. &lt;br /&gt;&lt;br /&gt;Best of all: &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Rss_Reporter.aspx"&gt;RSS Reporter for SQL Server&lt;/a&gt; is completely free (no strings attached) for a single SQL Server instance and only $99 for 5 SQL Server instances. A DBA in charge of monitoring SQL jobs from multiple servers will greatly appreciate the pre-built SQL Server jobs feeds – all jobs from all servers in one aggregate rss feed; that is efficiency! &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/_gVoDZlsD5-g/TM8ss1jTwRI/AAAAAAAAAB4/EP1NZEcdY4k/s1600/RSS_Reporter_Jobs_Feeds.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="270" nx="true" src="http://2.bp.blogspot.com/_gVoDZlsD5-g/TM8ss1jTwRI/AAAAAAAAAB4/EP1NZEcdY4k/s320/RSS_Reporter_Jobs_Feeds.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-163369652490694643?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/163369652490694643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=163369652490694643' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/163369652490694643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/163369652490694643'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/11/best-way-to-create-rss-feed-from-sql.html' title='Best way to create an rss feed from SQL Server'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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/_gVoDZlsD5-g/TM8smxTXpTI/AAAAAAAAAB0/5eYkrH-tzI8/s72-c/RSS_Reporter_Ad_hoc_Query.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8214699729339673750.post-3573192010496956403</id><published>2010-10-22T09:17:00.000-07:00</published><updated>2010-10-22T09:19:22.260-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='one-to-many join'/><category scheme='http://www.blogger.com/atom/ns#' term='tsql'/><title type='text'>One to many join – pick only one corresponding row from the "many" table</title><content type='html'>It is hard to "synthesize" this problem into one sentence hence the cryptic title, but here is the long description: You have table T1 that has a one to many relationship with table T2. You need to update a particular column, let's say C1, on table T1 with a value that can be extracted (with some manipulation) from one of the corresponding rows on table T2. &lt;br /&gt;&lt;br /&gt;The first thing that comes to mind is a simple update like this:&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; UPDATE &lt;span style="color: black;"&gt;T1&lt;/span&gt; SET &lt;/span&gt;&lt;span style="color: black;"&gt;C1 = SomeFunction(t2.C1)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM &lt;span style="color: black;"&gt;T1&lt;/span&gt; INNER JOIN &lt;span style="color: black;"&gt;T2&lt;/span&gt; &lt;/span&gt;&lt;span style="color: black;"&gt;ON t1.ID = t2.t1ID&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; WHERE &lt;span style="color: black;"&gt;t2.c1 fulfills some criteria – &lt;span style="font-size: x-small;"&gt;we need this since not all the rows on T2 contain the values we need.&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The problem with this is that it keeps needlessly updating T1 rows as many times as it finds corresponding rows on T2. For each row on T1 we need to pick only one of the corresponding rows from T2 that fulfills the criteria. One option would be to use a cursor, but we want to avoid using a cursor and handle this within one query. Here is one of the ways of accomplishing this:&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp; UPDATE &lt;span style="color: black;"&gt;T1&lt;/span&gt; SET &lt;/span&gt;&lt;span style="color: black;"&gt;C1 = tempt2.C1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FROM &lt;span style="color: black;"&gt;T1&lt;/span&gt; INNER JOIN&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&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; &lt;span style="color: #444444;"&gt;(&lt;/span&gt;SELECT DISTINCT &lt;span style="color: black;"&gt;t1ID, SomeFunction(t2.C1)&lt;/span&gt; AS &lt;span style="color: black;"&gt;C1&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&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; FROM &lt;span style="color: black;"&gt;T2&lt;/span&gt; WHERE &lt;/span&gt;&lt;span style="color: black;"&gt;t2.c1&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&gt;fulfills some criteria&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue;"&gt;&lt;span style="color: black;"&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; &lt;/span&gt;&lt;span style="color: #444444;"&gt;)&lt;/span&gt;&amp;nbsp;AS &lt;/span&gt;&lt;span style="color: black;"&gt;tempt2&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="color: blue;"&gt;ON &lt;/span&gt;&lt;span style="color: black;"&gt;t1.ID = tempt2.t1ID&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, the sub-query will produce a temporary table that contains a single corresponding row for each row on T1 and it also contains the value with which we need to update column C1 on T1. This is based on the assumption that SomeFunction(t2.C1) generates the same value for all rows in T2 that are related to the same row on T1. &lt;br /&gt;&lt;br /&gt;With small tweaks in the sub-query you can use this solution for all scenarios when you need to restrict the number of rows that are returned from a one to many JOIN. &lt;br /&gt;&lt;br /&gt;Note: don’t forget to try our cool SQL Tools and remember that when you &lt;strong&gt;follow us on Twitter&lt;/strong&gt; &lt;a href="http://twitter.com/xsqlsoftware"&gt;http://twitter.com/xsqlsoftware&lt;/a&gt; and &lt;strong&gt;“like” us on Facebook&lt;/strong&gt; &lt;a href="http://www.facebook.com/xsqlsoftware"&gt;http://www.facebook.com/xsqlsoftware&lt;/a&gt; you will get a complimentary 12 months upgrade subscription when you purchase any of our products.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3573192010496956403?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3573192010496956403/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3573192010496956403' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3573192010496956403'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3573192010496956403'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/10/one-to-many-join-pick-only-one.html' title='One to many join – pick only one corresponding row from the &quot;many&quot; table'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-545821505636017073</id><published>2010-10-12T08:29:00.001-07:00</published><updated>2010-10-12T08:29:31.751-07:00</updated><title type='text'>Standardizing Object Names - Schema Compare</title><content type='html'>In a recent build of our schema comparison and synchronization tool &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; we introduced a simple “feature” that is aimed at generating consistent statements and fix name mismatches that occur especially with objects migrated from SQL Server 2000. The idea is that regardless of what the name of the object looks like in the definition of the object in the source database when &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; generates the change script it will use [owner].[object_name]. For example, you may have created a new stored procedure as CREATE PROCEDURE myStoredProcedure … , in the sync script generated by xSQL Object this statement will be CREATE PROCEDURE [owner].[myStoredProcedure]. &lt;br /&gt;&lt;br /&gt;The “problem” some of the users are running into is that after they execute the synchronization script they expect the databases to be identical however the object definitions are not going to be identical because of those discrepancies in the object name inside the definition of the object (that is only if the names in the source database are not defined as [owner].[objectname]). &lt;br /&gt;&lt;br /&gt;While we like the idea of automatically "correcting" the object&amp;nbsp;names (by the way SQL Server Management Studio does the same thing when you script an object) you (the user) may want the synchronization process to reflect exactly what the source database is – in other words you don’t want &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; to standardize the names. In that case you can turn this feature off: find and open &lt;strong&gt;xSQL.SQLObjectCompare.UI.exe.config&lt;/strong&gt; with Notepad and then add the following key under the &lt;span style="font-family: Verdana, sans-serif;"&gt;&amp;lt;appsettings&amp;gt; section: &amp;lt;add key="PerformNameValidation" value="0"&amp;gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-545821505636017073?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/545821505636017073/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=545821505636017073' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/545821505636017073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/545821505636017073'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/10/standardizing-object-names-schema.html' title='Standardizing Object Names - Schema Compare'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8745076649463675650</id><published>2010-10-05T09:36:00.000-07:00</published><updated>2010-10-05T10:16:29.177-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ssms'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='multiple result sets'/><title type='text'>Multiple result sets – SSMS versus xSQL's Script Executor</title><content type='html'>Up until now we have been promoting &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; as a tool that provides for deploying multiple t-sql scripts to many target databases (SQL Server, DB2 and MySQL). What we have neglected to emphasize is a seemingly small feature that many of our users find extremely helpful. If you work with SQL Server it is very likely that you have often executed queries that return multiple result sets and you have experienced firsthand how inconvenient it is to browse through those result sets - see the illustration below and just imagine what that looks like when you have more than just two result sets (click in the image to see full size):&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_gVoDZlsD5-g/TKtTGFCkoaI/AAAAAAAAABo/fzVZz2V3gRI/s1600/SSMS_multiple_result_sets.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="257" px="true" src="http://3.bp.blogspot.com/_gVoDZlsD5-g/TKtTGFCkoaI/AAAAAAAAABo/fzVZz2V3gRI/s320/SSMS_multiple_result_sets.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Now, look at the screen shot down below to see&amp;nbsp;how &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; displays the results – notice the green arrows (click on the image for full size) that allow you to jump from one result set to the other within the same server. Notice also something even cooler, on the left hand side there is a panel showing the list of databases against which the script was executed – so you can easily see the result sets you got from each database. Furthermore, those databases don’t all have to be SQL Server databases – the same scripts can be executed against multiple SQL Server, DB2 and MySQL databases at the same time. &lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gVoDZlsD5-g/TKtTWPdqaXI/AAAAAAAAABs/HTV8jwuzA_o/s1600/Script_Executor_multiple_result_sets.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" px="true" src="http://4.bp.blogspot.com/_gVoDZlsD5-g/TKtTWPdqaXI/AAAAAAAAABs/HTV8jwuzA_o/s320/Script_Executor_multiple_result_sets.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;br /&gt;&lt;/div&gt;And last but not least how about this ability to manipulate the result set – right click on the result set and a handy context menu appears allowing you to remove certain columns and or certain rows as well as copying and exporting the result set – see below:&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_gVoDZlsD5-g/TKtTg3NbodI/AAAAAAAAABw/Qiuhu4DlAo0/s1600/Script_Executor_manipulate_result_set.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="214" px="true" src="http://4.bp.blogspot.com/_gVoDZlsD5-g/TKtTg3NbodI/AAAAAAAAABw/Qiuhu4DlAo0/s320/Script_Executor_manipulate_result_set.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;I am of course not advocating ditching SSMS in favor of Script Executor – SSMS is an indispensable tool, but I am simply trying to emphasize the advantages that Script Executor has in certain situations. The reason Script Executor exists is to provide for an easy and efficient deployment of scripts to multiple targets.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;Download&lt;/a&gt; a copy of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; now and see for yourself how useful this tool can be.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8745076649463675650?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8745076649463675650/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8745076649463675650' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8745076649463675650'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8745076649463675650'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/10/multiple-result-sets-ssms-versus-xsqls.html' title='Multiple result sets – SSMS versus xSQL&apos;s Script Executor'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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/_gVoDZlsD5-g/TKtTGFCkoaI/AAAAAAAAABo/fzVZz2V3gRI/s72-c/SSMS_multiple_result_sets.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8214699729339673750.post-6369167743650194873</id><published>2010-10-04T12:02:00.000-07:00</published><updated>2010-10-04T12:02:50.599-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='twitter'/><title type='text'>Follow us on Twitter and Like us on Facebook</title><content type='html'>Follow us on Twitter &lt;span style="font-family: &amp;quot;Calibri&amp;quot;, &amp;quot;sans-serif&amp;quot;; font-size: 12pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;&lt;a href="http://twitter.com/xSQLSoftware"&gt;http://twitter.com/xSQLSoftware&lt;/a&gt;&amp;nbsp;and like us on Facebook &lt;span style="font-family: &amp;quot;Calibri&amp;quot;, &amp;quot;sans-serif&amp;quot;; font-size: 12pt; mso-ansi-language: EN-US; mso-bidi-language: AR-SA; mso-fareast-font-family: Calibri; mso-fareast-language: EN-US; mso-fareast-theme-font: minor-latin;"&gt;&lt;a href="http://www.facebook.com/xsqlsoftware"&gt;http://www.facebook.com/xsqlsoftware&lt;/a&gt;. In return we will give you a 12 months complimentary upgrade subscription when you purchase our products. &lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6369167743650194873?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6369167743650194873/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6369167743650194873' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6369167743650194873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6369167743650194873'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/10/follow-us-on-twitter-and-like-us-on.html' title='Follow us on Twitter and Like us on Facebook'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2841556652626346760</id><published>2010-09-22T13:26:00.000-07:00</published><updated>2010-09-22T13:26:12.114-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>Script Executor - new build available</title><content type='html'>A new&amp;nbsp;build of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; that provides for overriding the target server and&amp;nbsp;database&amp;nbsp;for an executable package via command line is now available for download.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2841556652626346760?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2841556652626346760/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2841556652626346760' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2841556652626346760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2841556652626346760'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/09/script-executor-new-build-available.html' title='Script Executor - new build available'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-5794159615905876834</id><published>2010-05-27T10:38:00.000-07:00</published><updated>2010-05-27T10:38:41.504-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql compare'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><title type='text'>xSQL Database Compare tools V3.5 released</title><content type='html'>We just released version 3.5 of our database comparison and synchronization engine &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Data_Compare_SDK.aspx"&gt;xSQL SDK&lt;/a&gt;, the schema comparison and synchronization tool &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt;, and the data compare and synchronization tool &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The new version includes: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for SQL Server 2008 R2.&lt;/li&gt;&lt;li&gt;The passwords for SQL Server connections are now encrypted and stored in the workspace file thus eliminating the need to enter the password each time the xSQL comparison tools are launched.&lt;/li&gt;&lt;li&gt;Fixing the discrepancies between the name in the object definition and the name in the system catalog. This enhancement addresses an issue caused when the sp_rename procedure is used to rename objects with sql definition such as procedures, views, functions and triggers. The procedure sp_rename in these cases changes only the name in the sys catalog, but it does not change the name in the object's definition. This particular problem manifests itself mostly on SQL Server 2000 databases.&lt;/li&gt;&lt;li&gt;A new schema options named "Include objects with invalid dependencies" replaces the previous option named "Include views with invalid dependencies"; in addition to views this option now affects stored procedures, functions and triggers.&lt;/li&gt;&lt;li&gt;Trial expiration issue on Windows Vista and Windows 7 with UAC on. The enhancement addresses an issue with early expiration of xSQL Object and xSQL Data Compare trial period on Windows Vista and Windows 7 when the UAC is turned on - it guarantees that both tools will be fully functional with no restriction for the duration of the trial period. After the trial, the products will revert to Lite edition.&lt;/li&gt;&lt;li&gt;Some enhancements and bug fixing in the command line utilities including a newly added error code that tracks script execution errors.&lt;/li&gt;&lt;li&gt;A fix to stored procedure multi-line comments.&lt;/li&gt;&lt;li&gt;An enhancement in the way xSQL Data Compare handles identity columns. Explicit updates of the identity columns are no longer supported and will trigger data warnings.&lt;/li&gt;&lt;/ul&gt;You can download the new version from: http://www.xsqlsoftware.com/Download.aspx&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-5794159615905876834?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/5794159615905876834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=5794159615905876834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5794159615905876834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5794159615905876834'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/05/xsql-database-compare-tools-v35.html' title='xSQL Database Compare tools V3.5 released'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6585859751897846823</id><published>2010-05-25T06:53:00.000-07:00</published><updated>2010-05-25T06:53:51.447-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsql database version control'/><title type='text'>xSQL Database Version Control - new build available</title><content type='html'>A new build of &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Version_Control.aspx"&gt;xSQL Version Control&lt;/a&gt; (xSQLVC) for SQL Server is now available for download. The new build simplifies the configuration steps while giving you more choices on how you wish to copy the master development database from the master server to your local machine - in addition of the backup and restore option you can now copy all or part of the database via SQL Scripts.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6585859751897846823?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6585859751897846823/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6585859751897846823' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6585859751897846823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6585859751897846823'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/05/xsql-database-version-control-new-build.html' title='xSQL Database Version Control - new build available'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-7075547173074131781</id><published>2010-05-13T14:25:00.000-07:00</published><updated>2010-05-13T14:25:28.525-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nolock'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='blocking'/><category scheme='http://www.blogger.com/atom/ns#' term='alter trigger'/><title type='text'>Can a simple Alter Trigger statement cause serious blocking?</title><content type='html'>Most of the time it would not as it is a extremely quick operation but it certainly has the potential to. I ran across this the other day: an admin user was running a simple, “innocent”, Alter Trigger statement on a production SQL Server, he had done this many a times without any trouble so he had no reason to worry. Unfortunately, this time something went wrong – the Alter Trigger statement which usually executes instantaneously wasn’t completing and all of a sudden blocking alerts started firing left and right! He killed the Alter Trigger and all went back to normal, but he was puzzled: what had just happened? &lt;br /&gt;&lt;br /&gt;After a quick investigation here is what I found: the Alter Trigger had blocked virtually everyone (it was a trigger on a critical, heavily used table) but it wasn’t the head blocker! Instead, a “long” query that appeared to be doing some sort of data aggregation had blocked the Alter Trigger statement. But wait how can that be, the query was written with the NOLOCK option - apparently the person who wrote it knew that this query could potentially wreck-havoc on the production system so he tried to make sure he wouldn’t block anyone. And yes, most of the time his query would not cause any trouble to “others” except… while the nolock directive ensures that the query takes no data locks the query still takes what’s called a schema stability lock (in other words it’s saying: I will read un-committed data but don’t change the schema on me while I am reading) which prevents the Alter Trigger from taking the schema modification lock it needs. So, while the Alter Trigger is patiently waiting in line to get the schema modification lock it needs the rest of the processes that desperately need access to that table start piling up!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-7075547173074131781?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/7075547173074131781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=7075547173074131781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7075547173074131781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7075547173074131781'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/05/can-simple-alter-trigger-statement.html' title='Can a simple Alter Trigger statement cause serious blocking?'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2749067834537616360</id><published>2010-03-26T08:07:00.000-07:00</published><updated>2010-03-26T08:07:41.502-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='t-sql'/><category scheme='http://www.blogger.com/atom/ns#' term='comment out'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Compare'/><title type='text'>t-sql - save yourself, comment everything out</title><content type='html'>Do you have a "miscellaneous" script that contains numerous disparate t-sql statements that you usually run on an ad-hoc mode? If yes then do yourself (and others that depend on you) a favor: select the whole script and click on the "comment out" icon. That way, if you ever happen to accidentally "execute" without first selecting the statement(s) that you really wish to execute nothing bad will happen. Otherwise, in just seconds you may end up creating a huge mess.&lt;br /&gt;&lt;br /&gt;What prompted this? It was the desperate face of a very good database programmer who had just "successfully" executed one of those miscellaneous scripts and completely wiped out a couple of production tables, deleted certain rows from other tables and updated a few more. He did not lose his job but those few seconds of “terror” have probably shortened his life expectancy by a few months. It would have never happened if his miscellaneous statements were all commented out. &lt;br /&gt;&lt;br /&gt;Are there other lessons one can learn from this story? Yes, plenty of them – there is a lot that the DBA can do to prevent such things from ever happening (just do a search for sql server best practices and you will find a lot of great advice) but the goal of this was to remind you of a very simple measure that everyone who “touches” the database can easily take. &lt;br /&gt;&lt;br /&gt;Here is the product plug-in: this was a great showcase for our &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt;. Here is what happened next. They mounted the previous night’s backup on a verification instance and applied the logs up to the last log before the "unfortunate event". Next they used &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; to determine what was different and generated a selective synchronization script that basically reversed all the changes that the un-intentional execution of that "miscellaneous" script had caused. Thanks to a reliable backup scheme and to &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; of course, the damage was contained to a couple of hours of work with no data loss but it could have been a real disaster. &lt;br /&gt;&lt;br /&gt;Please feel free to leave your comments here.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2749067834537616360?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2749067834537616360/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2749067834537616360' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2749067834537616360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2749067834537616360'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/03/t-sql-save-yourself-comment-everything.html' title='t-sql - save yourself, comment everything out'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8287669263097381055</id><published>2010-03-15T10:24:00.000-07:00</published><updated>2010-03-15T10:24:17.130-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsqlvc'/><category scheme='http://www.blogger.com/atom/ns#' term='database version contron'/><title type='text'>xSQL Database Version Control for SQL Server released</title><content type='html'>We have just released &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Version_Control.aspx"&gt;xSQL Database Version Control&lt;/a&gt; for SQL Server (short xSQLVC) - the first true database version control utility for SQL Server that provides the convenience and flexibility of working on your own copy of the database coupled with the assurance that you will be in sync with the other developers on your team. So, how does &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Version_Control.aspx"&gt;xSQLVC&lt;/a&gt; work? Here is the high level description:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;you put a given database under version control&lt;/li&gt;&lt;li&gt;xSQLVC helps you automatically grab a copy of that database and create your own version&lt;/li&gt;&lt;li&gt;you make changes freely to your local copy and when ready to check in your changes xSQLVC will automatically generate the change scripts and execute those on the master copy&lt;/li&gt;&lt;li&gt;all your team mates are immediately notified of the scripts you checked in and with a click of a button they can apply those changes on their own local copies&lt;/li&gt;&lt;li&gt;xSQLVC maintains a complete history of the changes and allows you to rollback or re-apply certain scripts. &lt;/li&gt;&lt;/ul&gt;That's all there is to it:&amp;nbsp;the power of xSQLVC lies in its simplicity - &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Version_Control.aspx"&gt;read more&lt;/a&gt; and &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=50&amp;amp;ProdID=xSQLVC"&gt;download&lt;/a&gt; your fully functional trial version now.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8287669263097381055?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8287669263097381055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8287669263097381055' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8287669263097381055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8287669263097381055'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/03/xsql-database-version-control-for-sql.html' title='xSQL Database Version Control for SQL Server released'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-3347807976160685214</id><published>2010-03-03T10:54:00.000-08:00</published><updated>2010-03-03T10:55:30.704-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software publisher'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='deploy database'/><title type='text'>Automate Deployment of SQL Server Databases</title><content type='html'>&lt;strong&gt;Deploying SQL Server databases to clients can be a pain!&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;You may be a software publisher and your specialized software has been distributed to hundreds of your clients. For some of those clients you may have had to make custom changes to the database and the application to better meet their specific needs. Every time you need to send out an upgrade of your application you have to go through a laborious process of upgrading those hundreds of clients one by one. To make matters worst some of your clients have moved to SQL Server 2008, some are using SQL Server 2005 and yet some others&amp;nbsp;are still running SQL Server 2000 so you have to worry about version specific scripts as well. Furthermore, your clients don't necessarily have in house SQL Server expertise to follow your technical instructions on running certain T-SQL scripts in a certain sequence etc. &lt;br /&gt;&lt;br /&gt;Or, you may be a member of a development team or a SQL Server DBA in a big organization and after QA your application is routinely deployed to multiple locations. Deploying the database changes to all those locations is part of the time-consuming routine for each "target" you schedule the upgrade during the low activity time, you take a backup of the target database and then you start applying the change scripts. Yes, it is painful. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How can I avoid or at least ease this pain? &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; allows you to automate the deployment of SQL Server based solutions. You can use it to generate an executable packages that contains all the information and logic required to deploy the SQL Server database to the clientsï¿½ environments regardless of whether it is a first time deployment or an upgrade from a previous version. The self-contained SQL Server database deployment package can be incorporated into a setup and deployment solution or it can be shipped to clients as a separate application. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What does an xSQL Builder executable package include?&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;The self-contained, executable package generated by &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; contains the following components: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;depending on your choice it may contain a snapshot of the schema of the master SQL Server database, or the T-SQL creation script, or the backup of the master database.&lt;/li&gt;&lt;li&gt;run-time components for performing a SQL Server database comparison and synchronization&lt;/li&gt;&lt;li&gt;custom T-SQL Scripts that you may want to run before the comparison of the two databases takes place as well as custom T-SQL scripts that you may want to run after the target database has been synchronized with the master database&lt;/li&gt;&lt;li&gt;logging component that maintains a detailed log of all the events and operations performed on the client's environment during the execution of the deployment package. The executable package created by &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; generates three logs on the client: the operational log, the synchronization log and the error log.&lt;/li&gt;&lt;li&gt;notification component that allows you to configure the package to notify you via email in case of completion or failure of the execution of the package on the client&lt;/li&gt;&lt;/ul&gt;&lt;strong&gt;What does the executable package generated by xSQL Builder do on the client environment?&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;The self-contained, executable package generated by &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; performs the following actions on the client when executed: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;execute any pre-synchronization custom T-SQL scripts that you have defined&lt;/li&gt;&lt;li&gt;in case of a new installation it may create the database on the target machine using either the embedded backup of the master database or the creation script depending on what you chose when you generated the package. &lt;/li&gt;&lt;li&gt;in case of an upgrade it will perform a schema comparison of the target database with the snapshot of the master database that has been embedded in the package&lt;/li&gt;&lt;li&gt;generate the synchronization script and execute it against the target database&lt;/li&gt;&lt;li&gt;execute any post synchronization, custom T-SQL scripts you may have defined&lt;/li&gt;&lt;li&gt;prepare and send notifications which may include the logs for your review in case of failure&lt;/li&gt;&lt;/ul&gt;In case all goes as planned your database has been deployed almost transparently to the client otherwise you will receive the detailed log that will help you determine what failed and why.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3347807976160685214?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3347807976160685214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3347807976160685214' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3347807976160685214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3347807976160685214'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/03/automate-deployment-of-sql-server.html' title='Automate Deployment of SQL Server Databases'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4071123080539558755</id><published>2010-03-02T08:28:00.000-08:00</published><updated>2012-01-30T07:55:18.725-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free schema compare tool'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='database compare'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Compare'/><title type='text'>Compare and Synchronize SQL Server Databases</title><content type='html'>&lt;strong&gt;Why compare databases?&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;Whether you are a developer that uses SQL Server on the back end to support your application or a database administrator in charge of monitoring and maintaining those SQL Server databases you often have to deal with different versions of the same database. For example, you may have a development environment, a testing or QA environment and a production environment and at any given time your database is in different "states" in each of those environment. As you work on implementing changes and additions to your applications you routinely make changes on the development database like adding tables, adding columns, changing types, creating indexes, adding new and modifying existing views, stored procedures, user defined functions etc. &lt;br /&gt;&lt;br /&gt;At different points in the development you may need to promote all the work you have done on to the QA environment so that the QA team can start "pocking holes" in the work you have done. As soon as you do that you go back to your development World and continue working on your application and making database changes as the need arises so, it won't be long before the version of the database you are working on does not match the version the QA team is testing and that does not match the version of the SQL Server database that is running on your production servers. &lt;br /&gt;&lt;br /&gt;Any professional in this position will keep meticulous records on each version of the database so that at any given time he would be able to tell what is different from one version to the other. That's well and good but it does not take much to realize that, especially if the database is relatively big and changes relatively many, sorting through such records to figure out what changes when (let alone how to change it back if necessary) is like looking for the needle in the haystack. That's why the need to have a tool that compares the SQL Server databases and tells you what is different. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;How do I compare two databases? &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; which you can download from this site allows you to compare the schemas of two SQL Server databases with a few clicks, regardless of the location of those databases (as long as you can access those databases). The results of the comparison are displayed on an easy to use grid that shows the objects on the top section and the differences for the selected object on the bottom section. In addition of the side by side display of the selecte objects' scripts it also provides two change scripts - one to make the object on the second database in the comparison the same as the corresponding object in the first database in the comparison and abother change script to go the other way. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;What do I do after comparing the two databases? &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;After you have compared the SQL Server databases in question, knowing on which direction you wish to transfer changes (example: if you were comparing the development version of your SQL Server database with the QA version it is likely that you would want to transfer changes from the development version to the QA version) you simply click on the right button (link) and &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; automatically generates the change script required to transfer those changes. The script generated is safe and version specific (this is great for cases when you have different versions of SQL Server running on different environments - for example: you have upgraded the development environment to SQL Server 2005 or SQL Server 2008 but your QA and production environments are still on SQL Server 2000). At this point you can simply review the script to ensure that you do indeed intend to make those changes on the target database and then execute the script directly from &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object's&lt;/a&gt; interface. &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;strong&gt;How about the data - the content of two SQL Server databases?&lt;/strong&gt; &lt;br /&gt;&lt;br /&gt;So, what if you have some sort of a distributed SQL Server database or a replicated database or some other scenario where you need to compare the actual data between two SQL Server databases to make sure that the replication has worked correctly or to see what records were changes since the last backup if you are trying to perform some auditing or for some other reason? Well, we thought of that to: &lt;a href="http://www.xsqlsoftware.com/products/sql_server_data_compare/"&gt;xSQL Data Compare&lt;/a&gt; allows you to compare the data, the content, of two SQL Server databases, see where the differences are and then transfer all or some of those changes from one database to the other. &lt;a href="http://www.xsqlsoftware.com/products/sql_server_data_compare/"&gt;xSQL Data Compare&lt;/a&gt; comes together with &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; and the corresponding command line utilities as part of the xSQL Bundle that you can download from this site. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How much am I going to have to pay for those tools? &lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Not much at all - in fact it is likely that you may not have to pay anything - xSQL Bundle which includes both &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; and &lt;a href="http://www.xsqlsoftware.com/products/sql_server_data_compare/"&gt;xSQL Data Compare&lt;/a&gt; is completely free for SQL Server Express and comes in a free &lt;a href="http://www.xsqlsoftware.com/LiteEdition.aspx"&gt;Lite Edition&lt;/a&gt; for other editions of SQL Server.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4071123080539558755?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4071123080539558755/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4071123080539558755' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4071123080539558755'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4071123080539558755'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/03/compare-and-synchronize-sql-server.html' title='Compare and Synchronize SQL Server Databases'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1031076929355025115</id><published>2010-02-26T15:30:00.000-08:00</published><updated>2010-02-26T15:30:56.922-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsql database version control'/><category scheme='http://www.blogger.com/atom/ns#' term='database change management'/><category scheme='http://www.blogger.com/atom/ns#' term='xsqlvc'/><category scheme='http://www.blogger.com/atom/ns#' term='database version control'/><title type='text'>Database version control done right</title><content type='html'>A good database version control tool should meet two simple requirements:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Give the developer the flexibility he needs to efficiently make changes to the database unhindered by a rigid structure of rules and regulations&lt;/li&gt;&lt;li&gt;Ensure that the development team is synchronized – they are all developing against the same version of the database&lt;/li&gt;&lt;/ul&gt;The problem is that those two seemingly simple requirements contradict each other to a degree&amp;nbsp;– without an inherently inefficient structure of rules it is very difficult to meet the second requirement. This is the challenge we have tackled with a new product, xSQL Database Version Control (xSQLVC), that we will be announcing in the next few days.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1031076929355025115?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1031076929355025115/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1031076929355025115' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1031076929355025115'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1031076929355025115'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/02/database-version-control-done-right.html' title='Database version control done right'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6579462044273728538</id><published>2010-02-10T09:21:00.000-08:00</published><updated>2010-02-10T09:21:49.858-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='translate site'/><category scheme='http://www.blogger.com/atom/ns#' term='language'/><title type='text'>Language a big barrier to penetration</title><content type='html'>To translate or not to translate that is the question! &lt;br /&gt;&lt;br /&gt;For years we have been operating under the apparently false assumption that for most techies English is the common language and when it comes to software tools that target this particular segment of the population, language is not a real barrier. We looked at the number of visits to our site (&lt;a href="http://www.xsqlsoftware.com/"&gt;http://www.xsqlsoftware.com/&lt;/a&gt;) in the last 12 months by country and compared those to the population of each country for some of the developed countries. To make the comparison easier we normalized the numbers using visits from United States as the base. Proportionally to the population of each country &lt;strong&gt;for every 1 US originated visit&lt;/strong&gt; we received:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;From English speaking countries&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ireland -&amp;gt; 1.78 &lt;/li&gt;&lt;li&gt;New Zealand -&amp;gt; 1.55&lt;/li&gt;&lt;li&gt;Australia -&amp;gt; 1.31&lt;/li&gt;&lt;li&gt;Canada -&amp;gt; 1.26&lt;/li&gt;&lt;li&gt;United Kingdom -&amp;gt; 1.19&lt;/li&gt;&lt;/ul&gt;Non English speaking countries&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Italy -&amp;gt; 0.38&lt;/li&gt;&lt;li&gt;Austria -&amp;gt; 0.26&lt;/li&gt;&lt;li&gt;Germany -&amp;gt; 0.23&lt;/li&gt;&lt;li&gt;Spain -&amp;gt; 0.23&lt;/li&gt;&lt;li&gt;France -&amp;gt; 0.21&lt;/li&gt;&lt;li&gt;Japan -&amp;gt; 0.06&lt;/li&gt;&lt;/ul&gt;Since our tools are mostly tools for SQL Server it would have been nice if we had some idea of the penetration of SQL Server in those countries but, even if we corrected for that the gap between English speaking countries and non English speaking ones is striking and clearly highlights the fact that language is indeed an immense barrier even for our target audience (software programmers and database administrators). Of course, from this it does not necessarily follow that we should all rush to translating our sites and products into 10 different languages – whether that kind of an investment would pay off or not depends on many factors but it is certainly something we need to consider.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6579462044273728538?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6579462044273728538/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6579462044273728538' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6579462044273728538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6579462044273728538'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/02/language-big-barrier-to-penetration.html' title='Language a big barrier to penetration'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6882257351704673847</id><published>2010-01-27T12:25:00.000-08:00</published><updated>2010-01-27T12:25:49.477-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ibuzz'/><category scheme='http://www.blogger.com/atom/ns#' term='ipad'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>iApple an unbelievable iBuzz TM machine</title><content type='html'>I have never seen another company that is able to come close to apple in terms of &lt;strong&gt;iBuzz&lt;/strong&gt; TM or “buzz ratio” TM (defined as amount of buzz generated / value of the product being launched) – I don’t know how they do it but they do. Their approach to product launching is nothing short of “magical and revolutionary” even when their products are not. &lt;br /&gt;&lt;br /&gt;Take the iPad for example – there is not a soul that hasn’t heard of it today, it’s unveiling easily eclipsed some “not so important” stories like the State of the Union, the Davos Forum or the Feds meeting to name a few. So, what’s so “magical and revolutionary” about the iPad? Well, it’s thin the “master” said, you can customize the background to your liking and you can turn the thing sideways… really! &lt;br /&gt;So, how can Jobs get away with telling us that we will be able to change the background on this “ground breaking revolutionary” computer? Would he be able to generate this kind of buzz the next time around when he takes the iPad and makes it iPadXL? The reason says no, but, he has proven time and again that he is able to defy reason, he has the magic and can make us drool in anticipation every time!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6882257351704673847?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6882257351704673847/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6882257351704673847' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6882257351704673847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6882257351704673847'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/01/iapple-unbelievable-ibuzz-tm-machine.html' title='iApple an unbelievable iBuzz TM machine'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6743562465530501842</id><published>2010-01-25T13:07:00.000-08:00</published><updated>2010-01-25T13:07:30.764-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsql documenter'/><category scheme='http://www.blogger.com/atom/ns#' term='document database'/><title type='text'>xSQL Documenter 3 released</title><content type='html'>We have just released &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter 3&lt;/a&gt; which includes the following new features and enhancements:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for Microsoft Report Server 2005/2008;&lt;/li&gt;&lt;li&gt;Support for Raima RDM Server; &lt;/li&gt;&lt;li&gt;Support for SVG diagrams. Now the diagrams can be rendered in all browsers, such as Firefox, Opera, Safari, and Internet Explorer;&lt;/li&gt;&lt;li&gt;Option to use short names in the documentation instead of the three part names;&lt;/li&gt;&lt;li&gt;Each table and view column is now added to the CHM index;&lt;/li&gt;&lt;li&gt;SQL Server only: support for an extended property filter. If you use a filter, only extended properties named in the filter will be fetched.&lt;/li&gt;&lt;li&gt;Microsoft Analysis Server: support for excluding XMLA and MDX code for objects.&lt;/li&gt;&lt;/ul&gt;There is no comparison in features or value between &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter&lt;/a&gt; and&amp;nbsp;other database documentation tools&amp;nbsp;- &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter&lt;/a&gt; comes way ahead on every category. Generates both compiled CHM and HTML documentation and supports the following platforms:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Microsoft SQL Server 2000/2005/2008&lt;/li&gt;&lt;li&gt;Microsoft Analysis Server 2005/2008&lt;/li&gt;&lt;li&gt;Microsoft Report Server 2005/2008&lt;/li&gt;&lt;li&gt;Oracle 9i and above&lt;/li&gt;&lt;li&gt;DB2 8.2 and above&lt;/li&gt;&lt;li&gt;MySQL 5.0 and above&lt;/li&gt;&lt;li&gt;Informix IDS 10.0 and above&lt;/li&gt;&lt;li&gt;Sybase ASE&lt;/li&gt;&lt;li&gt;Sybase SQL Anywhere 10.0&lt;/li&gt;&lt;li&gt;PostgreSQL 8.0 and above&lt;/li&gt;&lt;li&gt;Microsoft Access 97 and above&lt;/li&gt;&lt;li&gt;VistaDB 3.0 and above&lt;/li&gt;&lt;li&gt;ENEA Polyhedra 7.0 and above&lt;/li&gt;&lt;li&gt;Raima RDM Server 8.1&lt;/li&gt;&lt;/ul&gt;You can download the free trial version from: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=15&amp;amp;ProdID=xSQLDocumenter"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=15&amp;amp;ProdID=xSQLDocumenter&lt;/a&gt; The trial version does not expire but simply puts the "trial" notices throughout the documentation. Give it a try - it does not require installation - you will have the most thorough documentation ready in minutes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6743562465530501842?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6743562465530501842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6743562465530501842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6743562465530501842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6743562465530501842'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/01/xsql-documenter-3-released.html' title='xSQL Documenter 3 released'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-7745936335627938512</id><published>2010-01-22T06:59:00.000-08:00</published><updated>2010-01-22T06:59:40.854-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='software publishing'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='publish database changes'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Builder'/><title type='text'>Publish database changes to hundreds of clients - software publisher</title><content type='html'>This is a "how to" written with software publishers in mind but it&amp;nbsp;will benefit other software development groups that may not be classified as software publishers. &lt;br /&gt;&lt;br /&gt;Here is the scenario: you have tenths, hundreds or maybe more clients&amp;nbsp;using the software you wrote that utilizes SQL Server on the backend. The first release was painless but all the subsequent releases have given you grief - you send out database upgrade scripts with clear instructions but the users just don't seem to be capable of following those instructions and then they call you..., so you are looking for a way to make this process pain free. Well, you are in luck as nowadays there is a tool for everything. Following, I will provide some guidance for each of the scenarios you may be facing. &lt;br /&gt;&lt;ol&gt;&lt;li&gt;If you cannot access the clients' servers from your location (most likely scenario)&lt;/li&gt;&lt;ol&gt;&lt;li&gt;if you have a small number of database versions on the field and each version's schema is "un-touched" - that is you (or the client) did not make any changes to it then the most efficient way to handle this would be to use &lt;a href="http://xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; to compare each previous version to the new "master" version and generate a sync script for each version upgrade and then use &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; to package the sync script and any additional scripts you may want to run on the clients' servers into a executable which can then be made part of your installation package;&lt;/li&gt;&lt;li&gt;if you have many versions out in the field and what's more critical you may have made (or allowed the client to) customizations for different clients then&amp;nbsp;the&amp;nbsp;approach described above would&amp;nbsp;not work very well, but &lt;a href="http://xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; was designed exactly with this scenario in mind.&amp;nbsp;In just&amp;nbsp;few easy steps you can generate an executable package that embeds the schema of the master&amp;nbsp;database you wish to publish. When the executable is launched on the client's site it will compare the currently installed version with the&amp;nbsp;embedded master schema and synchronize the&amp;nbsp;target to the master. While doing that it will generate a detailed&amp;nbsp;synchronization log and automatically email it back&amp;nbsp;to you so that you know what happened when the client ran the upgrade.&amp;nbsp;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&amp;nbsp;If you happened to have access to all your clients' databases then you can easily manage this from your location. Use &lt;a href="http://xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; to generate synchronization scripts for upgrading from version x to the current version, then use &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; to create a deployment package - basically add all your target servers (databases) into database groups, add your sync scripts into script containers and then map script containers to databases and execute ALL with a click of a button. &lt;/li&gt;&lt;/ol&gt;If you happen to face a scenario not covered by the above options please do let us know. &lt;br /&gt;&lt;br /&gt;Applies to: &lt;br /&gt;&lt;ul&gt;&lt;li&gt;software publishing&lt;/li&gt;&lt;li&gt;publishing database schema changes &lt;/li&gt;&lt;li&gt;synchronizing clients' databases (the schemas) to a master database&lt;/li&gt;&lt;li&gt;comparing and synchronizing database schemas&lt;/li&gt;&lt;li&gt;executing multiple scripts against multiple databases&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-7745936335627938512?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/7745936335627938512/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=7745936335627938512' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7745936335627938512'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7745936335627938512'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/01/publish-database-changes-to-hundreds-of.html' title='Publish database changes to hundreds of clients - software publisher'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1849015359636429517</id><published>2010-01-13T14:29:00.000-08:00</published><updated>2010-01-13T14:43:42.756-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>Execute SQL Scripts on MySQL</title><content type='html'>Executing Sql Scripts against a MySQL database has never been easier, whether you need to execute a single script or many of them in a certain order, whether you need to execute the scripts against a single database or multiple servers/databases at once the best bet is &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt;. The interface is simple and intuitive allowing you to create deployment projects involving hundreds of scripts and hundreds of target databases. Once you have created the project, with a click of a button you can execute them all based on the order you have determined and precedence constraints you may have set.&lt;br /&gt;&lt;br /&gt;You can use Script Executor to execute scripts against MySQL 5.0 and 5.1 databases.&lt;br /&gt;&lt;br /&gt;You can read more and download your trial copy of Script Executor from: &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1849015359636429517?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1849015359636429517/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1849015359636429517' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1849015359636429517'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1849015359636429517'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/01/execute-sql-scripts-on-mysql.html' title='Execute SQL Scripts on MySQL'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8125243567353667591</id><published>2010-01-13T10:18:00.000-08:00</published><updated>2010-01-13T10:25:45.167-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny story'/><title type='text'>Where is Google - a support call</title><content type='html'>(this is a transcript of a January 13, 2010 call to xSQL Software’s support group)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Caller:&lt;/strong&gt; where is SQL Server 2005 SP3 – I can’t find it?&lt;br /&gt;&lt;strong&gt;Support:&lt;/strong&gt; well, we are not Microsoft but I will help you. Please do a Google search for “SQL Server 2005 SP3”, the first item on the list is what you need.&lt;br /&gt;&lt;strong&gt;Caller:&lt;/strong&gt; but I am using Bing, is that a problem?&lt;br /&gt;&lt;strong&gt;Support:&lt;/strong&gt; no, it is not a problem but the results are not necessarily the same and I am not sure if what you are looking for will be the first item on the list, so, why don’t you do this one search on Google?&lt;br /&gt;&lt;strong&gt;Caller:&lt;/strong&gt; but Bing is my default search and I don’t know how to change it!&lt;br /&gt;&lt;strong&gt;Support:&lt;/strong&gt; how about going to google.com first and then doing the search, you will not need to change anything?&lt;br /&gt;&lt;strong&gt;Caller:&lt;/strong&gt; oh, that is a good idea, a no brainer in fact...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8125243567353667591?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8125243567353667591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8125243567353667591' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8125243567353667591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8125243567353667591'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/01/where-is-google-support-call.html' title='Where is Google - a support call'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1402043373733724905</id><published>2010-01-12T13:50:00.000-08:00</published><updated>2010-01-12T13:56:42.692-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Profiler'/><category scheme='http://www.blogger.com/atom/ns#' term='trace SQL Server'/><title type='text'>xSQL Profiler version 1.6 now available for download</title><content type='html'>We have just released a new version of &lt;a href="http://xsqlsoftware.com/Product/xSQL_Profiler.aspx"&gt;xSQL Profiler&lt;/a&gt; that adds the following features:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ability to load the trace data directly to the central repository from a UNC path without having to go through the monitored servers temp db;&lt;/li&gt;&lt;li&gt;the option to set different polling intervals for each trace on each target server; &lt;/li&gt;&lt;li&gt;the option to configure server level traces reducing the number of traces that will need to be started on the monitored servers&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;xSQL Profiler allows you to configure and schedule SQL traces to run simultaneously on multiple servers and automatically collects all trace data into a central repository. &lt;/p&gt;&lt;p&gt;You can download the new version from: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=12&amp;amp;ProdID=xSQLProfiler"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=12&amp;amp;ProdID=xSQLProfiler&lt;/a&gt;  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1402043373733724905?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1402043373733724905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1402043373733724905' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1402043373733724905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1402043373733724905'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/01/xsql-profiler-version-16-now-available.html' title='xSQL Profiler version 1.6 now available for download'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1563607432717107698</id><published>2010-01-11T09:22:00.000-08:00</published><updated>2010-04-19T07:50:55.476-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='udp'/><category scheme='http://www.blogger.com/atom/ns#' term='sql browser service'/><category scheme='http://www.blogger.com/atom/ns#' term='sql server remote connection'/><title type='text'>Trouble connecting to remote SQL Server instance</title><content type='html'>Cannot connect to server1\instance1… SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified…&lt;br /&gt;&lt;br /&gt;From location1, machine1 connects to a remote SQL Server instance, no trouble. Take machine1 move to location2, very similar environment – machine1 fails to connect, the error message is the one above. You verify your SQL Server configuration and everything looks ok, and besides if something was not right you wouldn’t be able to connect from location1 either. So what is the problem?&lt;br /&gt;&lt;br /&gt;It turns out location2 firewall is blocking UDP traffic and that is why you are not being able to connect. When the client sends the request to the server asking to connect to server1\instance1 it is the SQL Browser service (on that server) that handles the request and responds with more detailed information to the client, information that the client needs in order to establish the connection to the server. That communication between the SSMS and the SQL Browser service happens over UDP (port 1434). So, when the UDP traffic is filtered out the client does not hear back from the SQL Browser and consequently is not able to establish the connection.&lt;br /&gt;&lt;br /&gt;So what can you do if you can’t change the firewall configuration? If you know where your SQL Server is listening then all you need to do is specify the protocol and the port number as shown on the pictures below and you will be able to connect – in this case the SQL Browser service is bypassed since the client already has all the info it needs to connect to that SQL Server instance.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_gVoDZlsD5-g/S0tirCmL5eI/AAAAAAAAABY/njZeZ4KRJYw/s1600-h/SQL_Server_Connection_Specify_Port_Number.PNG"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5425538667668825570" src="http://1.bp.blogspot.com/_gVoDZlsD5-g/S0tirCmL5eI/AAAAAAAAABY/njZeZ4KRJYw/s320/SQL_Server_Connection_Specify_Port_Number.PNG" style="cursor: hand; display: block; height: 243px; margin: 0px auto 10px; text-align: center; width: 320px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_gVoDZlsD5-g/S0tiq_WfLtI/AAAAAAAAABQ/9SrHHDB9Y2I/s1600-h/SQL_Server_Connection_Specify_Protocol.PNG"&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5425538666797674194" src="http://4.bp.blogspot.com/_gVoDZlsD5-g/S0tiq_WfLtI/AAAAAAAAABQ/9SrHHDB9Y2I/s320/SQL_Server_Connection_Specify_Protocol.PNG" style="cursor: hand; display: block; height: 320px; margin: 0px auto 10px; text-align: center; width: 274px;" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;What if you don’t know what port SQL Server is listening on? If you can connect from some other location to that server you can try Microsoft’s Port Query utility (this is a great tool for diagnosing your connection problems when you can not connect also) &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=89811747-C74B-4638-A2D5-AC828BDC6983&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=89811747-C74B-4638-A2D5-AC828BDC6983&amp;amp;displaylang=en&lt;/a&gt; they also have a UI add on for this that you can download from here: &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=8355E537-1EA6-4569-AABB-F248F4BD91D0&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=8355E537-1EA6-4569-AABB-F248F4BD91D0&amp;amp;displaylang=en&lt;/a&gt; – it will show you the response from the SQL Browser service indicating which port your SQL Server instance is listening. &lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1563607432717107698?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1563607432717107698/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1563607432717107698' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1563607432717107698'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1563607432717107698'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2010/01/trouble-connecting-to-remote-sql-server.html' title='Trouble connecting to remote SQL Server instance'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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/_gVoDZlsD5-g/S0tirCmL5eI/AAAAAAAAABY/njZeZ4KRJYw/s72-c/SQL_Server_Connection_Specify_Port_Number.PNG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8214699729339673750.post-6260894616971804753</id><published>2009-12-02T07:19:00.000-08:00</published><updated>2009-12-02T07:30:17.871-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='schema snapshot'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><title type='text'>Backup database structure only</title><content type='html'>Sometimes you need to back up the database structure (schema) only – it can be because you simply would like to maintain an audit trail of database schema changes or because you need to compare the schemas of two databases that you can’t access directly from one location.&lt;br /&gt;&lt;br /&gt;Whatever your reasons maybe &lt;a href="http://xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; provides the ideal solution to accomplish this – with a click you can take a snapshot of the SQL Server database schema. The schema snapshot contains all the schema information but no data and consequently is a very small size file. You can then use &lt;a href="http://xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; to compare this schema snapshot to other snapshots or to live databases and see exactly what changed from one schema version to another.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6260894616971804753?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6260894616971804753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6260894616971804753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6260894616971804753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6260894616971804753'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/12/backup-database-structure-only.html' title='Backup database structure only'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-7245303314960514570</id><published>2009-11-24T18:14:00.000-08:00</published><updated>2009-11-24T18:24:12.488-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='t-sql'/><category scheme='http://www.blogger.com/atom/ns#' term='date functions'/><title type='text'>T-SQL: set end date to first or fifteenth of the month</title><content type='html'>Here is a simple assignment: if the subscription date is from first to 15th of the month then the expiration date should be set to the 15th of the same month a number of years later; if the subscription date is from 16th to the end of the month then the expiration date should be set to the first of the following month a given number of years later.&lt;br /&gt;&lt;br /&gt;I am sure there are many ways to do this but here is one:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;DECLARE @sDate DATETIME -- subscription date&lt;br /&gt;DECLARE @sYears tinyint -- number of years the subscription will last&lt;br /&gt;SET @sDate = getdate()&lt;br /&gt;SET @sYears = 1&lt;br /&gt;&lt;br /&gt;IF datepart(dd, @sDate) &lt;= 15&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;  SELECT DATEADD(year, @sYears, @sDate) - datepart(dd, @sDate) + 15 &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;ELSE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:75%;"&gt;  SELECT DATEADD(year, @sYears, DATEADD(mm, DATEDIFF(m,0,@sDate)+1,0))&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-7245303314960514570?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/7245303314960514570/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=7245303314960514570' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7245303314960514570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7245303314960514570'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/11/t-sql-set-end-date-to-first-or.html' title='T-SQL: set end date to first or fifteenth of the month'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2158122778936981037</id><published>2009-11-24T09:14:00.000-08:00</published><updated>2009-11-24T09:25:01.830-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>Script Executor - package t-sql scripts into executables</title><content type='html'>In addition of allowing you to deploy multiple scripts to multiple databases directly from the interface &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; also allows you to package all your scripts into an executable.&lt;br /&gt;&lt;br /&gt;An executable package in the context of the &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; is a small, dynamically generated executable file that contains embedded in it scripts, list of databases against which the scripts will be executed, and a small piece of code to run these scripts. You can run it as you would run any other Windows program.&lt;br /&gt;&lt;br /&gt;Executable packages are suited for deploying Sql script to the end-users/clients. A user can run it without having &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt;, or SSMS installed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2158122778936981037?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2158122778936981037/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2158122778936981037' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2158122778936981037'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2158122778936981037'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/11/script-executor-package-t-sql-scripts.html' title='Script Executor - package t-sql scripts into executables'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8654254431532463507</id><published>2009-11-23T07:48:00.000-08:00</published><updated>2009-11-23T07:53:52.636-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deploy scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='execute multiple scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>SQL Server execute scripts - multiple scripts, multiple databases</title><content type='html'>You launch SQL Server Management Studio – open script #1 and execute it against database 1 on SQL Server 1, then execute it against database 1 on SQL Server 2… then open t-sql script #2 and execute it against database 1 on SQL Server 1 etc… what a painful process, you dread the day you have to go through this (sometimes that is everyday). What a waste of resources too – a $100K database administrator spending hours executing scripts on tenths of server!&lt;br /&gt;&lt;br /&gt;No more! You can now use &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; to take care of this job for you. One time only, you will go through a simple, and may I suggest fun, process of organizing your scripts into virtual containers and your databases into groups; then, map those script containers to the database groups; set an order of precedence if you need to and voila you have a package that you can now execute with a single click; or, you can even schedule it to run before you even make it to the office.&lt;br /&gt;&lt;a href="http://3.bp.blogspot.com/_gVoDZlsD5-g/SwqvpX-NkYI/AAAAAAAAABI/O5fGBNedVSM/s1600/Executor_Lic_Big.jpg"&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 263px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5407327427956150658" border="0" alt="" src="http://3.bp.blogspot.com/_gVoDZlsD5-g/SwqvpX-NkYI/AAAAAAAAABI/O5fGBNedVSM/s320/Executor_Lic_Big.jpg" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; will execute each script in the order you have defined against each database based on the mappings you have defined and once completed it will generate a comprehensive report allowing you to see how the script execution went on each target and also easily “flip through” the result sets that those scripts may generate.&lt;br /&gt;&lt;br /&gt;Deploying (executing) multiple scripts against multiple SQL Server databases has never been easier.&lt;br /&gt;&lt;br /&gt;You can download a free trial version of &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; from: &lt;a href="http://xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;http://xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor.aspx"&gt;free community edition&lt;/a&gt; of Script Executor with limited functionality is also available: &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;http://www.xsqlsoftware.com/Download.aspx&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Applies to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;SQL Server execute t-sql scripts&lt;/li&gt;&lt;li&gt;SQL Server execute multiple scripts&lt;/li&gt;&lt;li&gt;SQL Server deploy scripts to multiple databases&lt;/li&gt;&lt;li&gt;SQL Server package t-sql scripts&lt;/li&gt;&lt;li&gt;SQL Server run multiple scripts&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8654254431532463507?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8654254431532463507/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8654254431532463507' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8654254431532463507'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8654254431532463507'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/11/sql-server-execute-scripts-multiple.html' title='SQL Server execute scripts - multiple scripts, multiple databases'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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/_gVoDZlsD5-g/SwqvpX-NkYI/AAAAAAAAABI/O5fGBNedVSM/s72-c/Executor_Lic_Big.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8214699729339673750.post-9217039061995959106</id><published>2009-11-17T08:10:00.000-08:00</published><updated>2009-11-17T08:15:50.895-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zune'/><category scheme='http://www.blogger.com/atom/ns#' term='kindle'/><category scheme='http://www.blogger.com/atom/ns#' term='promo'/><category scheme='http://www.blogger.com/atom/ns#' term='ipod'/><title type='text'>Kindle, Zune, iPod - a free gift with every purchase</title><content type='html'>This month only we are giving away a free cool gift with every license purchase - kindle wireless, Zune, iPod Touch etc. Check out the details here: &lt;a href="http://xsqlsoftware.com/nov_gift_choices.aspx"&gt;http://xsqlsoftware.com/nov_gift_choices.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-9217039061995959106?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/9217039061995959106/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=9217039061995959106' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9217039061995959106'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9217039061995959106'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/11/kindle-zune-ipod-free-gift-with-every.html' title='Kindle, Zune, iPod - a free gift with every purchase'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2051404982407161058</id><published>2009-10-16T14:12:00.000-07:00</published><updated>2009-11-03T09:43:44.011-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bing'/><category scheme='http://www.blogger.com/atom/ns#' term='yahoo'/><category scheme='http://www.blogger.com/atom/ns#' term='search engine'/><title type='text'>Is Bing beating Yahoo already?</title><content type='html'>Looking at our site stats today I was surprised to see that in the last 30 days we have received about 20% more “organic” visitors from Bing than from Yahoo! Is this just an aberration or is Bing already beating Yahoo? What you seeing on your site? Please answer the poll on the right panel here and leave your comments below.&lt;br /&gt;&lt;br /&gt;The poll has been closed - the final result was 60% for Bing and 40% for Yahoo however, the number of responses we got was statistically insignificant so I would put no stock on these results.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2051404982407161058?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2051404982407161058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2051404982407161058' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2051404982407161058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2051404982407161058'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/10/is-bing-beating-yahoo-already.html' title='Is Bing beating Yahoo already?'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-3866586509606251573</id><published>2009-10-02T10:43:00.000-07:00</published><updated>2009-10-02T11:16:54.654-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL puzzles'/><title type='text'>$100 for your SQL puzzle</title><content type='html'>We are planning to bring back the “puzzle of the month” program and this time the puzzles will come from you. We are asking you to &lt;a href="http://www.xsqlsoftware.com/Submit_SQL_Puzzle.aspx"&gt;send us the hardest SQL puzzles&lt;/a&gt; you have come across or that you can come up with.&lt;br /&gt;&lt;br /&gt;If your puzzle is chosen to be published on our site we will:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Send you a $100&lt;/li&gt;&lt;li&gt;Link from the puzzle page to your blog or your site&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The harder your puzzle the higher the chances that it will be picked, however,  &lt;br /&gt;&lt;br /&gt;The puzzles should fall into one or more of the following categories: SQL Server, T-SQL, Database Management Systems&lt;/p&gt;&lt;p&gt;Submit your puzzle here: &lt;a href="http://www.xsqlsoftware.com/Submit_SQL_Puzzle.aspx"&gt;http://www.xsqlsoftware.com/Submit_SQL_Puzzle.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3866586509606251573?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3866586509606251573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3866586509606251573' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3866586509606251573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3866586509606251573'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/10/100-for-your-sql-puzzle.html' title='$100 for your SQL puzzle'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-248870948116311520</id><published>2009-09-17T14:18:00.000-07:00</published><updated>2009-09-17T14:20:45.682-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Product Review'/><title type='text'>To pay or not to pay this is the question</title><content type='html'>Product reviews are absolutely critical to the success or failure of a product and that is especially true in the software world. Trying a software product takes effort and precious time so we all naturally gravitate towards relying on product reviews that others have done and only take the time to try one or two products that may have been heavily and positively reviewed.&lt;br /&gt;&lt;br /&gt;Knowing how important those reviews are we have sent tenths of product review requests in the last 6 years and in the process we have learned the unsettling truth about product reviews: they don’t come by easily. In the case of the big guys (technical magazines and large user group sites) you don’t have to pay for the product review per-say but your product will forever be in the queue unless you are shelling out a few thousand advertising dollars in those medias, only then does your product magically shoot up to the top of the product review queue; whereas in the case of the smaller guys (bloggers and user group contributors) you often have to pay for the review anywhere from a set price of as low as $200 for one product review to a per word price that can be as high as $0.6 per word (this is the highest product review offer we have received).&lt;br /&gt;&lt;br /&gt;In the case of the big guys since you are not paying directly for the product review there is no moral dilemma – deep down you know that the review can’t possibly be fair and un-biased. If you are paying $30K / year for advertisements on that media the last thing they would want to do is alienate you with a bad product review, but, it’s easy to shun those thoughts, after all this is your product and you truly believe that it is a great product.&lt;br /&gt;&lt;br /&gt;On the other hand, when it comes to paying for the review directly it feels like cheating and unfair to the reader who believes that he is reading an impartial review. For it to feel right one must disclose in big bold letters that “this review has been paid for by the product vendor…”, but such disclosure would likely deem the review worthless. Ideally you would want someone to review your product simply because they like the product and they want to share it with other people but in all fairness reviewing a software product and then writing up your observations and conclusions may take hours of work of which we humans have a very limited supply of. Herein lies our dilemma – to pay or not to pay?&lt;br /&gt;&lt;br /&gt;Until now we have chosen not to pay, instead we have only offered the reviewers a free license for the product they decide to review which we think is fair and does not present a conflict of interest. We would certainly be more comfortable continuing with this approach but the results are not very promising hence our pondering.&lt;br /&gt;&lt;br /&gt;Let us know what you think – would you pay?&lt;br /&gt;&lt;br /&gt;And of course, we would be delighted if you would consider reviewing any of our &lt;a href="http://www.xsqlsoftware.com/"&gt;fine products&lt;/a&gt; in exchange for a free license.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-248870948116311520?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/248870948116311520/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=248870948116311520' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/248870948116311520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/248870948116311520'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/09/to-pay-or-not-to-pay-this-is-question.html' title='To pay or not to pay this is the question'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1138864634475401891</id><published>2009-09-02T13:50:00.000-07:00</published><updated>2012-01-30T07:43:36.357-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='synchronize database schema'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><category scheme='http://www.blogger.com/atom/ns#' term='deploy schema changes'/><title type='text'>Synchronize two SQL Server databases</title><content type='html'>You are furiously pounding code on your computer and in the meantime making small changes to the local (development) version of the database as the need arises – add a column, change the type and width of another, add a view, make a change to a stored procedure and so on. At some point in the early morning hours as the World wakes up you are ready to publish your work on the production server, somewhere… – just a few clicks and the early risers will see your masterpiece (application) in action. Well, not so fast unfortunately, all those changes you made to the development database must be made to the production database otherwise your application is not going to work, is it? Now, that is some painful and tedious work to say the least. What if you forget something? And here is a twist to make this a real nightmarish scenario – remember last week when the client needed those urgent changes and you were forced to do the “unthinkable” – make changes right on the production database! Worst yet, you realize that you never got around to bringing those changes down to your local, development database – no words can describe the pain you must feel at that moment!&lt;br /&gt;&lt;br /&gt;Is this time for panic? No it is not, it is time for &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; – in just a few clicks it will show you exactly where the differences are on both sides and better yet auto-generate the scripts that you need to quickly and safely make the changes.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/download/package.aspx?packageid=10"&gt;Download it now&lt;/a&gt; and eliminate “the pain” – free lite edition with no strings attached. Supports SQL Server 2000, SQL Server 2005 and SQL Server 2008.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1138864634475401891?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1138864634475401891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1138864634475401891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1138864634475401891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1138864634475401891'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/09/synchronize-two-sql-server-databases.html' title='Synchronize two SQL Server databases'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1750445440711491733</id><published>2009-08-28T07:41:00.000-07:00</published><updated>2009-08-28T07:54:07.484-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deploy scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='execute multiple scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='sctipt executor'/><title type='text'>Best way to execute t-sql scripts</title><content type='html'>Whether you need to deploy / execute multiple t-sql scripts to hundreds of your clients or to hundreds of your enterprise servers &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; is your best bet. For starters, it supports SQL Server 2000/2005/2008, MySql  5.0 and higher, DB2 9.0 and SQL Server Compact 3.5. It allows you to quickly organize your scripts into virtual script containers and organize your servers into virtual server groups. You can then map the script containers to the server groups, define execution precedence if necessary, and finally just deploy them OR package the scripts into an executable. Imagine, instead of sending your clients t-sql scripts and telling them to download and install Sql Server Management Studio so that they can run your scripts you can just send them an executable file that anyone can run - no that's easy!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1750445440711491733?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1750445440711491733/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1750445440711491733' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1750445440711491733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1750445440711491733'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/08/best-way-to-execute-t-sql-scripts.html' title='Best way to execute t-sql scripts'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4098398496548288805</id><published>2009-07-31T06:57:00.000-07:00</published><updated>2009-08-28T06:52:13.555-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><title type='text'>New build of xSQL Bundle available</title><content type='html'>A new build of xSQL Bundle that includes &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Schema_Compare.aspx"&gt;xSQL Object&lt;/a&gt; for database schema comparison and synchronization and &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; for comparing and synchronizing data is available for download from: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBundle"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=10&amp;amp;ProdID=xSQLBundle&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The new build adds the ability to include and exclude object level permissions from the synchronization. Permissions are now shown under each object they're granted to or denied on. Statement permissions are listed under the database node in the comparison grid.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4098398496548288805?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4098398496548288805/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4098398496548288805' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4098398496548288805'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4098398496548288805'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/07/new-buuild-of-xsql-bundle-available.html' title='New build of xSQL Bundle available'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1793882093985688331</id><published>2009-05-25T13:54:00.000-07:00</published><updated>2009-05-25T14:00:09.487-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Builder'/><title type='text'>xSQL Builder now supports SQL Server 2008</title><content type='html'>The newly released &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder 3.0&lt;/a&gt; now supports SQL Server 2008. xSQL Builder provides for effortless distribution of database changes to remote clients. In just minutes you can create an executable package that contains the schema of the "master" database you wish to propagate to your clients - the client executes the executable and voila, the schema of the client database is upgraded.&lt;br /&gt;&lt;br /&gt;No more sending T-Sql scripts to your clients - send them an executable instead!&lt;br /&gt;&lt;br /&gt;Download your free trial of xSQL Builder now: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=30&amp;amp;ProdID=xSQLBuilder"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=30&amp;amp;ProdID=xSQLBuilder&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1793882093985688331?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1793882093985688331/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1793882093985688331' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1793882093985688331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1793882093985688331'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/05/xsql-builder-now-supports-sql-server.html' title='xSQL Builder now supports SQL Server 2008'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4102173583494594461</id><published>2009-05-06T13:52:00.000-07:00</published><updated>2009-05-06T14:00:06.752-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='database comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object'/><category scheme='http://www.blogger.com/atom/ns#' term='sql tools'/><title type='text'>Right tool for the job - what our customers say</title><content type='html'>It is always nice to see a nice blog post about your products but it is awesome to see a paying customer praising the product without being asked to do that and without asking for any favors in return! I just ran accross one such blog post that was published today:&lt;br /&gt;&lt;a href="http://catholicinformation.aquinasandmore.com/2009/05/06/using-the-right-tools-for-the-job/"&gt;http://catholicinformation.aquinasandmore.com/2009/05/06/using-the-right-tools-for-the-job/&lt;/a&gt; - it is in such cases that we can proudly say: you don't have to listen to us - see &lt;a href="http://catholicinformation.aquinasandmore.com/2009/05/06/using-the-right-tools-for-the-job/"&gt;what others are saying...&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4102173583494594461?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4102173583494594461/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4102173583494594461' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4102173583494594461'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4102173583494594461'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/05/right-tool-for-job-what-our-customers.html' title='Right tool for the job - what our customers say'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-9212515770762187955</id><published>2009-03-26T11:39:00.000-07:00</published><updated>2009-03-26T11:41:00.979-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='execute scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><title type='text'>Execute Sql Scripts on DB2</title><content type='html'>Whether you need to execute one Sql Script on a &lt;strong&gt;DB2 database&lt;/strong&gt; or many &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Sql Scripts&lt;/a&gt; on one or many DB2 databases there is one solution unlike any other – Script Executor. Its simple and intuitive interface allows you to create deployment projects involving hundreds of scripts and hundreds of target databases and then with a click of a button execute them all based on the order you have determined and precedence constraints you may have set.&lt;br /&gt;&lt;br /&gt;You can use &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; to execute scripts against &lt;strong&gt;DB2 9.0 databases&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;You can read more and download your trial copy of Script Executor from: &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-9212515770762187955?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/9212515770762187955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=9212515770762187955' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9212515770762187955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9212515770762187955'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/03/execute-sql-scripts-on-db2.html' title='Execute Sql Scripts on DB2'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4133503426543542511</id><published>2009-03-25T08:35:00.000-07:00</published><updated>2009-03-25T08:38:17.902-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL CE'/><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><title type='text'>Script Executor now supports DB2 and SQL Server Compact</title><content type='html'>we just released a new version of &lt;a title="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx" href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; which now in addition of SQL Server 2008/2005/2000 and MySQL 5.0/5.1 also supports DB2 9.0 and SQL Server Compact Edition 3.5.&lt;br /&gt;&lt;br /&gt;Script Executor provides for deploying Sql Scripts to multiple target databases with a click of a button and allows you to:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;organize target databases into logical groups &lt;/li&gt;&lt;li&gt;organize your Sql Scripts into containers and order scripts within each container &lt;/li&gt;&lt;li&gt;map script containers to database groups &lt;/li&gt;&lt;li&gt;order mappings and set precedence constraints &lt;/li&gt;&lt;li&gt;get a comprehensive execution report &lt;/li&gt;&lt;li&gt;view execution results in one integrated easy to navigate interface &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Download your trial copy today from: &lt;a title="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=" prodid="ScriptExecutorLic" href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic&lt;/a&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4133503426543542511?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4133503426543542511/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4133503426543542511' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4133503426543542511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4133503426543542511'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/03/script-executor-now-supports-db2-and.html' title='Script Executor now supports DB2 and SQL Server Compact'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6947670776056693981</id><published>2009-03-09T14:35:00.000-07:00</published><updated>2009-03-09T14:49:37.884-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='independent consultant'/><category scheme='http://www.blogger.com/atom/ns#' term='full time employee'/><title type='text'>Independent consultants can quickly translate hours saved to dollars - employees can't</title><content type='html'>One would think (or at least I thought) that when it comes to selling auxiliary &lt;a href="http://www.xsqlsoftware.com/"&gt;software tools&lt;/a&gt; it would be easier to sell them to an organization where the buyer is using the organization’s funds to purchase the product than to an independent consultant who has to shell out his own money. However having spent the last 5 years in the SQL tools market I have concluded that the opposite is true – generally speaking the independent consultants do not need much convincing, whereas the full time dba/developer in an organization seems to have a much harder time making a $300 decision!&lt;br /&gt;&lt;br /&gt;So, that got me thinking: why would someone readily pay a few hundred dollars from his own pocket for one of &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;our tools&lt;/a&gt; while a full time employee seems to struggle to make up his mind and appears to be constantly looking to come up with unusual scenarios that the off the shelf tool may not handle? I have come up with three main reasons (not necessarily an exhaustive list of reasons):&lt;br /&gt;&lt;ol&gt;&lt;li&gt;the value preposition for the independent consultant is very clear – every hour of their time has a price tag – if they find a tool that saves them 1 hour per day they can quickly translate that saved hour into dollars. On the other hand a full time employee can not easily convert “hours saved” to money, nor can his boss or the boss’ boss. &lt;/li&gt;&lt;li&gt;The bureaucracy that plagues many organizations significantly dilutes the short term value of such tools - if you as an employee are forced to go through hoops to get approval for purchasing a $300 product that will potentially save you a couple of hours per week then you may decide it is not worth the pain. The independent consultant on the other hand does not need to ask for permission from anyone so there are no “costs” associated with the approval process. &lt;/li&gt;&lt;li&gt;A programmers ego: “I can do this stuff myself, why should I pay someone else to do it for me” When it comes to productivity an independent consultant can not afford to have an ego whereas a full time employee can and furthermore, by building a custom solution instead of buying an off the shelf tool the full time programmer will likely consolidate his position with the company. A lot of you may be surprised but I have found that it is often easier to convince the higher ups to let you put 100 hours on a project than convince them to let you spend $300 on a tool. &lt;/li&gt;&lt;/ol&gt;&lt;p&gt;Please note that this is not a “research based” conclusion – it is simply an opinion supported by personal experiences. Please feel free to add your perspective on this and don't forget to check out &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;our tools&lt;/a&gt; - you don't even have to pay anything in some cases. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6947670776056693981?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6947670776056693981/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6947670776056693981' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6947670776056693981'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6947670776056693981'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/03/independent-consultant-vs-full-time.html' title='Independent consultants can quickly translate hours saved to dollars - employees can&apos;t'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-9086982297408041688</id><published>2009-03-06T08:28:00.000-08:00</published><updated>2009-03-06T15:11:18.855-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>A real life Sql scripts deployment story</title><content type='html'>We got a surprise call today - a client that just purchased a license for the newly released &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; called to thank us (normally we thank our customers for choosing our products not the other way around)! He told us that for more than 2 years one of his most annoying weekly "chores" was to execute about 120 Sql scripts on a handful of SQL servers. The task was complicated by the dependencies between those Sql scripts - a set of scripts had to execute on Server 1 successfully before another set could be executed on Server 2 and so on. And of course within each set the scripts had to execute on a certain order. So every week he would consume many hours of his life opening and executing those 120 Sql scripts one after the other.&lt;br /&gt;&lt;br /&gt;For the last few months he was using the free community edition of our &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor.aspx"&gt;Script Executor&lt;/a&gt; and it had helped him a lot but it wasn't exactly what he wanted whereas the new &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor 3&lt;/a&gt; gave him exactly what he needed - he spent about 15 minutes configuring his Sql script deployment package and saved the project. Now, all he needs to do is click Execute and a task that once took hours takes him one minute to launch and about 10 - 15 minutes to review the results.&lt;br /&gt;&lt;br /&gt;His words: "&lt;em&gt;I would have gladly paid the $179 from my pocket if the company would not have approved the purchase. Thank you for an awesome product!&lt;/em&gt;"&lt;br /&gt;&lt;br /&gt;Well, thank you! For us there is nothing better than knowing that our work is providing real value to others.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-9086982297408041688?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/9086982297408041688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=9086982297408041688' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9086982297408041688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9086982297408041688'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/03/real-life-sql-scripts-deployment-story.html' title='A real life Sql scripts deployment story'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1092535779236553824</id><published>2009-03-04T09:20:00.000-08:00</published><updated>2009-03-04T09:30:21.590-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='precedence constraint'/><category scheme='http://www.blogger.com/atom/ns#' term='execution order'/><title type='text'>Execution order and precedence</title><content type='html'>In addition of allowing the user to organize Sql scripts in containers and ordering the scripts within each container the new &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor 3&lt;/a&gt; allows the user to also order and set precedence constraints between “mappings”. In other words you may want scripts on the script container 1 to execute against the databases in the database group 1 first and only if those all succeed then execute the scripts in container 2 against database group 2 etc.&lt;br /&gt;&lt;br /&gt;This cool feature allows the user to configure highly complex deployment scenarios involving dependencies between scripts and groups of scripts. The picture below shows where the Execution order and precedence constraint can be set for a given mapping.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://1.bp.blogspot.com/_gVoDZlsD5-g/Sa66aZAnQgI/AAAAAAAAAAc/gTJZLSYC_ts/s1600-h/ScriptExecutor3_ExecutionOrder.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5309385973269217794" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 269px; TEXT-ALIGN: center" alt="" src="http://1.bp.blogspot.com/_gVoDZlsD5-g/Sa66aZAnQgI/AAAAAAAAAAc/gTJZLSYC_ts/s320/ScriptExecutor3_ExecutionOrder.jpg" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt; &lt;/div&gt;&lt;br /&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/8214699729339673750-1092535779236553824?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1092535779236553824/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1092535779236553824' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1092535779236553824'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1092535779236553824'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/03/execution-order-and-precedence.html' title='Execution order and precedence'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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/_gVoDZlsD5-g/Sa66aZAnQgI/AAAAAAAAAAc/gTJZLSYC_ts/s72-c/ScriptExecutor3_ExecutionOrder.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8214699729339673750.post-6296022703093281113</id><published>2009-02-27T11:10:00.000-08:00</published><updated>2009-02-27T11:12:20.322-08:00</updated><title type='text'>The 7 countries that have “lost the number” of our site!</title><content type='html'>-- sorry Mr. Biden, I just couldn’t resist!&lt;br /&gt;&lt;br /&gt;Every time I look at the World map on google analytics, that cool map that shows where the visitors came from, I see a handful of white spots – that is countries from which we did not have any visitors in the last 30 days. I am always curious to know which ones those countries are but they are usually on the same general area so I don’t often drill down. Today it occurred to me that it would be interesting to go back in time and see if there were any countries from which no one ever visited our website – I set the range from January 1, 2008 to today and found that in those 14 months we have not had a single visitor from 7 countries out of 200 and some countries. And the “winners” are:&lt;br /&gt;&lt;br /&gt;From Africa&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Burkina Faso&lt;/li&gt;&lt;li&gt;Central African Republic&lt;/li&gt;&lt;li&gt;Madagascar&lt;/li&gt;&lt;li&gt;Mauritania&lt;/li&gt;&lt;li&gt;Western Sahara&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;From Asia: &lt;/p&gt;&lt;ul&gt;&lt;li&gt;Kyrgyzstan&lt;/li&gt;&lt;li&gt;Turkmenistan&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Please do keep in mind that our website: &lt;a href="http://www.xsqlsoftware.com/"&gt;http://www.xsqlsoftware.com&lt;/a&gt; is a niche site providing database tools to database administrators and software developers and therefore, this “finding” does not necessarily mean anything. I just found this interesting and decided to share with ya’ll! &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6296022703093281113?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6296022703093281113/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6296022703093281113' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6296022703093281113'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6296022703093281113'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/02/7-countries-that-have-lost-number-of.html' title='The 7 countries that have “lost the number” of our site!'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8716359446784154209</id><published>2009-02-27T08:09:00.001-08:00</published><updated>2009-02-27T08:18:20.160-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='execute multiple scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>Executing multiple Sql Scripts</title><content type='html'>If you work with SQL Server and especially if your job includes DBA tasks it is very likely that you have run into situations when you had to take a bunch of scripts (maybe tenths of them and maybe hundreds) and execute them in a certain order one after the other against a database. It is a tedious task to say the least. Now imagine if you had to do the same thing for 10 servers or 100 servers then you are really in trouble - there comes a point when it will be more efficient for you to sit down and write an application that will help you automate the process then do this job even once.&lt;br /&gt;&lt;br /&gt;Well, you don't have to go through that annoying process anymore - with &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt;, in just minutes, you can configure a highly complex scenario involving hundreds of scripts and tenths of target servers after which your highly complex deployment will require just one click or even none if you use the command line utility.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;Download&lt;/a&gt; Script Executor now and see for yourself why we are so excited about it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8716359446784154209?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8716359446784154209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8716359446784154209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8716359446784154209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8716359446784154209'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/02/executing-multiple-sql-scripts.html' title='Executing multiple Sql Scripts'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1249720586703170706</id><published>2009-02-25T16:06:00.000-08:00</published><updated>2009-02-25T16:09:46.820-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><title type='text'>Where do MySQL users congregate?</title><content type='html'>&lt;p&gt;We are kind of new to the MySQL world and are trying to figure out what are THE "places" to go if you want to reach MySQL users. Our tools are primarily SQL Server tools but we have just released a new tool, &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; that supports MySQL as well. The tool in a nutshell allows the user to execute Sql Scripts against multiple MySQL databases – it is a great tool for any database administrator or developer that works with MySQL. We are looking for two things:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;users who would be willing to review the product&lt;/li&gt;&lt;li&gt;web destinations where we should advertise &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;So, if you are either someone interested in reviewing &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor&lt;/a&gt; or someone who knows where we should advertise please email us at our info address on our xsqlsoftware.com domain or simply put a comment here. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1249720586703170706?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1249720586703170706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1249720586703170706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1249720586703170706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1249720586703170706'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/02/where-do-mysql-users-congregate.html' title='Where do MySQL users congregate?'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6545663701077659099</id><published>2009-02-24T05:37:00.001-08:00</published><updated>2009-02-24T05:43:48.322-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='deploy scripts'/><category scheme='http://www.blogger.com/atom/ns#' term='Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>The Script Executor you have been waiting for</title><content type='html'>We have just released &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor_Licensed.aspx"&gt;Script Executor 3&lt;/a&gt; with support for &lt;strong&gt;SQL Server&lt;/strong&gt; and &lt;strong&gt;MySQL &lt;/strong&gt;- deploying your Sql Scripts to multiple target servers has never been easier. &lt;br /&gt;&lt;br /&gt;The previos version of Script Executor has been renamed to "Script Executor Community Edition" and will continue to be available free of charge from our website.&lt;br /&gt;&lt;br /&gt;Check the new Script Executor out - you will be impressed!&lt;br /&gt;&lt;br /&gt;Download your free trial now: &lt;a href="http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic"&gt;http://www.xsqlsoftware.com/DownloadDetails.aspx?PackageID=40&amp;amp;ProdID=ScriptExecutorLic&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6545663701077659099?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6545663701077659099/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6545663701077659099' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6545663701077659099'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6545663701077659099'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/02/script-executor-you-have-been-waiting.html' title='The Script Executor you have been waiting for'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-826260647219610972</id><published>2009-02-04T08:40:00.000-08:00</published><updated>2009-02-04T08:42:38.699-08:00</updated><title type='text'>Best way to compare data in two SQL Server databases</title><content type='html'>&lt;p&gt;So you need to compare the data in two SQL Server databases – maybe just the data in certain tables, maybe certain rows only and maybe you are just interested in certain columns. And what if the tables you need to compare don’t have a primary key defined (well, they all should but it is not rare to see cases when they don’t) how can you approach the task? A quick search on google will reveal an abundance of tools all claiming to do what you need so how do you know which one to pick?&lt;br /&gt;&lt;br /&gt;We have made the task simple for you. We have tested every single one of those tools and the bad news is that with the majority of them you would be wasting your time. There are only very few that do the job right and we are happy and proud to say that &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; is the best tool you will find in terms of breadth of functionality it provides, flexibility it gives the user, performance with large databases and last but not lease cost. No, you don’t have to take our word for it – we have thousands of very happy users the majority of which have not had to pay a dime for it. You see,  &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; is completely free for SQL Server Express with no restrictions and it is also free for other editions of SQL Server as long as the databases being compared don’t have more than a certain number of objects.&lt;br /&gt;&lt;br /&gt;Here are some highlights of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt;:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You can compare the data in two sql server databases or just select tables in those databases;&lt;/li&gt;&lt;li&gt;You can map tables to be compared any way you want regardless of the table names;&lt;/li&gt;&lt;li&gt;If &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; can’t find a predefined unique key on a table it allows you to define it on the fly as a combination of one ore more columns in that table;&lt;/li&gt;&lt;li&gt;You can set filters on each table if you wish to compare only a subset of the rows;&lt;/li&gt;&lt;li&gt;You can include or exclude columns from the comparison;&lt;/li&gt;&lt;li&gt;You can choose to use bulk insert for the synchronization if you expect that a large number of rows will need to be inserted in the target table. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; supports SQL Server 2008, SQL Server 2005 and SQL Server 2000.&lt;br /&gt;&lt;br /&gt;You can download your copy from: &lt;a href="http://www.xsqlsoftware.com/download.aspx"&gt;http://www.xsqlsoftware.com/download.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-826260647219610972?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/826260647219610972/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=826260647219610972' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/826260647219610972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/826260647219610972'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/02/best-way-to-compare-data-in-two-sql.html' title='Best way to compare data in two SQL Server databases'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-3271963241446049233</id><published>2009-02-03T05:55:00.000-08:00</published><updated>2009-02-03T05:57:27.935-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='my sql'/><category scheme='http://www.blogger.com/atom/ns#' term='search objects in SQL Server 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='db2'/><category scheme='http://www.blogger.com/atom/ns#' term='xsql documenter'/><category scheme='http://www.blogger.com/atom/ns#' term='oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='document database'/><title type='text'>Documenting your databases – one tool does it all</title><content type='html'>Documenting anything is usually a painful task that everybody talks about but no one likes to do. I have seen one client after another with virtually no database documentation and no awareness of the incredible amount of time that especially newcomers spend on understanding how the objects relate to each other, how the data is stored, and what kind of constraints they need to be aware of!&lt;br /&gt;&lt;br /&gt;Here is a perfect excuse that I have heard way too often: “by the time we are done documenting things have already changed so the documentation becomes outdated before it is even completed”. That might have been true in the distant past but not any more. With the right tool you can document your databases like SQL Server, DB2, Oracle, MySQL, Informix virtually any platform, in minutes – you can even create a job that automatically updates the documentation every day. One of the best tools out there to do the job is &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter&lt;/a&gt; which allows you to simultaneously generate compiled CHM and / or HTML documentation for all your databases.&lt;br /&gt;&lt;br /&gt;What’s even better, a great tool like this does not cost a fortune – for less than $200 you will get an incredible tool that will save your organization hundreds of hours of work.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter&lt;/a&gt; supports the following platforms: SQL Server, Oracle, DB2, MySQL, Informix IDS, Sybase ASE, Sybase SQL Anywhere, PostgreSQL, Access, VistaDB, ENEA Polyhedra;&lt;br /&gt;&lt;br /&gt;You can download your copy of &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter&lt;/a&gt; from &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;http://www.xsqlsoftware.com/Download.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-3271963241446049233?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/3271963241446049233/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=3271963241446049233' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3271963241446049233'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/3271963241446049233'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/02/documenting-your-databases-one-tool.html' title='Documenting your databases – one tool does it all'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-7752343657377204333</id><published>2009-01-29T07:53:00.000-08:00</published><updated>2009-02-04T15:05:28.714-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='stimulus bill'/><title type='text'>What’s the interest on the $819B stimulus bill?</title><content type='html'>Assuming that the government would be able to finance the &lt;a href="http://www.cnn.com/2009/POLITICS/01/29/stimulus.next/index.html"&gt;stimulus bill&lt;/a&gt; by selling &lt;strong&gt;$819B&lt;/strong&gt; worth of Treasury bonds at let’s say &lt;strong&gt;4.5%&lt;/strong&gt; to the Chinese government and others the &lt;strong&gt;yearly interest&lt;/strong&gt; WE will pay on those bonds is just about &lt;strong&gt;$36.9 billion&lt;/strong&gt; for a 30 year total of &lt;strong&gt;$1,105,650,000,000&lt;/strong&gt; – that would be about &lt;strong&gt;$1.1 trillion dollars&lt;/strong&gt; in case you are having trouble reading that number. And just in case you are trying to envision what $1 trillion dollars look like check this out: &lt;a href="http://www.cnn.com/2009/LIVING/02/04/trillion.dollars/index.html"&gt;http://www.cnn.com/2009/LIVING/02/04/trillion.dollars/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;So, what does this have to do with &lt;a href="http://www.xsqlsoftware.com/"&gt;SQL Server tools&lt;/a&gt;? Nothing really other than these numbers are so amazingly big that it is hard to just ignore them and focus on our job which is to build &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;awesome tools&lt;/a&gt; for SQL Server database administrators and developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-7752343657377204333?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/7752343657377204333/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=7752343657377204333' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7752343657377204333'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7752343657377204333'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/whats-interest-on-819b-stimulus-bill.html' title='What’s the interest on the $819B stimulus bill?'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4299496486448582835</id><published>2009-01-28T06:48:00.000-08:00</published><updated>2009-01-28T06:55:06.432-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rss reporter'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server jobs'/><title type='text'>Another presentation on RSS Reporter</title><content type='html'>Chad Miller did another presentation at the SQL Saturday Tampa 2009 focused on RSS enabling System Administration information - utilizing &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Rss_Reporter.aspx"&gt;RSS Reporter&lt;/a&gt; to automate the daily DBA checklist by aggregating job status information from across multiple SQL Servers and databases. More details can be found on Chad's blog: &lt;a href="http://chadwickmiller.spaces.live.com/blog/cns!EA42395138308430!267.trak"&gt;http://chadwickmiller.spaces.live.com/blog/cns!EA42395138308430!267.trak&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4299496486448582835?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4299496486448582835/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4299496486448582835' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4299496486448582835'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4299496486448582835'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/another-presentation-on-rss-reporter.html' title='Another presentation on RSS Reporter'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-5946293739180457404</id><published>2009-01-19T08:23:00.000-08:00</published><updated>2009-01-19T08:25:12.425-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Builder'/><category scheme='http://www.blogger.com/atom/ns#' term='deploy schema changes'/><title type='text'>Deploying database schema changes to hundreds of clients</title><content type='html'>This post is directed to software publishers who have published software that uses SQL Server on the back end. Here is a simple scenario you run into: you release the software and within a couple of months you have successfully deployed it to tenths of customers. In the meantime you have discovered a flaw on a stored procedure which needs to be changed, you want to add a couple of reports for which you need to add a couple of new supporting views, a column on a table needs to be changed from varchar(50) to varchar(100) etc. – you get the picture. The question is: how do you make those changes on all those customers’ sites? You could send them a change script that will alter and add those objects in the database but a lot of the customers don’t know anything about SQL Server and don’t won’t to deal with those scripts. Furthermore, if this is not the first iteration of changes and the customers are using different versions of your database the script you send must be customized for each version. The main point here is that sending the customers a t-sql change script and asking them to apply it is generally not going to work.&lt;br /&gt;&lt;br /&gt;So, what do you do? Well, you use &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; which was designed to alleviate this kind of trouble. &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; is extremely easy to use but at the same time, if your scenario is more complicated it gives you all the flexibility to customize it to best fit your needs. How does it work? You go through a simple wizard that takes no more than a couple of minutes and allows you to choose the source or “master” database which you want to deploy to your customers, set a few parameters and generate an executable package that you can then send to your clients. The client runs the executable which compares the embedded schema of the source/master database with the client’s version of the database, generates a synchronization script, executes the script and emails you the results. Now, you have to admit that is a cool and extremely efficient way to deploy your database schema changes.&lt;br /&gt;&lt;br /&gt;You can download your copy of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Database_Deployment_Builder.aspx"&gt;xSQL Builder&lt;/a&gt; from: &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;http://www.xsqlsoftware.com/Download.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-5946293739180457404?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/5946293739180457404/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=5946293739180457404' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5946293739180457404'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5946293739180457404'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/deploying-database-schema-changes-to.html' title='Deploying database schema changes to hundreds of clients'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6499517679559873814</id><published>2009-01-15T15:59:00.000-08:00</published><updated>2009-01-15T16:01:57.180-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='commit'/><category scheme='http://www.blogger.com/atom/ns#' term='rollback'/><category scheme='http://www.blogger.com/atom/ns#' term='begin transaction'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Wrap your insert, update and delete statements on a transaction – ALWAYS</title><content type='html'>The main objective of a transaction is to ensure that either every statement within that transaction is executed successfully or none of them. So, you would logically wrap in one transaction related statements that should be executed together. A classic example is that of transferring money from one account to another – the action of subtracting the money from account A must happen together with the action of adding that same amount of money to account B (either both or none) otherwise, if let’s say the system crashed right after subtracting the money from account A and before adding them to account B the money will disappear! So, great, when one understands this a legitimate question comes to mind – what’s the point of wrapping a single statement in a transaction?&lt;br /&gt;&lt;br /&gt;Well, we are humans and as such we are prone to making mistakes, sometimes, big and costly mistakes so, wouldn’t it be nice to “erase” our mistakes when we realize that? That’s what a simple Begin Transaction statement provides us – the ability to rollback our mistakes. How does one realize that he made a mistake – the first indicator is the “number of rows effected” which SQL Server reports – if that number is larger than you expected then maybe you made a mistake on your statement. How else can I tell? The cool thing is that SQL Server will let you read the uncommitted rows and see what your statement did - so you can issue a select and review the rows you just updated for example. If you do realize that you made a mistake you simply issue a rollback and all is good – it is like it never happened. If you are sure your statement did what you intended it to do then you issue a commit transaction and the changes you just made become permanent.&lt;br /&gt;&lt;br /&gt;So again, be diligent and wrap every update, delete or insert statement in a begin transaction / rollback / commit transaction. It is much better to be safe then sorry!&lt;br /&gt;&lt;br /&gt;Applies to: SQL Server, SQL Server Mangement Studio, Query Analyzer&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6499517679559873814?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6499517679559873814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6499517679559873814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6499517679559873814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6499517679559873814'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/wrap-your-insert-update-and-delete.html' title='Wrap your insert, update and delete statements on a transaction – ALWAYS'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8698744235085562050</id><published>2009-01-14T15:07:00.000-08:00</published><updated>2009-01-14T15:08:19.629-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='query optimizer'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><category scheme='http://www.blogger.com/atom/ns#' term='query governor'/><title type='text'>SQL Server Query Governor way off on its estimates!</title><content type='html'>First of all if you are looking for information on how to set the query governor cost limit option you can go directly to the source: &lt;a href="http://msdn.microsoft.com/en-us/library/ms190419(SQL.90).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms190419(SQL.90).aspx&lt;/a&gt; or to any of the tenths of blogs that seem to have replicated this information word for word. &lt;br /&gt;&lt;br /&gt;So, here is the scenario: as a diligent DBA you audit a SQL Server you just took over and you realize that the query governor cost limit is set to 0 which means in essence that as far as the query governor is concerned any queries can run on the server for as long as they need to run. That’s not good so you go ahead and set a high limit to start with, let’s say 300 seconds. Your thinking is that if a query that is estimated to run for more than 5 minutes ever comes across it should be stopped dead on its tracks before hundreds of calls from angry users reach your desk. To your surprise 5 minutes after you have set that limit you get a call from Jane Doe – she has seen this strange message on her screen she never saw before “you can’t execute this query because it is estimated to take 450 seconds”. Jane assures you that the report she is running usually runs in 5 to 10 seconds!&lt;br /&gt;&lt;br /&gt;You go ahead and raise the limit to 500 seconds – Jane runs the report and sure enough the report takes less than 6 seconds! Something is not right – why is the query optimizer so grossly overestimating the time this query will take to run?&lt;br /&gt;&lt;br /&gt;The answer is simple indeed – remember the query optimizer is estimating - estimates are made based on available information and if the available information is either missing or not accurate than the estimate won’t be accurate. The information that the query optimizer uses is in the statistics that SQL Server maintains and that is where you need to look. So, check it Auto Create Statistics is on first – if not no then you either need to turn it on or manually create the statistics the optimizer needs for estimating this query (this is the case when the necessary statistics information may be missing). Second check if Auto Update Statistics is on – if not you may need to update the stats to enable the query optimizer to produce a more accurate estimate.&lt;br /&gt;&lt;br /&gt;Furthermore, you may find that all is in order that is no statistics are missing and the stats are up to date and yet the estimate is wrong! Try forcing a recompile of the query in question and see what happens. What may have happened is that SQL Server is using a cashed plan that was optimized for the “wrong” parameter values – that is values which are not good representatives of the dataset and based on that plan it is estimating that 10,000 rows will be returned from table a when in fact in 90% of the cases the number of rows returned from table a on that query is under 1000. By forcing a recompile of the query you are forcing SQL Server to re-evaluate and possibly pick a better plan this time based on new parameter values.&lt;br /&gt;&lt;br /&gt;The objective of using the query governor cost option is to prevent “stupid” queries from degrading the system performance and not to prevent legitimate queries from running. So you may be forced to raise the limit but you should look at that as a temporary measure until you have dealt with the legitimate queries by taking the above mentioned actions as well as optimizing the query itself. Then, you should go back and start gradually lowering the query governor cost limit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8698744235085562050?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8698744235085562050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8698744235085562050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8698744235085562050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8698744235085562050'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/sql-server-query-governor-way-off-on.html' title='SQL Server Query Governor way off on its estimates!'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-8733224552504414424</id><published>2009-01-12T11:55:00.000-08:00</published><updated>2009-01-12T11:56:35.745-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server query optimizer'/><category scheme='http://www.blogger.com/atom/ns#' term='sql server performance'/><title type='text'>Why is SQL Server scanning the clustered index when I have an index on the column I am filtering on?</title><content type='html'>I ran into a very simple SQL Server performance related question the other day. A puzzled DBA was staring at a simple query “SELECT * FROM table1 WHERE col_n = x”. Since this was a fairly common query that was executed very frequently he had appropriately created an index on col_n. Yet, for some reason SQL Server was simply ignoring the index on col_n and instead scanning the clustered index. So the puzzling question on this DBAs mind was “why is SQL Server scanning the table? Isn’t the SQL Server Query Optimizer smart enough to see that it will be more efficient to use the col_n index?&lt;br /&gt;&lt;br /&gt;The answer lies in the fact that the SQL Server Query Optimizer is smarter than that (albeit not as smart as I wish it would be). You see, when deciding on a particular execution plan the Query Optimizer has to use an actual value for the parameter x to estimate the number of rows that will be returned on each step. It further assumes that the rows you are looking for are randomly distributed and that it will need to do a page read for every row being returned in addition of the reads it needs to do on the index pages. Depending on this number it makes a determination whether it will be more efficient to just scan the whole table and pull out the rows it needs or go to the col_n index first to get a list of addresses and then go and pull those rows.&lt;br /&gt;&lt;br /&gt;So, now that we know why should we just leave it there since it appears that SQL Server is correctly picking the most efficient path? Not so fast! Remember all that evaluation is being done based on a certain value of parameter x. It could be that for most of the values of parameter x scanning the table is more efficient. In that case you can simply drop the index on col_n if it is not needed for any other queries and leave it at that. However, it could be that for 99% of the possible values of x it would be a lot more efficient to utilize the col_n index – it just so happened that unfortunately when generating the plan the value of x happened to fall on that 1% for which scanning is more efficient. In this case you have to options:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;simply force SQL Server to dispose the bad plan that it has cashed and generate a new one; OR&lt;/li&gt;&lt;li&gt;use a HINT to force SQL Server to use the index. The danger with this however is that with time as the data changes the use of that index may not be optimal so I would recommend that you avoid using HINTS whenever possible and let SQL Server do its job. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;One last note: it is often not necessary to return all the columns – in other words instead of SELECT * FROM table1 WHERE col_n = x you may only need to return a couple of columns like SELECT col_1, col_2 FROM table1 WHERE col_n = x in which case it could be worth it to include col_1 and col_2 in the col_n index. That way SQL Server would not need to go to the table at all but instead get all it needs from the index pages. In certain scenarios where you have a rarely updated but very frequently queried table the above approach of including other columns in the col_n index may make sense even if the query returns all the columns. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-8733224552504414424?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/8733224552504414424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=8733224552504414424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8733224552504414424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/8733224552504414424'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/why-is-sql-server-scanning-clustered.html' title='Why is SQL Server scanning the clustered index when I have an index on the column I am filtering on?'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6155776890132428999</id><published>2009-01-12T07:48:00.000-08:00</published><updated>2012-01-30T07:48:04.148-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Object Search'/><title type='text'>SQL Server search stored procedures</title><content type='html'>Anyone who works with SQL Server has at one point or another faced the simple question: “how can I find all stored procedures that reference a given table?”, or “how can I find all the objects in the database the definition of which contains a certain word or phrase?”. While SQL Server makes those tasks relatively easy those are still time consuming and when done on an ad-hoc bases chances of missing or forgetting something are relatively high.&lt;br /&gt;&lt;br /&gt;The good news is: you don’t have to struggle with this when there is a really &lt;strong&gt;cool and completely free tool&lt;/strong&gt; called &lt;a href="http://www.xsqlsoftware.com/products/sql_server_object_search/"&gt;xSQL Object Search&lt;/a&gt; available. So how does &lt;a href="http://www.xsqlsoftware.com/products/sql_server_object_search/"&gt;xSQL Object Search&lt;/a&gt; work? Very simple:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;You connect to the server you are interested on&lt;/li&gt;&lt;li&gt;Choose to search in a certain database or All Databases on that server&lt;/li&gt;&lt;li&gt;Define your search criteria&lt;br /&gt;&lt;ul&gt;&lt;li&gt;What are you looking for&lt;/li&gt;&lt;li&gt;How do you want to search (exact match, contains, starts with, ends with, sql server expression, regular expression) &lt;/li&gt;&lt;li&gt;Choose where do you want to look - the object name, object definition, or both?&lt;/li&gt;&lt;li&gt;Finally choose which object types you wish to search (all objects or just certain types of objects like stored procedures, views, tables, triggers etc.)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;Click on Find Now (see the screen shot below&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://1.bp.blogspot.com/_gVoDZlsD5-g/SWtnnwV0t2I/AAAAAAAAAAM/6E3sWQH1Qi0/s1600-h/xSQLObjectSearch.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;img alt="" border="0" id="BLOGGER_PHOTO_ID_5290436565555670242" src="http://2.bp.blogspot.com/_gVoDZlsD5-g/SWtoBsSu7OI/AAAAAAAAAAU/cnBwjaNXFhI/s400/xSQLObjectSearch.jpg" style="display: block; height: 315px; margin: 0px auto 10px; text-align: center; width: 400px;" /&gt;&lt;br /&gt;&lt;a href="http://www.xsqlsoftware.com/products/sql_server_object_search/"&gt;xSQL Object Search&lt;/a&gt; is a free tool and you can download it from: &lt;a href="http://www.xsqlsoftware.com/download/"&gt;http://www.xsqlsoftware.com/download/&lt;/a&gt;&lt;br /&gt;Applies to:&lt;br /&gt;SQL Server search tables&lt;br /&gt;SQL Server search views&lt;br /&gt;SQL Server search stored procedures&lt;br /&gt;SQL Server search triggers&lt;br /&gt;SQL Server search functions&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6155776890132428999?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6155776890132428999/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6155776890132428999' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6155776890132428999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6155776890132428999'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/sql-server-search-stored-procedures.html' title='SQL Server search stored procedures'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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/_gVoDZlsD5-g/SWtoBsSu7OI/AAAAAAAAAAU/cnBwjaNXFhI/s72-c/xSQLObjectSearch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8214699729339673750.post-7426458260802954687</id><published>2009-01-06T05:45:00.000-08:00</published><updated>2009-01-06T05:48:06.617-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sql server data compare'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Compare'/><title type='text'>Free SQL data compare tool</title><content type='html'>There are many scenarios in which someone working with SQL Server may need to find out what the data differences are between two databases or just two tables. Furthermore, it is often necessary to synchronize the data, that is, make the data in the target database the same as the data in the source database or vice versa. That’s where &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; comes in – it is a tool that was designed specifically for this purpose. It comes as part of the &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Bundle_Schema_Data_Compare.aspx"&gt;xSQL Bundle&lt;/a&gt; package and just like in the case of xSQL Object chances are you won’t have to ever pay a dime for it.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; licensing works exactly the same way as the licensing of xSQL Object described in detail on yesterday’s post &lt;a href="http://xsqlsoftware.blogspot.com/2009/01/if-you-are-looking-for-free-schema.html"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-7426458260802954687?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/7426458260802954687/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=7426458260802954687' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7426458260802954687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/7426458260802954687'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/free-sql-data-compare-tool.html' title='Free SQL data compare tool'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-5272387072027989373</id><published>2009-01-05T10:02:00.000-08:00</published><updated>2012-01-30T07:40:56.600-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='free schema compare tool'/><category scheme='http://www.blogger.com/atom/ns#' term='sql compare'/><title type='text'>Free SQL Compare tools for SQL Server</title><content type='html'>If you are looking for a free schema compare tool that allows you to compare and synchronize the schemas of two SQL Server databases, like your development database with the production database, then &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; is the tool for you. Not only is it one of the best tools in the market (don’t take our word for it – give it a try and you will see for yourself) but what’s &lt;strong&gt;unmatched in the industry&lt;/strong&gt; is the way our licensing works. I will give you the details below but the end result is that most of our users enjoy using &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; completely free. Here is how our licensing works:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;everyone downloads the same &lt;a href="http://www.xsqlsoftware.com/download/package.aspx?packageid=10"&gt;xSQL&amp;nbsp;Comparison Bundle package&lt;/a&gt; that includes &lt;a href="http://www.xsqlsoftware.com/products/sql_server_schema_compare/"&gt;xSQL Object&lt;/a&gt; and &lt;a href="http://www.xsqlsoftware.com/products/sql_server_data_compare/"&gt;xSQL Data Compare&lt;/a&gt;; &lt;/li&gt;&lt;li&gt;for the first two weeks the applications function as if you had purchased a professional license;&lt;/li&gt;&lt;li&gt;after the first two weeks the licensing module first checks the edition of the databases you are comparing: &lt;/li&gt;&lt;ul&gt;&lt;li&gt;if both databases are SQL Server Express edition then you see no difference – works the same as before; &lt;/li&gt;&lt;li&gt;if one of the databases in the comparison is something other than SQL Server Express then the licensing module checks the number of objects in that database (number of tables, stored procedures, views, functions) &lt;/li&gt;&lt;ul&gt;&lt;li&gt;if the number of objects is within the limits of what we call the &lt;a href="http://www.xsqlsoftware.com/LiteEdition.aspx"&gt;Lite Edition&lt;/a&gt; then again the application works and you don’t see any difference; &lt;/li&gt;&lt;li&gt;if the number of objects is greater than those &lt;a href="http://www.xsqlsoftware.com/LiteEdition.aspx"&gt;limits&lt;/a&gt; then you are kindly notified that to compare and sync that database you need to acquire a license. Well, someone has to pay for all that development effort that goes into our products :)&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;/ul&gt;You can download xSQL Bundle from: &lt;a href="http://www.xsqlsoftware.com/download/"&gt;http://www.xsqlsoftware.com/download/&lt;/a&gt; and while there don’t forget to check our other cool tools.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-5272387072027989373?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/5272387072027989373/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=5272387072027989373' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5272387072027989373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5272387072027989373'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2009/01/if-you-are-looking-for-free-schema.html' title='Free SQL Compare tools for SQL Server'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-5231548888103893044</id><published>2008-12-29T08:37:00.000-08:00</published><updated>2008-12-29T09:03:44.704-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='random string generator'/><category scheme='http://www.blogger.com/atom/ns#' term='random password generator'/><title type='text'>t-sql random string generator</title><content type='html'>This is a simple stored procedure that you can use to generate a random string. You can use it as a random password generator and for other purposes. It is very simple so I won't bore you with unnecessary explanations but if you do happen to have any questions feel free to post them here.&lt;br /&gt;&lt;br /&gt;CREATE PROCEDURE [dbo].[usp_GenerateRandomString]&lt;br /&gt;&amp;nbsp;&amp;nbsp;@sLength tinyint = 10,&lt;br /&gt;&amp;nbsp;&amp;nbsp;@randomString varchar(50) OUTPUT&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;SET NOCOUNT ON&lt;br /&gt;&amp;nbsp;&amp;nbsp;DECLARE @counter tinyint&lt;br /&gt;&amp;nbsp;&amp;nbsp;DECLARE @nextChar char(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;SET @counter = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;SET @randomString = ''&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;WHILE @counter &lt;= @sLength&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;BEGIN&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SELECT @nextChar = CHAR(ROUND(RAND() * 93 + 33, 0))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;IF ASCII(@nextChar) not in (34, 39, 40, 41, 44, 46, 96, 58, 59)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;SELECT @randomString = @randomString + @nextChar&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SET @counter = @counter + 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;END&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;END&lt;br /&gt;END&lt;br /&gt;&lt;br /&gt;There are of course other ways to accomplish this – a very simple one would be to use newid() and grab whatever number of characters you need from it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-5231548888103893044?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/5231548888103893044/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=5231548888103893044' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5231548888103893044'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/5231548888103893044'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/12/t-sql-random-string-generator.html' title='t-sql random string generator'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-9216391304999151839</id><published>2008-12-15T06:37:00.000-08:00</published><updated>2008-12-15T06:42:39.092-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework SP1'/><title type='text'>No dependency on SP1 of .NET framework anymore</title><content type='html'>Since we received a few messages from users having trouble with xSQL Data Compare because of the SP1 dependency, instead of "forcing" the users to install SP1 for .NET Framework we decided to remove that dependency altogether. You can simply download the latest build of xSQL Bundle from our site and install it over the current version you have on your machine.&lt;br /&gt;&lt;br /&gt;You can download the latest build of xSQL Bundle from: &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;http://www.xsqlsoftware.com/Download.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-9216391304999151839?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/9216391304999151839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=9216391304999151839' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9216391304999151839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9216391304999151839'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/12/no-dependency-on-sp1-of-net-framework.html' title='No dependency on SP1 of .NET framework anymore'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-383519460551889791</id><published>2008-12-04T08:26:00.000-08:00</published><updated>2008-12-04T08:28:05.181-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET Framework SP1'/><title type='text'>xSQL Data Compare 3.0 requires .NET Framework SP1</title><content type='html'>We have receives a couple of reports from users who are not seeing the INSERT statements when scripting a table (schema and data) from &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; or when generating a synchronization script. The issue is related to a structure that we are using in version 3.0 that was apparently introduced with the SP1 of .NET Framework.&lt;br /&gt;&lt;br /&gt;If you are experiencing this issue with &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; either install the SP1 for .NET Framework which you can get from: &lt;a title="http://www.microsoft.com/downloads/details.aspx?familyid=" displaylang="en" href="http://www.microsoft.com/downloads/details.aspx?familyid=79BC3B77-E02C-4AD3-AACF-A7633F706BA5&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=79BC3B77-E02C-4AD3-AACF-A7633F706BA5&amp;amp;displaylang=en&lt;/a&gt; or email us if for some reason you do not want to install SP1 and would rather just go back to &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; version 2.5 which does not require SP1.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-383519460551889791?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/383519460551889791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=383519460551889791' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/383519460551889791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/383519460551889791'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/12/xsql-data-compare-30-requires-net.html' title='xSQL Data Compare 3.0 requires .NET Framework SP1'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-856080537317189826</id><published>2008-12-01T11:29:00.000-08:00</published><updated>2008-12-01T11:30:38.852-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><category scheme='http://www.blogger.com/atom/ns#' term='bulk insert'/><title type='text'>Synchronize with bulk insert – xSQL Data Compare</title><content type='html'>By default the database synchronization script that &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; generates contains one INSERT statement for every row that exists in the source database but does not exist on the target (destination) database. When the number of such rows is extremely large you can imagine that the synchronization script will likely get to be very large also and such script on a transaction will make for an extremely large transaction that is bound to create performance issues.&lt;br /&gt;&lt;br /&gt;It is for that reason that &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; provides a little known “switch” called “Synchronize with bulk insert” which will change the default behavior and instead of generating one INSERT statement for each row will generate only one bulk insert statement for each table in the comparison making for a much more efficient synchronization script.&lt;br /&gt;&lt;br /&gt;The “Synchronize with bulk insert” option can be found under the main menu Compare / Data Options.&lt;br /&gt;&lt;br /&gt;In case you are not familiar with &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; – it is a simple tool that allows you to compare and synchronize the data in two SQL Server databases and supports SQL Server 2008, SQL Server 2005 and SQL Server 2000. It is free for SQL Server Express databases with no limitations and it is also free for other editions of SQL Server but with some limitations. You can read more and download your copy of xSQL Data Compare from our website at: &lt;a href="http://www.xsqlsoftware.com/"&gt;http://www.xsqlsoftware.com&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-856080537317189826?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/856080537317189826/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=856080537317189826' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/856080537317189826'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/856080537317189826'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/12/synchronize-with-bulk-insert-xsql-data.html' title='Synchronize with bulk insert – xSQL Data Compare'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-9190824095505318468</id><published>2008-11-20T16:02:00.000-08:00</published><updated>2008-11-20T16:05:19.867-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Jim Gray Systems Lab'/><category scheme='http://www.blogger.com/atom/ns#' term='David DeWitt'/><category scheme='http://www.blogger.com/atom/ns#' term='Madison Wisconsin'/><category scheme='http://www.blogger.com/atom/ns#' term='Microsoft'/><title type='text'>Microsoft hires DeWitt and starts Jim Gray Systems Lab in Madison Wisconsin</title><content type='html'>I just read this exciting news (a bit old apparently but I did not know) that Microsoft has hired David DeWitt to head the newly founded Jim Gray Systems Lab in Madison Wisconsin. Why is this exciting you say? Well, two reasons: first, xSQL Software has strong ties to Madison Wisconsin and to the database department that DeWitt headed for many years; and second, because this is a great move on Microsoft’s part. What makes this very interesting is the fact that in his new position DeWitt works for the Data and Storage division that makes SQL Server rather than working for the Microsoft Research division – in practical terms that means that his ideas and work have a much higher chance of being applied in the real world applications that Microsoft makes.&lt;br /&gt;&lt;br /&gt;We wish DeWitt and the Jim Gray Systems Lab great success!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-9190824095505318468?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/9190824095505318468/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=9190824095505318468' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9190824095505318468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/9190824095505318468'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/11/microsoft-hires-dewitt-and-starts-jim.html' title='Microsoft hires DeWitt and starts Jim Gray Systems Lab in Madison Wisconsin'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-862346720527370496</id><published>2008-11-12T09:53:00.000-08:00</published><updated>2008-11-12T09:58:45.951-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xsql documenter'/><title type='text'>xSQL Documenter 2.0 released</title><content type='html'>We just released a new version of &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter&lt;/a&gt; that adds supports SQL Server 2008, Sybase SQL Anywhere as well as new features and enhancements. Here is what's new on &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;xSQL Documenter 2.0&lt;/a&gt;:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Support for SQL Server 2008 &lt;/li&gt;&lt;li&gt;Support for Sybase SQL Anywhere 10.0 and up &lt;/li&gt;&lt;li&gt;Adds a “choose objects” page in the GUI where you can specify what object types you want to document. &lt;/li&gt;&lt;li&gt;Support for all DBMS platforms in the "exclude objects" GUI. Previously this GUI supported only SQL Server. &lt;/li&gt;&lt;li&gt;Support for arbitrary HTML in database comments – see /pt command line switch. &lt;/li&gt;&lt;li&gt;Analysis Server: support for XML comments in MDX scripts. This enables documentation of calculated members. &lt;/li&gt;&lt;li&gt;Support for cross database and cross server dependencies (through linked servers) &lt;/li&gt;&lt;li&gt;Support for column dependencies (which columns of which table a stored procedure selects or updates. &lt;/li&gt;&lt;li&gt;SQL Server: support for XML comments on objects that don't have their DDL stored on the server, such as tables. This is implemented with extended properties.SQL Server: add extended properties filter. Using this you can restrict by name the extended properties that are fetched by xSQL Documenter.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;xSQL Documenter generates compiled CHM and html database documentation for virtually all DBMS platforms including SQL Server, DB2, Oracle, MySQL etc.&lt;/p&gt;&lt;p&gt;You can read more about xSQL Documenter and download your copy from: &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx"&gt;http://www.xsqlsoftware.com/Product/xSQL_Database_Documenter.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-862346720527370496?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/862346720527370496/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=862346720527370496' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/862346720527370496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/862346720527370496'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/11/xsql-documenter-20-released.html' title='xSQL Documenter 2.0 released'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-945668848504578647</id><published>2008-11-05T08:47:00.001-08:00</published><updated>2008-11-05T09:02:26.185-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='custom keys'/><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Data Compare'/><title type='text'>xSQL Data Compare custom comparison keys</title><content type='html'>A conversation with a customer yesterday brought to light the potential confusion with the custom comparison keys that &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; allows the user to define "on the fly". The customer was worried that defining a custom unique key would change the structure of the table - so here is some clarification:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;when you define a custom comparison key for a table in xSQL Data Compare the database schema (structure) is not affected - no changes are made to the schema; &lt;/li&gt;&lt;li&gt;the custom comparison key can include multiple columns from the table in question;&lt;/li&gt;&lt;li&gt;the key must be unique - that is the combination of the values of the columns included in the key should uniquely identify a row in that table. &lt;/li&gt;&lt;li&gt;the comparison key defined on one of the tables in the comparison should match the comparison key defined on the other table - the rows from both tables in the comparison are paired based on the key values.&lt;/li&gt;&lt;/ul&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Data_Compare.aspx"&gt;xSQL Data Compare&lt;/a&gt; provides for comparing and synchronizing the content (the data) of two SQL Server databases. It supports SQL Server 2000, SQL Server 2005 and SQL Server 2008 and it is completely free for SQL Server Express and its predecessor MSDE. xSQL Data Compare can be downloaded as part of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Bundle_Schema_Data_Compare.aspx"&gt;xSQL Bundle&lt;/a&gt; from: &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;http://www.xsqlsoftware.com/Download.aspx&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-945668848504578647?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/945668848504578647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=945668848504578647' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/945668848504578647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/945668848504578647'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/11/xsql-data-compare-custom-comparison.html' title='xSQL Data Compare custom comparison keys'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4647461284380294608</id><published>2008-11-04T12:59:00.000-08:00</published><updated>2008-11-04T13:17:51.474-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='US presidential elections'/><title type='text'>Don't forget to vote today</title><content type='html'>To all US citizens - don't forget to vote - it is more important than almost anything else you may have to do today. We would even offer you a free license for any of our products if you voted today but that would violate federal and state laws - we learned that from the Starbucks example (Starbucks was advertising a free tall coffee for anyone who had the "I voted sticker" but they are now giving free tall coffee to anyone who asks for it otherwise they would be in violation of the law).&lt;br /&gt;&lt;br /&gt;And remember your mail-in ballot must be received by the county election officials before the polls close otherwise your vote won't count. So, don't drop the ballot at the post office today - you are too late - instead, hand-deliver it to any precinct in your county (the one where you are registered to vote).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4647461284380294608?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4647461284380294608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4647461284380294608' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4647461284380294608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4647461284380294608'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/11/dont-forget-to-vote-today.html' title='Don&apos;t forget to vote today'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-2804491482018687567</id><published>2008-11-03T10:23:00.000-08:00</published><updated>2008-11-03T11:00:12.000-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server 2008'/><title type='text'>SQL Server 2008 penetrating faster than the predecessor</title><content type='html'>We have not conducted any rigorous research on this but based on our empirical data it appears that there is a lot more excitement about the SQL Server 2008 release than there was for the release of SQL Server 2005. Our user base today is orders of magnitude larger than it was when SQL Server 2005 was released but proportionally we have been receiving 3 times as many inquires about support for SQL Server 2008 nowadays than we were receiving then for SQL Server 2005.&lt;br /&gt;&lt;br /&gt;A survey conducted by SQL Server Magazine showed that about 81 percent of the participants are still on SQL Server 2000 and only about 40 percent are using SQL Server 2005. I am willing to bet that one year from now over 50% of those same people will be already using SQL Server 2008 - there are just too many cool and very useful features in SQL Server 2008 that make it really hard to pass.&lt;br /&gt;&lt;br /&gt;All xSQL Software tools &lt;a href="http://www.xsqlsoftware.com/Sql2008Support/Index.aspx"&gt;support SQL Server 2008&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-2804491482018687567?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/2804491482018687567/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=2804491482018687567' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2804491482018687567'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/2804491482018687567'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/11/sql-server-2008-penetrating-faster-than.html' title='SQL Server 2008 penetrating faster than the predecessor'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4503890756296707794</id><published>2008-10-31T11:18:00.000-07:00</published><updated>2008-10-31T11:29:12.363-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Script Executor'/><category scheme='http://www.blogger.com/atom/ns#' term='batch parsing'/><title type='text'>xSQL Script Executor - batch parsing modes</title><content type='html'>In addition of adding support for SQL Server 2008 the new version of &lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor.aspx"&gt;xSQL Script Executor&lt;/a&gt; adds a user option called batch parsing mode which determines the type of batch parsing that will be performed on the source scripts. The purpose of the batch parsing is to identify batches which are T-SQL statements in the script files separated by GO. xSQL Script executor supports the following batch parsing modes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Simple&lt;/strong&gt;: is the fastest batch parsing mode. It simply identifies batches in the source script with very little overhead. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;Common&lt;/strong&gt;: the source scripts are parsed first to remove T-SQL comments, and then batches parsing takes place&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Thorough&lt;/strong&gt;: the source scripts are parsed to remove comments, string constants, dynamic scripting and then the batch parsing takes place. The "Thorough" mode can take significantly longer than the other parsing modes. If you know that the source files do not contain dynamic scripting, Common or Simple mode will do the job well.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.xsqlsoftware.com/Product/Sql_Server_Script_Executor.aspx"&gt;xSQL Script Executor&lt;/a&gt; is a &lt;strong&gt;free utility&lt;/strong&gt; that provides for executing multiple T-SQL scripts against SQL Server. You can download your copy of xSQL Script Executor from: &lt;a href="http://www.xsqlsoftware.com/Download.aspx"&gt;http://www.xsqlsoftware.com/Download.aspx&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4503890756296707794?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4503890756296707794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4503890756296707794' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4503890756296707794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4503890756296707794'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/10/xsql-script-executor-batch-parsing.html' title='xSQL Script Executor - batch parsing modes'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4645131164839226287</id><published>2008-10-30T10:11:00.000-07:00</published><updated>2008-10-30T10:24:57.730-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xSQL Profiler'/><title type='text'>New build of xSQL Profiler published</title><content type='html'>We just released a new build of &lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Profiler.aspx"&gt;xSQL Profiler&lt;/a&gt; that does two main things:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;significantly improves the process of uploading trace data from the servers being traced to the central repository; we had received reports from users indicating that under stress conditions the pulling of the trace data from each individual server into the central repository could time out and hence there would be gaps in the trace data collected. The improved process performs significantly better and should eliminate any issues experienced with the previous build.  &lt;/li&gt;&lt;li&gt;allows the user to see the status of a given trace on each one of the servers on which the trace runs. In cases when xSQL Profiler may loose the connection with a server it will not be able to stop the traces that it has started on that server. Of course it would stop them when the connection is re-established but there was no easy way for the user to see if the trace was still running on some of the servers while stopped on some others. Now the user can simply "drill down" on a trace and see what is happening on each server. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;a href="http://www.xsqlsoftware.com/Product/xSQL_Profiler.aspx"&gt;xSQL Profiler&lt;/a&gt; allows you to define a trace and schedule it to run on any number of SQL Servers simultaneously while automatically collecting trace data from all servers into a central repository. xSQL Profiler supports SQL Server 2008, SQL Server 2005 and SQL Server 2000.&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4645131164839226287?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4645131164839226287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4645131164839226287' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4645131164839226287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4645131164839226287'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/10/new-build-of-xsql-profiler-published.html' title='New build of xSQL Profiler published'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-410322515977751222</id><published>2008-10-28T10:50:00.000-07:00</published><updated>2008-10-28T10:57:46.233-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='deprecated features'/><title type='text'>Don’t use this – it may not be supported in future versions – lessons from the field</title><content type='html'>“Avoid using this feature in new development work…“– I am sure this sounds familiar to all software developers out there. I am also sure (based on real life examples that I have encountered over the many years of experience) that a lot of developers simply ignore those warnings. Take for example my latest “encounter” – recently written T-SQL queries that still use the old *= outer join syntax! And how long has it been since Microsoft recommended not using it? At least 10 years!&lt;br /&gt;&lt;br /&gt;Why do programmers do this?&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;resistance to change - the way you are used to doing things makes sense the new way usually doesn’t (to you that is);&lt;/li&gt;&lt;li&gt;forgetting that your objective as a software developer is not just to “get it done” but to “get it done right”;&lt;/li&gt;&lt;li&gt;not giving enough consideration to the potential future costs of the short-cuts you take today. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;I would like to remind all developers out there (especially those that do take unnecessary, easily avoidable “short-cuts”): &lt;/p&gt;&lt;ul&gt;&lt;li&gt;it may be you who will have to go back and spend a portion of your life doing the most annoying and boring job of all – that of tweaking your own code to make it compliant instead of spending the time creating new and exciting things; &lt;/li&gt;&lt;li&gt;the costs associated with those kind of changes can be staggering for the company and if such costs could have been avoided, but for your negligence, then you really did not do right by the company. Or, to put it in simpler terms: you did not do your job and did not deserve the compensation you received, let alone any praise that your superiors lavished on you. &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;What’s the lesson? If it says “avoid using it” you better not use it, take the time and change your “ways” – it is not fair to the recipient of your work and it may come to haunt you!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-410322515977751222?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/410322515977751222/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=410322515977751222' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/410322515977751222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/410322515977751222'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/10/dont-use-this-it-may-not-be-supported.html' title='Don’t use this – it may not be supported in future versions – lessons from the field'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-6744943929113734913</id><published>2008-10-27T15:04:00.000-07:00</published><updated>2008-10-27T15:08:54.648-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rss reporter'/><title type='text'>RSS Reporter - real life scenarios</title><content type='html'>Seeing that we have not done a great job in explaining how a SQL Server database administrator can benefit from utilizing &lt;a href="http://xsqlsoftware.com/Product/Sql_Server_Rss_Reporter.aspx"&gt;RSS Reporter&lt;/a&gt; one of our customers, &lt;a href="http://chadwickmiller.spaces.live.com/default.aspx"&gt;Chad Miller&lt;/a&gt;, took matters on his hands and prepared a great &lt;a href="http://chadwickmiller.spaces.live.com/blog/cns!EA42395138308430!182.entry"&gt;presentation&lt;/a&gt; for the Tampa Bay SQL Server User Group. In just a handful of simple slides he explains the awesome power of the RSS Reporter for SQL Server – he shows how in a matter of minutes an administrator can create an integrated dashboard that allows him to monitor:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;backups;&lt;/li&gt;&lt;li&gt;log errors;&lt;/li&gt;&lt;li&gt;jobs and replication;&lt;/li&gt;&lt;li&gt;help desk systems;&lt;/li&gt;&lt;li&gt;disk space;&lt;/li&gt;&lt;li&gt;up time&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Check out Chad's presentation and &lt;a href="http://xsqlsoftware.com/Download.aspx"&gt;download&lt;/a&gt; your copy of RSS Reporter today - it is completely free with no strings attached for one SQL Server instance. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-6744943929113734913?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/6744943929113734913/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=6744943929113734913' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6744943929113734913'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/6744943929113734913'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/10/rss-reporter-real-life-scenarios.html' title='RSS Reporter - real life scenarios'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-1745158326314707829</id><published>2008-10-24T17:27:00.000-07:00</published><updated>2008-10-24T17:28:57.318-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='funny story'/><title type='text'>while 1 &lt; 1000</title><content type='html'>This is a true story, not a joke. This young student asked me to look at a piece of code he had written. He had an intentional endless loop that looked like this:&lt;br /&gt;            while (1 &lt; 1000)&lt;br /&gt;            {&lt;br /&gt;                        …&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;This sparked my curiosity and I asked him: why not do “while (1 &lt; 2)”?  I was expecting something like “I just like it that way” but no, to my utter surprise his answer was – “I just want to make sure”! I guess he was afraid that after a few loops 1 could grow and become bigger than 2! I contained my laugh and did not say anything but the puzzled look on my face probably gave him a cue that something was wrong with his reasoning.&lt;br /&gt;&lt;br /&gt;It is funny and it does make one laugh (a couple of colleagues couldn’t stop laughing when I told them the story) but I also find it very sad for a college student to be at that level.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-1745158326314707829?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/1745158326314707829/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=1745158326314707829' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1745158326314707829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/1745158326314707829'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/10/while-1-1000.html' title='while 1 &lt; 1000'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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-8214699729339673750.post-4277081218181483776</id><published>2008-10-24T09:04:00.000-07:00</published><updated>2008-10-24T09:19:00.538-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='naming convention'/><category scheme='http://www.blogger.com/atom/ns#' term='stored procedure'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Stored Procedure naming conventions</title><content type='html'>I got a question about stored procedure naming conventions today. I spent a bit of time thinking about it and here is what I advised the client:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;div align="left"&gt;The most important thing is to have a standard that is accepted by the whole team and is followed (possibly enforced). The actual standard that is adapted is not very important. You should remember that there are two main goals that the standard (naming convention) is intended to achieve:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Avoid potentially costly mistakes (for example dropping a table while you think you are dropping a view)&lt;/li&gt;&lt;li&gt;Improve the productivity of the developers by making the code much easier to read (understand) and reducing the time it takes to locate an object.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;li&gt;Given those two simple objectives it follows that the name of the object should tell us: &lt;/li&gt;&lt;ul&gt;&lt;li&gt;What type of object it is; &lt;/li&gt;&lt;li&gt;What is the base object on which this depends (if applicable) &lt;/li&gt;&lt;li&gt;What does it do (Insert, Delete, Update, Create etc.)&lt;/li&gt;&lt;li&gt;Other group identifiers if necessary &lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p&gt;As far as specifics the only warning I am aware of (this was valid in SQL Server 2000 and I am not sure it applies to 2005) is that you should not prefix the stored procedures with sp_ - there is an article by Brian Moran on SQL Server Magazine (&lt;a href="http://www.sqlmag.com/Article/ArticleID/23011/sql_server_23011.html"&gt;http://www.sqlmag.com/Article/ArticleID/23011/sql_server_23011.html&lt;/a&gt;) that explains why. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8214699729339673750-4277081218181483776?l=xsqlsoftware.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://xsqlsoftware.blogspot.com/feeds/4277081218181483776/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8214699729339673750&amp;postID=4277081218181483776' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4277081218181483776'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8214699729339673750/posts/default/4277081218181483776'/><link rel='alternate' type='text/html' href='http://xsqlsoftware.blogspot.com/2008/10/stored-procedure-naming-conventions.html' title='Stored Procedure naming conventions'/><author><name>rational</name><uri>http://www.blogger.com/profile/02398378934739504719</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></feed>
