<?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-15480284</id><updated>2012-04-15T20:26:11.922-07:00</updated><title type='text'>Practical SQL Server 2000</title><subtitle type='html'>ASP, ASP.NET, SQL Server Developer</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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>8</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-15480284.post-112923655540797892</id><published>2005-10-13T13:48:00.000-07:00</published><updated>2005-10-21T08:13:06.590-07:00</updated><title type='text'>UDF Domain Name from Email Address</title><content type='html'>&lt;style type="text/css"&gt;
.TPtext { color: #000000; background-color: #FFFFFF; }
.TPkeyword1 { color: #0000FF; background-color: #FFFFFF; }
.TPcomment2 { color: #008080; background-color: #FFFFFF; }
.TPnumber { color: #000000; background-color: #FFFFFF; }
.TPchar { color: #008080; background-color: #FFFFFF; }
.TPbracket { color: #FF0000; background-color: #FFFFFF; }
.TPoperator { color: #000000; background-color: #FFFFFF; }
&lt;/style&gt;

&lt;pre&gt;
&lt;span class="TPkeyword1"&gt;USE &lt;/span&gt;Northwind

&lt;span class="TPkeyword1"&gt;DECLARE &lt;/span&gt;@EMAIL &lt;span class="TPkeyword1"&gt;VARCHAR&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;255&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;DECLARE &lt;/span&gt;@EMAILDOMAIN &lt;span class="TPkeyword1"&gt;VARCHAR&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;255&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPkeyword1"&gt;SET &lt;/span&gt;@EMAIL &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPchar"&gt;'shane@microsoft.com'&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SET &lt;/span&gt;@EMAILDOMAIN &lt;span class="TPoperator"&gt;= &lt;/span&gt;
        SUBSTRING
                &lt;span class="TPbracket"&gt;(&lt;/span&gt;
                @EMAIL,
                CHARINDEX&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPchar"&gt;'@'&lt;/span&gt;,@EMAIL,&lt;span class="TPnumber"&gt;1&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;,
                LEN&lt;span class="TPbracket"&gt;(&lt;/span&gt;@EMAIL&lt;span class="TPbracket"&gt;)&lt;/span&gt;
                &lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;@EMAILDOMAIN

&lt;span class="TPcomment2"&gt;--CREATE FUNCTION GetEmailDomain&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--      @EMAIL VARCHAR(255)&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--)&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--RETURNS VARCHAR(255)&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--AS&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--BEGIN&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--      RETURN SUBSTRING&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              (&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              @EMAIL,&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              CHARINDEX('@',@EMAIL,1),&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              LEN(@EMAIL)&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              )&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--END&lt;/span&gt;


&lt;span class="TPcomment2"&gt;--SELECT dbo.GetEmailDomain&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              (&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              'shane@microsoft.com'&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--              )&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--RESULT: @microsoft.com&lt;/span&gt;
&lt;/pre&gt;

&lt;b&gt;References&lt;/b&gt;
&lt;br&gt;&lt;br&gt;


&lt;a href="" target="_blank"&gt;http://www.sqlteam.com/item.asp?ItemID=1955&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15480284-112923655540797892?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112923655540797892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112923655540797892' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112923655540797892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112923655540797892'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/10/udf-domain-name-from-email-address.html' title='UDF Domain Name from Email Address'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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-15480284.post-112558503271003753</id><published>2005-09-01T07:21:00.000-07:00</published><updated>2005-10-21T08:11:11.606-07:00</updated><title type='text'>String Formatting SPACE Function</title><content type='html'>Easy enough one but easily forgotten all the same.
&lt;style type="text/css"&gt;
.TPtext { color: #000000; background-color: #FFFFFF; }
.TPkeyword1 { color: #0000FF; background-color: #FFFFFF; }
.TPnumber { color: #000000; background-color: #FFFFFF; }
.TPchar { color: #008080; background-color: #FFFFFF; }
.TPbracket { color: #FF0000; background-color: #FFFFFF; }
.TPoperator { color: #000000; background-color: #FFFFFF; }
&lt;/style&gt;&lt;pre&gt;
&lt;span class="TPkeyword1"&gt;Use &lt;/span&gt;Northwind

&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPchar"&gt;'A' &lt;/span&gt;&lt;span class="TPoperator"&gt;+ &lt;/span&gt;&lt;span class="TPkeyword1"&gt;SPACE&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;10&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;&lt;span class="TPoperator"&gt;+ &lt;/span&gt;&lt;span class="TPchar"&gt;'B' &lt;/span&gt;&lt;span class="TPkeyword1"&gt;AS &lt;/span&gt;&lt;span class="TPchar"&gt;'formatted'&lt;/span&gt;
&lt;/pre&gt;




&lt;strong&gt;References&lt;/strong&gt;
&lt;br&gt;&lt;br&gt;

&lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_fa-fz_7oqb.asp" target="_blank"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_fa-fz_7oqb.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15480284-112558503271003753?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112558503271003753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112558503271003753' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112558503271003753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112558503271003753'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/09/string-formatting-space-function.html' title='String Formatting SPACE Function'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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-15480284.post-112549719983589492</id><published>2005-08-31T06:53:00.000-07:00</published><updated>2005-08-31T07:15:02.230-07:00</updated><title type='text'>OPTION MAXDOP Limit Query to 1 CPU</title><content type='html'>Great for large SELECT statements to limit to 1 CPU or where UNIONS or INNER JOINS are running slowly in a multi-CPU environment.

&lt;style type="text/css"&gt;
.TPtext { color: #000000; background-color: #FFFFFF; }
.TPkeyword1 { color: #0000FF; background-color: #FFFFFF; }
.TPnumber { color: #000000; background-color: #FFFFFF; }
.TPbracket { color: #FF0000; background-color: #FFFFFF; }
.TPoperator { color: #000000; background-color: #FFFFFF; }
&lt;/style&gt;

&lt;pre&gt;
&lt;span class="TPkeyword1"&gt;Use &lt;/span&gt;Northwind

&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPoperator"&gt;* &lt;/span&gt;&lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;PRODUCTS &lt;span class="TPkeyword1"&gt;OPTION &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;MAXDOP &lt;span class="TPnumber"&gt;1&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;
&lt;/pre&gt;

&lt;strong&gt;References&lt;/strong&gt;
&lt;br&gt;&lt;br&gt;

&lt;a href="http://www.sql-server-performance.com/case_studies.asp" target="_blank"&gt;http://www.sql-server-performance.com/case_studies.asp&lt;/a&gt;
&lt;br&gt;

&lt;a href="http://dbforums.com/t555536.html" target="_blank"&gt;http://dbforums.com/t555536.html&lt;/a&gt;
&lt;br&gt;

&lt;a href="http://www.experts-exchange.com/Databases/Q_21279226.html" target="_blank"&gt;http://www.experts-exchange.com/Databases/Q_21279226.html&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/15480284-112549719983589492?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112549719983589492/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112549719983589492' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112549719983589492'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112549719983589492'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/08/option-maxdop-limit-query-to-1-cpu.html' title='OPTION MAXDOP Limit Query to 1 CPU'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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-15480284.post-112504974449247267</id><published>2005-08-26T02:46:00.000-07:00</published><updated>2005-08-26T02:49:29.440-07:00</updated><title type='text'>Sub Query NULL Got ya</title><content type='html'>Using a negative (NOT IN) Sub Query that contains a NULL value returns no result.

&lt;style type="text/css"&gt;
.TPtext { color: #000000; background-color: #FFFFFF; }
.TPkeyword1 { color: #0000FF; background-color: #FFFFFF; }
.TPcomment2 { color: #008080; background-color: #FFFFFF; }
.TPnumber { color: #000000; background-color: #FFFFFF; }
.TPbracket { color: #FF0000; background-color: #FFFFFF; }
.TPoperator { color: #000000; background-color: #FFFFFF; }
&lt;/style&gt;
&lt;pre&gt;
&lt;span class="TPkeyword1"&gt;Use &lt;/span&gt;Northwind

&lt;span class="TPcomment2"&gt;--(1) works as normal&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPoperator"&gt;*        &lt;/span&gt;&lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;Products 
                &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;ProductID 
                &lt;span class="TPkeyword1"&gt;IN &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;1&lt;/span&gt;,&lt;span class="TPnumber"&gt;10&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--(2) incorporates and NULL value, works as normal&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPoperator"&gt;*        &lt;/span&gt;&lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;Products 
                &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;ProductID 
                &lt;span class="TPkeyword1"&gt;IN &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPkeyword1"&gt;NULL&lt;/span&gt;,&lt;span class="TPnumber"&gt;1&lt;/span&gt;,&lt;span class="TPnumber"&gt;10&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--(3) negative, works as normal&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPoperator"&gt;*        &lt;/span&gt;&lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;Products 
                &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;ProductID 
                &lt;span class="TPkeyword1"&gt;NOT IN &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;1&lt;/span&gt;,&lt;span class="TPnumber"&gt;10&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--(4) negative with NULL, doesn't return values&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPoperator"&gt;*        &lt;/span&gt;&lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;Products 
                &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;ProductID 
                &lt;span class="TPkeyword1"&gt;NOT IN &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPkeyword1"&gt;NULL&lt;/span&gt;,&lt;span class="TPnumber"&gt;1&lt;/span&gt;,&lt;span class="TPnumber"&gt;10&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;




&lt;span class="TPcomment2"&gt;--related best practise, INDEX HINT&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPoperator"&gt;*        &lt;/span&gt;&lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;Products 
                &lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPkeyword1"&gt;INDEX &lt;/span&gt;&lt;span class="TPoperator"&gt;= &lt;/span&gt;PK_Products&lt;span class="TPbracket"&gt;) &lt;/span&gt;
                &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;ProductID 
                &lt;span class="TPkeyword1"&gt;NOT IN &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;1&lt;/span&gt;,&lt;span class="TPnumber"&gt;10&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--related best practice, RANGE&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;&lt;span class="TPoperator"&gt;*        &lt;/span&gt;&lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;Products 
                &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;ProductID 
                &lt;span class="TPkeyword1"&gt;BETWEEN &lt;/span&gt;&lt;span class="TPnumber"&gt;1 &lt;/span&gt;&lt;span class="TPkeyword1"&gt;AND &lt;/span&gt;&lt;span class="TPnumber"&gt;10&lt;/span&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15480284-112504974449247267?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112504974449247267/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112504974449247267' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112504974449247267'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112504974449247267'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/08/sub-query-null-got-ya.html' title='Sub Query NULL Got ya'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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-15480284.post-112490049087028065</id><published>2005-08-24T09:20:00.000-07:00</published><updated>2005-08-25T06:12:31.486-07:00</updated><title type='text'>COALESCE Function replace NULL values</title><content type='html'>One of those rarely used (and easily forgotten) functions that's listed under 'best practise'. This is a handy function for replacing the NULL value of a column or variable with a DEFAULT value within calculations and formulas.
&lt;Br&gt;&lt;bR&gt;

Not of course to be used within large SELECT statements to replace NULL values within a column due to performance issues.
&lt;br&gt;&lt;br&gt;

&lt;style type="text/css"&gt;
.TPtext { color: #000000; background-color: #FFFFFF; }
.TPkeyword1 { color: #0000FF; background-color: #FFFFFF; }
.TPcomment2 { color: #008080; background-color: #FFFFFF; }
.TPnumber { color: #000000; background-color: #FFFFFF; }
.TPchar { color: #008080; background-color: #FFFFFF; }
.TPbracket { color: #FF0000; background-color: #FFFFFF; }
&lt;/style&gt;

&lt;pre&gt;
&lt;span class="TPkeyword1"&gt;USE &lt;/span&gt;Northwind

&lt;span class="TPkeyword1"&gt;DECLARE &lt;/span&gt;@caol_tmp INT

&lt;span class="TPcomment2"&gt;--NULL value&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;@caol_tmp &lt;span class="TPchar"&gt;'caol_tmp'&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--with coalesce&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;COALESCE&lt;span class="TPbracket"&gt;(&lt;/span&gt;@caol_tmp,&lt;span class="TPnumber"&gt;2005&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;AS&lt;/span&gt;&lt;span class="TPchar"&gt;'caol_tmp'&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--causes an error, must be of the same type&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--SELECT COALESCE(@caol_tmp,'string value') &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--      AS 'caol_tmp'&lt;/span&gt;

&lt;/pre&gt;

&lt;strong&gt;References&lt;/strong&gt;
&lt;br&gt;&lt;br&gt;
&lt;a href='http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_9dph.asp' target="_blank"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_ca-co_9dph.asp&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15480284-112490049087028065?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112490049087028065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112490049087028065' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112490049087028065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112490049087028065'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/08/coalesce-function-replace-null-values.html' title='COALESCE Function replace NULL values'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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-15480284.post-112479517886170789</id><published>2005-08-23T03:57:00.000-07:00</published><updated>2005-08-24T01:10:39.456-07:00</updated><title type='text'>After RESTORE user account does not work</title><content type='html'>&lt;pre&gt;
Connection failed:
SQLState: '42000'
SQL Server Error: 4064
[Microsoft][ODBC SQL Server Drive][SQL Server]
Cannot open user default database. Login failed.
&lt;/pre&gt;
OR&lt;br&gt;
&lt;br&gt;

&lt;pre&gt;
Error 21002: [SQL-DMO]User 'database account' 
already exists.
&lt;/pre&gt;

This happens when a database has been restored onto a different MSSQL Server, the &lt;em&gt;database&lt;/em&gt; user account no longer refers to the &lt;em&gt;SQL Server login&lt;/em&gt; (as the SPID - Service Profile Identifier, is no longer consistent) and you can not edit the permissions of the SQL Server Login as you get an error message saying that user already exists.
&lt;br&gt;&lt;br&gt;

&lt;strong&gt;Solution&lt;/strong&gt;
&lt;br&gt;&lt;br&gt;

Login as SA (into Query Analyzer) and run the SP on the database in question:
&lt;pre&gt;
sp_change_users_login 'Update_One', 
                      '[Database Account Name]', 
                      '[SQL Server Login Name]'
&lt;/pre&gt;

&lt;strong&gt;Related (and interesting)&lt;/strong&gt;
&lt;br&gt;&lt;br&gt;

&lt;pre&gt;
--changes default database
sp_defaultdb '[SQL Server Login Name]', 
             '[Database Name]'
&lt;/pre&gt;

&lt;pre&gt;
--list users (run on actual database)
sp_change_users_login 'Report'
&lt;/pre&gt;

&lt;strong&gt;References&lt;/strong&gt;
&lt;br&gt;&lt;br&gt;
&lt;a tareget="_blank" href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ca-cz_8qzy.asp"&gt;http://msdn.microsoft.com/library/default.asp?url=/library/en-us/tsqlref/ts_sp_ca-cz_8qzy.asp&lt;/a&gt;&lt;br&gt;
&lt;a tareget="_blank" href="http://www.mcse.ms/archive81-2003-12-190563.html"&gt;http://www.mcse.ms/archive81-2003-12-190563.html
&lt;/a&gt;
&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15480284-112479517886170789?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112479517886170789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112479517886170789' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112479517886170789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112479517886170789'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/08/after-restore-user-account-does-not.html' title='After RESTORE user account does not work'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-15480284.post-112437222184961723</id><published>2005-08-18T06:35:00.000-07:00</published><updated>2005-08-18T06:39:06.676-07:00</updated><title type='text'>UPDATE table values from another table</title><content type='html'>&lt;style type="text/css"&gt;
.TPtext { color: #000000; background-color: #FFFFFF; }
.TPkeyword1 { color: #0000FF; background-color: #FFFFFF; }
.TPcomment2 { color: #008080; background-color: #FFFFFF; }
.TPnumber { color: #000000; background-color: #FFFFFF; }
.TPchar { color: #008080; background-color: #FFFFFF; }
.TPstring { color: #FF0000; background-color: #FFFFFF; }
.TPbracket { color: #FF0000; background-color: #FFFFFF; }
.TPoperator { color: #000000; background-color: #FFFFFF; }
&lt;/style&gt;
&lt;pre&gt;
&lt;span class="TPcomment2"&gt;--Shane Devane&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--August 2005&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--http://practicalsqlserver.blogspot.com&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--BUSINESS TASK&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--replace old phone number (values) with new &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--phone numbers (values) in members table&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--CODE PURPOSE&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--update a column value using the corrosponding &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--value in another table across all rows in the &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--table&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--PROBLEM&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--Two tables. table (A) is large (500K+ rows) and&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--contains only 2 columns, 1 column is the old &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--value phone number (which is the value in table&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(b)) and the 2nd column in table (A) is the new&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--value and needs to get put into table (b)&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--SOLUTION&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--get all the old values in table (b) and for &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--each value, loop through each value and simply&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--UPDATE the with the new value&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--STEPPING THROUGH&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--1. using an INNER JOIN, get the old values &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--from the smaller table (b), and the get the new&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--values from the large table (a) into a temp &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--table (inner join not used in example version!)&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--2. loop through the results and UPDATE the old &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--value in table (b) with the new value.&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--USAGE&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--you will need to adjust a few lines of code &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--below&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(1) your main query to retrive the correct &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--"OLD Value" and new values&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(2) the UPDATE command you wish to perform on &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--each row(s)&lt;/span&gt;

&lt;span class="TPkeyword1"&gt;USE &lt;/span&gt;Northwind

&lt;span class="TPcomment2"&gt;--initialise variables&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;DECLARE &lt;/span&gt;@oldValue &lt;span class="TPkeyword1"&gt;VARCHAR&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;800&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;DECLARE &lt;/span&gt;@replaceValue &lt;span class="TPkeyword1"&gt;VARCHAR&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;800&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--get oldvalues and new values into temp table&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;IF      &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;
        object_id&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPchar"&gt;'tempdb..#TBCopy_08_2005'&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;IS NOT NULL&lt;/span&gt;
        &lt;span class="TPbracket"&gt;)&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;BEGIN&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;DROP TABLE &lt;/span&gt;&lt;span class="TPstring"&gt;"#TBCopy_08_2005"&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;END&lt;/span&gt;

&lt;span class="TPkeyword1"&gt;CREATE TABLE &lt;/span&gt;#TBCopy_08_2005 &lt;span class="TPbracket"&gt;(&lt;/span&gt;
oldValue &lt;span class="TPkeyword1"&gt;VARCHAR&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;800&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;,
replaceValue &lt;span class="TPkeyword1"&gt;VARCHAR&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPnumber"&gt;800&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;
&lt;span class="TPbracket"&gt;) &lt;/span&gt;
&lt;span class="TPkeyword1"&gt;DECLARE &lt;/span&gt;sqlCursor &lt;span class="TPkeyword1"&gt;CURSOR &lt;/span&gt;LOCAL &lt;span class="TPkeyword1"&gt;FOR &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;oldValue, replaceValue
        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;#TBCopy_08_2005

&lt;span class="TPcomment2"&gt;--(1) populate temporary table&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--[user needs to edit]&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;INSERT &lt;/span&gt;#TBCopy_08_2005
        &lt;span class="TPbracket"&gt;(&lt;/span&gt;oldValue,replaceValue&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;ContactName, ContactTitle
        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;customers

&lt;span class="TPcomment2"&gt;--main loop &lt;/span&gt;
&lt;span class="TPkeyword1"&gt;OPEN &lt;/span&gt;sqlCursor
&lt;span class="TPkeyword1"&gt;FETCH NEXT      FROM &lt;/span&gt;sqlCursor
                &lt;span class="TPkeyword1"&gt;INTO &lt;/span&gt;@oldValue, @replaceValue
&lt;span class="TPkeyword1"&gt;WHILE &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;@@FETCH_STATUS &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPnumber"&gt;0&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;BEGIN&lt;/span&gt;

        &lt;span class="TPcomment2"&gt;--(2) perform update for rows&lt;/span&gt;
        &lt;span class="TPcomment2"&gt;--[user needs to edit]&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;UPDATE &lt;/span&gt;orders  
        &lt;span class="TPkeyword1"&gt;SET &lt;/span&gt;ShipName &lt;span class="TPoperator"&gt;= &lt;/span&gt;@replaceValue
        &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;ShipName &lt;span class="TPoperator"&gt;= &lt;/span&gt;@oldValue
       
        &lt;span class="TPkeyword1"&gt;FETCH NEXT      &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;sqlCursor
        &lt;span class="TPkeyword1"&gt;INTO &lt;/span&gt;@oldValue, @replaceValue

        &lt;span class="TPkeyword1"&gt;END&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;CLOSE &lt;/span&gt;sqlCursor

&lt;span class="TPcomment2"&gt;--clean up variables&lt;/span&gt;
DEALLOCATE sqlCursor


&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15480284-112437222184961723?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112437222184961723/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112437222184961723' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112437222184961723'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112437222184961723'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/08/update-table-values-from-another-table.html' title='UPDATE table values from another table'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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-15480284.post-112427757416504067</id><published>2005-08-17T04:18:00.000-07:00</published><updated>2005-08-23T03:22:58.403-07:00</updated><title type='text'>Bulk UPDATE of a large table</title><content type='html'>&lt;style type="text/css"&gt;
.TPtext { color: #000000; background-color: #FFFFFF; }
.TPkeyword1 { color: #0000FF; background-color: #FFFFFF; }
.TPcomment2 { color: #008080; background-color: #FFFFFF; }
.TPnumber { color: #000000; background-color: #FFFFFF; }
.TPchar { color: #008080; background-color: #FFFFFF; }
.TPstring { color: #FF0000; background-color: #FFFFFF; }
.TPbracket { color: #FF0000; background-color: #FFFFFF; }
.TPoperator { color: #000000; background-color: #FFFFFF; }
&lt;/style&gt;&lt;pre&gt;&lt;span class="TPcomment2"&gt;--Shane Devane&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--August 2005&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--http://practicalsqlserver.blogspot.com&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--BUSINESS TASK&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--reset product boolean value to allow for &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--regeneration&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--CODE PURPOSE&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--to update a column(s) value to a set value &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--within all rows in a large table without &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--causing locking issues&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--SOLUTION&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--to store all row IDs that need to be changed&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--from large table into a temporary table &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(with index) and then loop through and update&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--rows in bulk groups ie. using TOP statements&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--to define maximum rows to update.&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--STEPPING THROUGH&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--1. get all row IDs that need to be updated and &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--save into temporary table&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--2. loop through temporary table&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--3. get the TOP 100 etc. IDs from the temporary &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--table and perform the UPDATE&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--4. update the temporary and mark row IDs as &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--being updated eg. "done"&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--USAGE&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--you will need to adjust a few lines of code &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--below&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(1) your main query to retrive the row IDs from &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--your large table&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(2) the UPDATE command you wish to perform on &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--each row(s)&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--(3) adjust to two sub query commands TOP value &lt;/span&gt;
&lt;span class="TPcomment2"&gt;--to allow for bulk updates&lt;/span&gt;

&lt;span class="TPkeyword1"&gt;USE &lt;/span&gt;Northwind

&lt;span class="TPcomment2"&gt;--initialise variables&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;DECLARE &lt;/span&gt;@&lt;span class="TPkeyword1"&gt;count &lt;/span&gt;INT

&lt;span class="TPcomment2"&gt;--create ID container table with index&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;IF &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;object_id&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPchar"&gt;'tempdb..#BulkUpdate_08_2005'&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;IS NOT NULL&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;BEGIN&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;DROP TABLE &lt;/span&gt;&lt;span class="TPstring"&gt;"#BulkUpdate_08_2005"&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;END&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;CREATE TABLE &lt;/span&gt;#BulkUpdate_08_2005 &lt;span class="TPbracket"&gt;(&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;rowID &lt;/span&gt;INT,
done BIT &lt;span class="TPkeyword1"&gt;DEFAULT &lt;/span&gt;&lt;span class="TPnumber"&gt;0&lt;/span&gt;
&lt;span class="TPbracket"&gt;) &lt;/span&gt;
&lt;span class="TPkeyword1"&gt;CREATE  &lt;/span&gt;CLUSTERED &lt;span class="TPkeyword1"&gt;INDEX &lt;/span&gt;#IndexBulkUpdate_08_2005
&lt;span class="TPkeyword1"&gt;ON &lt;/span&gt;#BulkUpdate_08_2005 &lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPkeyword1"&gt;rowID&lt;/span&gt;&lt;span class="TPbracket"&gt;)&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--(1) populate temporary table&lt;/span&gt;
&lt;span class="TPcomment2"&gt;--[user needs to edit]&lt;/span&gt;
&lt;span class="TPkeyword1"&gt;INSERT &lt;/span&gt;#BulkUpdate_08_2005 &lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPkeyword1"&gt;rowID&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;SELECT DISTINCT &lt;/span&gt;EmployeeID
        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;Employees
        &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;Country &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPchar"&gt;'USA'&lt;/span&gt;

&lt;span class="TPcomment2"&gt;--main loop &lt;/span&gt;
&lt;span class="TPkeyword1"&gt;SELECT  &lt;/span&gt;@&lt;span class="TPkeyword1"&gt;count &lt;/span&gt;&lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPkeyword1"&gt;COUNT&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPoperator"&gt;*&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;#BulkUpdate_08_2005
        &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;done &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPnumber"&gt;0&lt;/span&gt;

&lt;span class="TPkeyword1"&gt;WHILE &lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;@&lt;span class="TPkeyword1"&gt;count &lt;/span&gt;&lt;span class="TPoperator"&gt;&amp;gt; &lt;/span&gt;&lt;span class="TPnumber"&gt;0&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;BEGIN&lt;/span&gt;

        &lt;span class="TPcomment2"&gt;--(2) perform update for rows&lt;/span&gt;
        &lt;span class="TPcomment2"&gt;--[user needs to edit]&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;UPDATE &lt;/span&gt;Employees
        &lt;span class="TPkeyword1"&gt;SET &lt;/span&gt;Country &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPchar"&gt;'United States' &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;EmployeeID &lt;span class="TPkeyword1"&gt;IN     &lt;/span&gt;
                        &lt;span class="TPbracket"&gt;(&lt;/span&gt;
                        &lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;TOP &lt;span class="TPnumber"&gt;1 &lt;/span&gt;&lt;span class="TPkeyword1"&gt;rowID &lt;/span&gt;
                        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;#BulkUpdate_08_2005
                        &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;done &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPnumber"&gt;0&lt;/span&gt;
                        &lt;span class="TPkeyword1"&gt;ORDER BY &lt;/span&gt;&lt;span class="TPkeyword1"&gt;rowID &lt;/span&gt;&lt;span class="TPkeyword1"&gt;DESC &lt;/span&gt;
                        &lt;span class="TPbracket"&gt;)&lt;/span&gt;

        &lt;span class="TPcomment2"&gt;--(3) update counters and temporary table&lt;/span&gt;
        &lt;span class="TPcomment2"&gt;--[user needs to edit]&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;UPDATE &lt;/span&gt;#BulkUpdate_08_2005
        &lt;span class="TPkeyword1"&gt;SET &lt;/span&gt;done &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPnumber"&gt;1 &lt;/span&gt;&lt;span class="TPkeyword1"&gt;WHERE rowID IN     &lt;/span&gt;
                        &lt;span class="TPbracket"&gt;(&lt;/span&gt;
                        &lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;TOP &lt;span class="TPnumber"&gt;1 &lt;/span&gt;&lt;span class="TPkeyword1"&gt;rowID &lt;/span&gt;
                        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;#BulkUpdate_08_2005
                        &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;done &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPnumber"&gt;0&lt;/span&gt;
                        &lt;span class="TPkeyword1"&gt;ORDER BY &lt;/span&gt;&lt;span class="TPkeyword1"&gt;rowID &lt;/span&gt;&lt;span class="TPkeyword1"&gt;DESC &lt;/span&gt;
                        &lt;span class="TPbracket"&gt;)&lt;/span&gt;
   
        &lt;span class="TPkeyword1"&gt;SELECT &lt;/span&gt;@&lt;span class="TPkeyword1"&gt;count &lt;/span&gt;&lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPkeyword1"&gt;COUNT&lt;/span&gt;&lt;span class="TPbracket"&gt;(&lt;/span&gt;&lt;span class="TPoperator"&gt;*&lt;/span&gt;&lt;span class="TPbracket"&gt;) &lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;FROM &lt;/span&gt;#BulkUpdate_08_2005
        &lt;span class="TPkeyword1"&gt;WHERE &lt;/span&gt;done &lt;span class="TPoperator"&gt;= &lt;/span&gt;&lt;span class="TPnumber"&gt;0&lt;/span&gt;

        &lt;span class="TPcomment2"&gt;--pause 30 seconds to let DB recoupe&lt;/span&gt;
        WAITFOR &lt;span class="TPkeyword1"&gt;DELAY &lt;/span&gt;&lt;span class="TPchar"&gt;'000:00:30'&lt;/span&gt;
        &lt;span class="TPkeyword1"&gt;END&lt;/span&gt;

&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/15480284-112427757416504067?l=practicalsqlserver.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://practicalsqlserver.blogspot.com/feeds/112427757416504067/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=15480284&amp;postID=112427757416504067' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112427757416504067'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/15480284/posts/default/112427757416504067'/><link rel='alternate' type='text/html' href='http://practicalsqlserver.blogspot.com/2005/08/bulk-update-of-large-table.html' title='Bulk UPDATE of a large table'/><author><name>Shane Devane</name><uri>http://www.blogger.com/profile/15562830778690185730</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></feed>
