<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" gd:etag="W/&quot;Ck4HR3w9cSp7ImA9WhRbEEw.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639</id><updated>2012-01-31T03:55:36.269-08:00</updated><category term="Week wise" /><category term="Random" /><category term="MYSQL" /><category term="Sorting" /><category term="CHECKIDENT" /><category term="Declaration" /><category term="Paramter Sniffing" /><category term="Performance" /><category term="ID Generation" /><category term="Date Range" /><category term="FilteredIndex" /><category term="Star Schema" /><category term="Locking Modes" /><category term="PARTITION" /><category term="Restrict User" /><category term="SQL Server" /><category term="Fact Table" /><category term="Paging" /><category term="Data Model" /><category term="Schema" /><category term="Report" /><category term="Lookup Table" /><category term="Snowflake Schema" /><category term="SLOW DELETE" /><category term="Schema Comparison" /><category term="BCP" /><category term="ROW_NUMBER" /><category term="Dimension" /><category term="white paper" /><category term="troubleshooting" /><category term="Between" /><category term="SQL Server Management Studio" /><category term="Data Loading" /><category term="Index" /><category term="COALESCE" /><category term="maintenance" /><category term="History" /><category term="DISTINCT" /><category term="MARS" /><category term="INCLUDE" /><category term="Isolation" /><category term="LINQ" /><category term="Fill Factor" /><category term="SQL Server 2008" /><category term="Hot Fix" /><category term="DateDiff" /><category term="GuideLines" /><category term="Restore" /><category term="Combine Rows" /><category term="LINKED SERVER" /><category term="Recovery" /><category term="CHEK CONSTRAINT" /><category term="SQL Server 2005" /><category term="Logon" /><category term="XML" /><category term="RESEED" /><category term="GO" /><category term="SWITCH" /><category term="Attribute" /><category term="File groups" /><category term="Service Pack1" /><category term="tempdb" /><category term="Hierarchy" /><category term="Service Pack2" /><category term="Suspect Mode" /><category term="Locking" /><category term="Upgrade" /><category term="Single User" /><category term="Collation" /><category term="CTE" /><category term="DMV" /><category term="Database" /><category term="DELETE" /><category term="ROWNUM" /><category term="multi user" /><category term="DBCC" /><category term="Browser Service" /><category term="Sequence" /><category term="sampling" /><title>Sam's SQL Server blog</title><subtitle type="html">Tips, Design principles, Best practices...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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>54</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/YJPM" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="blogspot/yjpm" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;A0cNSHY5fSp7ImA9WhRVEE4.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-7803892241925497963</id><published>2012-01-08T08:11:00.000-08:00</published><updated>2012-01-08T08:11:39.825-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-08T08:11:39.825-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Paramter Sniffing" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Plan Cache and Parameter sniffing in SQL Server 2008</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;  &lt;span style="font-family: Calibri;"&gt;I have recently encountered&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;performance problem with one of my production servers due to parameter sniffing in SQL Server 2008. It actually took us quite a bit time to find out the problem and I thought it would be really useful to share it. So what is parameter sniffing?&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span style="font-family: Calibri;"&gt;“Parameter sniffing is the process whereby SQL Server creates an optimal plan for a stored procedure by using the calling parameters that are passed the first time a stored procedure is executed”. &lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;In Other words the plan is never regenerated / optimized after the first execution which forces the optimizer to use the same plan irrespective of the parameters.&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: Calibri;"&gt;&lt;span style="mso-spacerun: yes;"&gt;&amp;nbsp;&lt;/span&gt;Though there are many ways to identify the parameter sniffing the simplest behavior is there is a considerable difference in the query execution times when executed using SQL Query Analyzer and actual stored procedure call from the application.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span style="font-family: Calibri;"&gt;I have given some of the commonly used solutions to solve the “Parameter sniffing”&lt;/span&gt;&lt;/div&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: Calibri;"&gt;Trace Flag&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Calibri;"&gt;The simplest of all the solutions is to switch of the Parameter Sniffing using the trace flag 4136. The DBCC syntax is given below&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span style="font-family: Calibri;"&gt;DBCC TRACEON (4136)&lt;/span&gt;&lt;/div&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: Calibri;"&gt;Local Variable Substitution &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Calibri;"&gt;We can force the SQL optimizer to temporarily suspend the Parameter Sniffing by using local variables substitution for the parameters and use only the local variables in the query as shown below&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;CREATE&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;PROCEDURE&lt;/span&gt; pGetPatientName&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;(&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@P_PatientID &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;50&lt;span style="color: grey;"&gt;),&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;&lt;span style="mso-tab-count: 1;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;@P_Name &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;50&lt;span style="color: grey;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;AS&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;BEGIN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;DECLARE&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; @V_PatientID &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;50&lt;span style="color: grey;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;DECLARE&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; @V_Name &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;50&lt;span style="color: grey;"&gt;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;SET&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; @V_Name &lt;span style="color: grey;"&gt;=&lt;/span&gt; @P_Name&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;SET&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; @V_PatientID &lt;span style="color: grey;"&gt;=&lt;/span&gt; @P_PatientID&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt; mso-layout-grid-align: none;"&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;SELECT&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;ForeName&lt;span style="color: grey;"&gt;,&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;SurName &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;FROM&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;Patient &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;WHERE&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; PatientID &lt;span style="color: grey;"&gt;=&lt;/span&gt; @V_PatientID&lt;span style="color: red;"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: grey; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt;AND&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-no-proof: yes;"&gt; ForeName &lt;span style="color: grey;"&gt;LIKE &lt;/span&gt;@V_Name&lt;span style="color: grey;"&gt;+&lt;/span&gt;&lt;span style="color: red;"&gt;'%'&lt;/span&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; line-height: 115%; mso-no-proof: yes;"&gt;END&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;b style="mso-bidi-font-weight: normal;"&gt;&lt;span style="font-family: Calibri;"&gt;Recompile &amp;amp; Query Hints&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin: 0in 0in 10pt;"&gt;&lt;span style="font-family: Calibri;"&gt;You can also make the optimizer to force for the plan compilation using the options such as&lt;/span&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-family: Calibri;"&gt;1.&lt;/span&gt;&lt;span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Execute the query “With Recompile” option&lt;/span&gt;&lt;br /&gt;
&lt;div class="MsoListParagraphCxSpMiddle" style="margin: 0in 0in 0pt 0.5in; mso-list: l0 level1 lfo1; text-indent: -0.25in;"&gt;&lt;span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-family: Calibri;"&gt;2.&lt;/span&gt;&lt;span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Alter the Procedure / Drop &amp;amp; Re Create Indexes&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoListParagraphCxSpLast" style="margin: 0in 0in 10pt 0.5in; mso-list: l0 level1 lfo1; text-indent: -0.25in;"&gt;&lt;span style="mso-bidi-font-family: Calibri; mso-bidi-theme-font: minor-latin;"&gt;&lt;span style="mso-list: Ignore;"&gt;&lt;span style="font-family: Calibri;"&gt;3.&lt;/span&gt;&lt;span style="font-size-adjust: none; font-stretch: normal; font: 7pt/normal &amp;quot;Times New Roman&amp;quot;;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Calibri;"&gt;Specifying Query Hints&lt;/span&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/8857019241081536639-7803892241925497963?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/7803892241925497963/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=7803892241925497963" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/7803892241925497963?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/7803892241925497963?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2012/01/plan-cache-and-parameter-sniffing-in.html" title="Plan Cache and Parameter sniffing in SQL Server 2008" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;AkIMRXk4fyp7ImA9WhRSF0Q.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-737467352471306851</id><published>2011-11-20T06:16:00.000-08:00</published><updated>2011-11-20T06:16:24.737-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-20T06:16:24.737-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="DISTINCT" /><title>How to retrieve TOP Distinct values in SQL Server</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;I have recently got a requirement from one of our customers to show recently used distinct items for a particular report. While writing the query, I found out it is not straight forward as there is a little cache “recent items” in the requirement. &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div class="MsoNormal" style="line-height: normal; margin: 0in 0in 0pt;"&gt;&lt;span style="font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;;"&gt;This can be achieved by using a simple trick as shown in the below example. To illustrated the scenario, I have create a sample table with data&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;
&lt;strong&gt;Sample Data&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
CREATE TABLE SaleItem ( ItemName NVARCHAR(30),SaleDate DATETIME)&lt;br /&gt;
&lt;br /&gt;
insert into SaleItem  SELECT 'Book',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Book',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Book',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Pencil',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Pencil',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Pencil',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Pen',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Pen',GETDATE()&lt;br /&gt;
insert into SaleItem  SELECT 'Pen',GETDATE()&lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;SQL Query&lt;/strong&gt;&lt;br /&gt;
&lt;br /&gt;
WITH ItemList AS&lt;br /&gt;
(&lt;br /&gt;
SELECT&lt;br /&gt;
IL.ItemName,&lt;br /&gt;
IL.SaleDate,&lt;br /&gt;
ROW_NUMBER() OVER (ORDER BY IL.SaleDate DESC) as 'RankID'&lt;br /&gt;
FROM  &lt;br /&gt;
SaleItem IL&lt;br /&gt;
)&lt;br /&gt;
SELECT DISTINCT TOP 30 &lt;br /&gt;
IL.ItemName,&lt;br /&gt;
IL.SaleDate &lt;br /&gt;
FROM ItemList  IL&lt;br /&gt;
WHERE NOT EXISTS (Select 1 FROM ItemList IL2 &lt;br /&gt;
WHERE ( IL2.ItemName = IL.ItemName )&lt;br /&gt;
AND IL.RankID &amp;lt; IL2.RankID)&lt;br /&gt;
ORDER BY SaleDate DESC&lt;br /&gt;
&lt;br /&gt;
The trick is assigning RankID to each row and eliminate the duplicate row&amp;nbsp;&amp;nbsp;by comparing the RankID while selecting the records.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-737467352471306851?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/737467352471306851/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=737467352471306851" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/737467352471306851?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/737467352471306851?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2011/11/how-to-retrieve-top-distinct-values-in.html" title="How to retrieve TOP Distinct values in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CE4DRHw-fyp7ImA9Wx9RF0g.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-7179886269386727057</id><published>2010-12-19T02:02:00.000-08:00</published><updated>2010-12-19T02:02:55.257-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-19T02:02:55.257-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="LINKED SERVER" /><category scheme="http://www.blogger.com/atom/ns#" term="MYSQL" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>How to Create Linked Server between MYSQL and SQL Server</title><content type="html">Steps to configure Linked Server &lt;br /&gt;
&lt;br /&gt;
&lt;strong&gt;Step 1:&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Install the My SQL OBDC connector on the SQL Server machine (This will come default if you have already installed My SQL in the SQL Server machine. The setup file for the drive is attached with in the mail.&lt;/li&gt;
&lt;li&gt;Create an ODBC System DSN with the name “MYSQL” using the driver installed on the previous step as shown in the below image &lt;div&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;a href="http://4.bp.blogspot.com/_3LWHOOFVwHA/TQ3S9pdeKpI/AAAAAAAAAj4/ExA8yPHhE2A/s1600/CREATE_ODBC.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="268" src="http://4.bp.blogspot.com/_3LWHOOFVwHA/TQ3S9pdeKpI/AAAAAAAAAj4/ExA8yPHhE2A/s320/CREATE_ODBC.bmp" width="320" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&amp;nbsp;&lt;strong&gt;Step 2: &lt;/strong&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;&lt;div&gt;Create a linked server between the SQL Server and the My SQL Server using the steps given below. &lt;/div&gt;&lt;ul&gt;&lt;li&gt;Connect to the SQL Server instance and expand to the section Linked Servers&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Right click on the Linked Server and select the option “New Linked Server”&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_3LWHOOFVwHA/TQ3V2sRTHeI/AAAAAAAAAkA/MtGBbMrMbnc/s1600/LINKED_SERVER.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" n4="true" src="http://1.bp.blogspot.com/_3LWHOOFVwHA/TQ3V2sRTHeI/AAAAAAAAAkA/MtGBbMrMbnc/s1600/LINKED_SERVER.bmp" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Specify the connection details to the ODBC driver as shown below&lt;/div&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_3LWHOOFVwHA/TQ3WfK1csuI/AAAAAAAAAkE/t9XzAOGW-3o/s1600/CREATE_LINKEDSERVER.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" n4="true" src="http://3.bp.blogspot.com/_3LWHOOFVwHA/TQ3WfK1csuI/AAAAAAAAAkE/t9XzAOGW-3o/s320/CREATE_LINKEDSERVER.bmp" width="320" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;Details&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;Linked Server : MYSQL&lt;br /&gt;
Provider : Microsoft OLE DB provider for ODBC drivers&lt;br /&gt;
Product Name : MYSQL&lt;br /&gt;
Data Source : MYSQL&lt;br /&gt;
Provider String : DRIVER={MySQL ODBC 5.1 Driver};SERVER=SAMSUDEEN;PORT=3306;DATABASE=salem_dbo;USER=root;PASSWORD=password&lt;br /&gt;
Catalog : salem_dbo&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Go to the Security Tab and give tab and give the MY SQL username &amp;amp; password under the option “Be made using this security context”&lt;/li&gt;
&lt;li&gt;Go to the Server options and set value true for RPC &amp;amp; RPC Out properties.&lt;/li&gt;
&lt;/ul&gt;&lt;strong&gt;Step 3:&lt;/strong&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Click OK to create the linked server. You can test the connection using the test connection option as shown below&lt;/li&gt;
&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: left;"&gt;&lt;a href="http://1.bp.blogspot.com/_3LWHOOFVwHA/TQ3Xq05Bi1I/AAAAAAAAAkI/0qo8HVYB0UM/s1600/TEST_LINKED_SERVER.bmp" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" n4="true" src="http://1.bp.blogspot.com/_3LWHOOFVwHA/TQ3Xq05Bi1I/AAAAAAAAAkI/0qo8HVYB0UM/s1600/TEST_LINKED_SERVER.bmp" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/ul&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&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/8857019241081536639-7179886269386727057?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/7179886269386727057/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=7179886269386727057" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/7179886269386727057?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/7179886269386727057?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2010/12/how-to-create-linked-server-between.html" title="How to Create Linked Server between MYSQL and SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_3LWHOOFVwHA/TQ3S9pdeKpI/AAAAAAAAAj4/ExA8yPHhE2A/s72-c/CREATE_ODBC.bmp" height="72" width="72" /><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;CU4CSH88fip7ImA9WxBaE0k.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8865696722560588295</id><published>2010-03-23T04:30:00.000-07:00</published><updated>2010-03-23T04:32:49.176-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-23T04:32:49.176-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="GO" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2005" /><title>How to run a SQL batch multiple times</title><content type="html">&lt;span style="font-size:85%;"&gt;Today I came across one surprising use of GO statement in SQL Server which is solely used as batch terminator in SQL Server utilities such as SQL Server Management Studio etc. Though “GO” is not a Transact –SQL statement it can be used in multiple ways .One such example is to run a batch of statements as illustrated below &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;CREATE TABLE TestData ( Name VARCHAR(100), Age INT)&lt;br /&gt;GO&lt;br /&gt;Insert into TestData&lt;br /&gt;SELECT 'John' ,28&lt;br /&gt;GO 100 &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;In the above example I have inserted 100 rows of test data by just specifying 100 next to the GO statement. All these days I have used the traditional while loop statement for doing this, now just specify the number next to GO statment the job is done. This feature is no where documented and supported only in SQL Server 2005 and greater versions &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-8865696722560588295?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8865696722560588295/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8865696722560588295" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8865696722560588295?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8865696722560588295?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2010/03/how-to-run-sql-batch-multiple-times.html" title="How to run a SQL batch multiple times" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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>3</thr:total></entry><entry gd:etag="W/&quot;DEMNRno8fyp7ImA9WxBVGUw.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-5856482791162831878</id><published>2010-02-22T08:36:00.000-08:00</published><updated>2010-02-23T01:14:57.477-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-23T01:14:57.477-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Suspect Mode" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="Recovery" /><title>How to recover a Database in suspect mode</title><content type="html">&lt;p&gt;&lt;span style="font-size:85%;"&gt;I was struck with a database which is on suspect mode and need to recover it without any recent backups. I searched across the net and found these steps which are quite useful &lt;/span&gt;&lt;/p&gt;&lt;span style="font-size:85%;"&gt;&lt;p&gt;&lt;strong&gt;Step 1:&lt;br /&gt;&lt;/strong&gt;Clear the suspect mode of the database using sp_resetstatus &lt;em&gt;&lt;span style="font-size:78%;"&gt;DatabaseName&lt;/span&gt;&lt;/em&gt;. This will clear the suspect flag and make the database available online &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 2:&lt;/strong&gt;&lt;br /&gt;Change the database status to Emergency using the following command. Emergency mode allows you to access the databases as normal but with no consistency guarantee. This option also allows us to export the table data so that we can minimize the damage.&lt;br /&gt;ALTER DATABASE &lt;em&gt;&lt;span style="font-size:78%;"&gt;DatabaseName&lt;/span&gt;&lt;/em&gt; &lt;database&gt;SET EMERGENCY; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 3:&lt;/strong&gt;&lt;br /&gt;Restrict database to single user by changing the access mode as mentioned below&lt;br /&gt;ALTER DATABASE &lt;em&gt;&lt;span style="font-size:78%;"&gt;DatabaseName&lt;/span&gt;&lt;/em&gt; &lt;database&gt;SET SINGLE_USER; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Step 4:&lt;/strong&gt;&lt;br /&gt;Run the CHECKDB command with “REPAIR_ALLOW_DATA_LOSS” option. This option should be tried as last option as it always behaves the way it is named. We are not sure of what data it removes.&lt;br /&gt;DBCC CHECKDB (&lt;em&gt;&lt;span style="font-size:78%;"&gt;DatabaseName&lt;database&gt;&lt;/span&gt;&lt;/em&gt;, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS; &lt;/p&gt;&lt;p&gt;There are some best (simple) practices which prevents us from such failures. Below are some of them &lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Backup your data frequently ( daily or once in two days) &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Have multiple backups. Move the backups to external drives or tapes frequently &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Validate that your backups are good by doing trial restores to alternate server &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Run CHECKDB regularly&lt;/span&gt;&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/8857019241081536639-5856482791162831878?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/5856482791162831878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=5856482791162831878" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/5856482791162831878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/5856482791162831878?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2010/02/how-to-recover-database-in-suspect-mode.html" title="How to recover a Database in suspect mode" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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>3</thr:total></entry><entry gd:etag="W/&quot;D04MSXg4fip7ImA9WxNaEEg.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-859811550949680887</id><published>2009-11-18T07:33:00.000-08:00</published><updated>2009-11-24T01:46:28.636-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-24T01:46:28.636-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="FilteredIndex" /><category scheme="http://www.blogger.com/atom/ns#" term="Index" /><title>Filter Index in SQL Server 2008</title><content type="html">&lt;span style="font-size:85%;"&gt;SQL Server 2008 introduces a new type of index called “Filtered Index” which is basically a covered indexed designed to retrieve a smaller set of qualified data from a table. This can be a very hand feature particularly in working with larger data tables.&lt;br /&gt;A Filter index allows us to apply filter criteria on the index definition so that a particular sub set of rows in a table alone can be indexed. Filter indexes can be only created as non clustered index &lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Syntax&lt;br /&gt;CREATE INDEX Index Name ON Table Name (Columns..) Filter Criteria &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Example&lt;br /&gt;CREATE INDEX IX_RegistrationDate ON Employee (RegistrationDate) WHERE RegistrationDate IS NOT NULL&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;strong&gt;Advantages of Filtered Index&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Improved Performance&lt;/strong&gt;: The performance of the query is improved especially with larger tables as it has to scan through as lesser number of records&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Lesser Maintenance Cost&lt;/strong&gt;: Since the size of the index is smaller compared to full table index the index maitntenance cost will be much lesser. Also index maintenance jobs like update statics could be faster. &lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;strong&gt;Lesser Storage&lt;/strong&gt;: The amount of space required for index storage will also be very less since the size of the index is smaller compared to the full table index &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Analysis&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;I have created a table patient with 1 lakh records of different Organisations and populated 70% data with OwnerOrganisation value 10 and selected the record with OwnerOrganisation value ="6" &lt;/p&gt;&lt;p&gt;Normal Index&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-family:courier new;font-size:100%;"&gt;&lt;strong&gt;CREATE INDEX IX_OwnerOrganisation ON Patient(OwnerOrganisationUID)&lt;/strong&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a href="http://3.bp.blogspot.com/_3LWHOOFVwHA/SwQa1pmylsI/AAAAAAAAAXo/FgJrCAiCU3c/s1600/NormalIndex.bmp"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 164px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5405474961755379394" border="0" alt="" src="http://3.bp.blogspot.com/_3LWHOOFVwHA/SwQa1pmylsI/AAAAAAAAAXo/FgJrCAiCU3c/s320/NormalIndex.bmp" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Filterer Index to exclude records of Organisation =10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;CREATE INDEX IX_OwnerOrganisation ON Patient(OwnerOrganisationUID) &lt;/span&gt;&lt;span style="font-family:courier new;"&gt;WHERE OwnerOrganisationUID &lt;&gt;10&lt;/span&gt; &lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3LWHOOFVwHA/SwQbMUGO_EI/AAAAAAAAAXw/yrpHqNCK9D8/s1600/ImprovedIndex.bmp"&gt;&lt;img style="WIDTH: 320px; HEIGHT: 165px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5405475351118675010" border="0" alt="" src="http://2.bp.blogspot.com/_3LWHOOFVwHA/SwQbMUGO_EI/AAAAAAAAAXw/yrpHqNCK9D8/s320/ImprovedIndex.bmp" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Index creation is always case to case basis as the need to create a filtered index should be carefully analysed based on the WHERE clause and the data distribution in the table. It is recommended to create filtered indexes if the data retrieved to be a smaller subset. Scenarios like columns with NULL data as major set and NOT NULL values of defined subsets could be a suitable candidate&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-859811550949680887?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/859811550949680887/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=859811550949680887" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/859811550949680887?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/859811550949680887?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/11/filter-index-in-sql-server-2008.html" title="Filter Index in SQL Server 2008" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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/_3LWHOOFVwHA/SwQa1pmylsI/AAAAAAAAAXo/FgJrCAiCU3c/s72-c/NormalIndex.bmp" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;D0UGSXszeSp7ImA9WxNUFE0.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-2701879700247615790</id><published>2009-11-04T22:44:00.000-08:00</published><updated>2009-11-04T23:13:48.581-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-04T23:13:48.581-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Between" /><category scheme="http://www.blogger.com/atom/ns#" term="Date Range" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>How to select records with in Date Range</title><content type="html">&lt;span style="font-size:85%;"&gt;Selecting records within a given date range is one of the common requirement these days, but many people find it difficult. The most common mistake people make is always try to do the comparison as the same as the way we do for numbers as shown below&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Wrong comparison&lt;/strong&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM Table&lt;br /&gt;WHERE StartDate &gt;= @P_StartDate&lt;br /&gt;AND EndDate =&lt; @P_EndDate &lt;br /&gt;&lt;br /&gt;This wills not retrieve the qualified records as the comparison will not be against the range instead it will be against two dates and it will ignore any records fall within the range. The trick is to change the parameter to check the date in the reverse order as shown below. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Modified Query &lt;/strong&gt;&lt;br /&gt;SELECT *&lt;br /&gt;FROM Table &lt;br /&gt;WHERE EndDate &gt; = @P_StartDate&lt;br /&gt;AND StartDate =&lt; @P_EndDate &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-2701879700247615790?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/2701879700247615790/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=2701879700247615790" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/2701879700247615790?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/2701879700247615790?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/11/how-to-select-records-with-in-date.html" title="How to select records with in Date Range" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;DE8GRnY9eyp7ImA9WxJbFkQ.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-1179281474401537771</id><published>2009-07-27T04:59:00.000-07:00</published><updated>2009-07-27T05:13:47.863-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-27T05:13:47.863-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sorting" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Parameterized sorting in SQL Server</title><content type="html">&lt;span style="font-size:85%;"&gt;Applications that allow users to sort data by different columns of the table might need to go for dynamic stored procedures or will end up in adding multiple procedures based on the number of combinations. In SQL Server we can achieve this easily through parameterized sorting.&lt;br /&gt;As shown in the below example we can have a parameter which says the column on which the sort criteria can be applied and using the case statement we achieve the results without going for a dynamic /multiple stored procedures. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;DECLARE @SortOrder INT&lt;br /&gt;SET @SortOrder =1&lt;br /&gt;SELECT ForeName,&lt;br /&gt;SurName,&lt;br /&gt;PASID&lt;br /&gt;FROM PAtient&lt;br /&gt;WHERE Forename LIKE 'A%'&lt;br /&gt;ORDER BY CASE WHEN @SortOrder = 1 THEN ForeName&lt;br /&gt;WHEN @SortOrder = 2 THEN SurName&lt;br /&gt;ELSE PASID&lt;br /&gt;END &lt;/strong&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-1179281474401537771?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/1179281474401537771/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=1179281474401537771" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/1179281474401537771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/1179281474401537771?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/07/parameterized-sorting-in-sql-server.html" title="Parameterized sorting in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CkcERn8yfCp7ImA9WxJUEUg.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8640171518846066972</id><published>2009-07-09T07:15:00.001-07:00</published><updated>2009-07-09T07:33:27.194-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-09T07:33:27.194-07:00</app:edited><title>Generate Index scripts using included columns</title><content type="html">&lt;span style="font-size:85%;"&gt;This article is a continuation of the previous article &lt;/span&gt;&lt;a href="http://samsudeenb.blogspot.com/2007/11/scripts-to-drop-and-recreate-indexes-in.html"&gt;&lt;span style="font-size:85%;"&gt;http://samsudeenb.blogspot.com/2007/11/scripts-to-drop-and-recreate-indexes-in.html&lt;/span&gt;&lt;/a&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt; with small enhancement to generate the index scripts with included columns. The below function “fGetIncludedIndex is used to get the included columns for a given index.&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="font-size:78%;"&gt;CREATE FUNCTION fGetIncludedIndex (&lt;br /&gt;@objname VARCHAR(50),&lt;br /&gt;@indid INT&lt;br /&gt;)&lt;br /&gt;RETURNS NVARCHAR(200)&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;DECLARE @V_IncludedCol NVARCHAR(200)&lt;br /&gt;select @V_IncludedCol = COALESCE(@V_IncludedCol + ',', '') +&lt;br /&gt;( select name from sys.syscolumns where id =a.Object_id and colid =a.column_id)&lt;br /&gt;from sys.index_columns a&lt;br /&gt;where object_name(a.object_id) =@objname&lt;br /&gt;and a.index_id =@indid&lt;br /&gt;and a.Is_included_column =1&lt;br /&gt;order by a.index_column_id&lt;br /&gt;return @V_IncludedCol&lt;br /&gt;END &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span &gt;&lt;span style="font-size:85%;"&gt;After creating the function in the DB make a small change to the existing query( highlighted in bold) to generate the index scripts with included columns &lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-size:78%;"&gt;SELECT 'CREATE ' +&lt;br /&gt;CASE IS_UNIQUE WHEN 1 THEN 'UNIQUE ' ELSE ' ' END +&lt;br /&gt;'NONCLUSTERED ' + ' INDEX '+&lt;br /&gt;NAME + ' ' +' ON ' +&lt;br /&gt;OBJECT_NAME (OBJECT_ID) +&lt;br /&gt;'('+&lt;br /&gt;DBO.fGetIndexCols (object_NAME(OBJECT_ID), index_id) + ')'&lt;br /&gt;&lt;strong&gt;+Case when dbo.fGetIncludedIndex(object_NAME(OBJECT_ID), index_id) is null then '' else ' INCLUDE ('+dbo.fGetIncludedIndex(object_NAME(OBJECT_ID), index_id)+')' end +&lt;/strong&gt;&lt;br /&gt;' ON ['+&lt;br /&gt;( SELECT GROUPNAME&lt;br /&gt;FROM SYSFILEGROUPS&lt;br /&gt;WHERE GROUPID = DATA_SPACE_ID&lt;br /&gt;) + ']' IndexScript&lt;br /&gt;FROM SYS.INDEXES&lt;br /&gt;WHERE NAME IS NOT NULL&lt;br /&gt;AND Is_Primary_Key =0&lt;br /&gt;AND type_desc ='NONCLUSTERED'&lt;br /&gt;AND OBJECT_ID &gt; 97 &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-8640171518846066972?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8640171518846066972/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8640171518846066972" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8640171518846066972?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8640171518846066972?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/07/this-article-is-continuation-of_09.html" title="Generate Index scripts using included columns" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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>5</thr:total></entry><entry gd:etag="W/&quot;DEEGQHwyeip7ImA9WxJVGUo.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-3453824919055723063</id><published>2009-07-07T07:16:00.000-07:00</published><updated>2009-07-07T07:23:41.292-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-07T07:23:41.292-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Report" /><category scheme="http://www.blogger.com/atom/ns#" term="Date Range" /><category scheme="http://www.blogger.com/atom/ns#" term="Week wise" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="DateDiff" /><title>How to take week or month wise report in SQL Server</title><content type="html">&lt;span style="font-size:85%;"&gt;I was breaking my head whole day for writing a stored procedure which produces week wise report for plotting a revenue trend. I came across this solution which is fairly a simple one. Just thought of sharing this&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The below code is written using the SQL Server built in functions DATEDIFF &amp;amp; DATEADD to produce the report&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;Select DATEADD(WK, datediff(WK, 0, CollectionDate),0) as week,&lt;br /&gt;SUM(Amount)&lt;br /&gt;from Revenue&lt;br /&gt;group by dateadd(WK, datediff(WK 0, CollectionDate),0)&lt;br /&gt;order by 1 asc&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;The logic here is to find out the corresponding week from Default date (01-01-1900) and adding the default date again to the result will get the corresponding week in date format. The same can be used for generating month wise report as well by just replacing "wk" with "MM"&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Select DATEADD(MM, datediff(MM, 0, CollectionDate),0) as week,&lt;br /&gt;SUM(Amount)&lt;br /&gt;from Revenue&lt;br /&gt;group by dateadd(MM, datediff(MM 0, CollectionDate),0)&lt;br /&gt;order by 1 asc&lt;/strong&gt; &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;strong&gt;Note: &lt;/strong&gt;adding “0” will be automatically converted to default date “01-01-1900” &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-3453824919055723063?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/3453824919055723063/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=3453824919055723063" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3453824919055723063?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3453824919055723063?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/07/how-to-take-week-or-month-wise-report.html" title="How to take week or month wise report in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CUcMQ3w7eyp7ImA9WxJVEU0.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-1893184766267037370</id><published>2009-06-27T04:36:00.000-07:00</published><updated>2009-06-27T04:44:42.203-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-27T04:44:42.203-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Sequence" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="ROWNUM" /><category scheme="http://www.blogger.com/atom/ns#" term="ID Generation" /><title>How to generate Sequence number in SQL Server</title><content type="html">&lt;span style="font-size:85%;"&gt;Sequence number generation is one of the common requirements in all the OLTP applications.SQL Server supports many ways to generate Sequence numbers. The below example explains how to generate multiple sequences dynamically using the SQL Server &lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong&gt;Schema Design&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;img style="TEXT-ALIGN: center; MARGIN: 0px auto 10px; WIDTH: 320px; DISPLAY: block; HEIGHT: 148px; CURSOR: hand" id="BLOGGER_PHOTO_ID_5351970366881631074" border="0" alt="" src="http://3.bp.blogspot.com/_3LWHOOFVwHA/SkYEsVZli2I/AAAAAAAAAW4/k9VvuragNR8/s320/Schema.bmp" /&gt;&lt;span style="font-size:85%;"&gt;This table will hold the configuration parameters for each of the Sequence Types (eg: PurchaseOrder, GRN etc).The column “SequenceName” column will have the unique code for each Sequence type and the “TableName” column is used to map the name of the “IDGenerator” table. (I.e. multiple IDGenerator tables can be created with the same structure and mapped accordingly)&lt;/span&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ID Generation:&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The below stored procedure pGetSEQID is used to generate the new sequence number .It accepts the table name as input and return the new sequence number. Since the IDGenerator table can be different for each ID type the stored procedure is written as dynamic.&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;CREATE PROCEDURE pGetSEQID (&lt;br /&gt;@P_SEQTableName VARCHAR(30)&lt;br /&gt;)&lt;br /&gt;AS&lt;br /&gt;BEGIN&lt;br /&gt;DECLARE @V_SEQValue BIGINT&lt;br /&gt;DECLARE @V_SQLString NVARCHAR(200)&lt;br /&gt;DECLARE @V_ParmDefinition NVARCHAR(200)&lt;br /&gt;DECLARE @V_SEQTableName VARCHAR(30)&lt;br /&gt;SET @V_ParmDefinition = N'@V_SEQValue BIGINT OUTPUT'&lt;br /&gt;SET @V_SQLString = N'INSERT INTO ' +&lt;br /&gt;@P_SEQTableName +&lt;br /&gt;N'(Status) values (''Y'') SELECT @V_SEQValue = SCOPE_IDENTITY()'&lt;br /&gt;exec sp_executesql @V_SQLString,@V_ParmDefinition ,@V_SEQValue =@V_SEQValue OUTPUT&lt;br /&gt;SELECT @V_SEQValue NewSequenceValue&lt;br /&gt;END&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;strong&gt;EXEC pGetSEQID ‘PurchaseOrder’&lt;/strong&gt; will generate the Sequence Number for ID type purchase order&lt;br /&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;We can make use of Prefix and Suffix columns in the IDParamter table to generate the Sequence number with the required format&lt;br /&gt;Eg: “BL0001” , BL100/0908&lt;/span&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-1893184766267037370?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/1893184766267037370/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=1893184766267037370" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/1893184766267037370?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/1893184766267037370?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/06/how-to-generate-sequence-number-in-sql.html" title="How to generate Sequence number in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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/_3LWHOOFVwHA/SkYEsVZli2I/AAAAAAAAAW4/k9VvuragNR8/s72-c/Schema.bmp" height="72" width="72" /><thr:total>4</thr:total></entry><entry gd:etag="W/&quot;A0YHQ3s5fSp7ImA9WxJWEUg.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-7346443159136825110</id><published>2009-06-16T06:27:00.000-07:00</published><updated>2009-06-16T06:32:12.525-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-16T06:32:12.525-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="Random" /><category scheme="http://www.blogger.com/atom/ns#" term="sampling" /><title>How to Select Data in Random Order in SQL Server</title><content type="html">&lt;span style="font-size:85%;"&gt;In number of scenarios we might want to do data sampling or select the data in a Random Order. SQL Server supports various options for data sampling. I have given some of the examples here&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:78%;"&gt;Using NEWID() :&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;SELECT TOP 10 ForeName&lt;br /&gt;FROM Patient&lt;br /&gt;ORDER BY NEWID()&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;&lt;strong&gt;Using PERCENT&lt;/strong&gt;&lt;br /&gt;SELECT TOP 10 ForeName&lt;br /&gt;FROM (SELECT TOP 30 PERCENT ForeName&lt;br /&gt;FROM Patient&lt;br /&gt;ORDER BY ForeName ASC) AS Pat&lt;br /&gt;ORDER BY 1 DESC&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-7346443159136825110?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/7346443159136825110/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=7346443159136825110" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/7346443159136825110?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/7346443159136825110?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/06/how-to-select-data-in-random-order-in.html" title="How to Select Data in Random Order in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CEAFQHo6fip7ImA9WxJSF0Q.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-9178970393071790890</id><published>2009-05-08T07:13:00.000-07:00</published><updated>2009-05-08T07:25:11.416-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-08T07:25:11.416-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="Restore" /><category scheme="http://www.blogger.com/atom/ns#" term="Database" /><category scheme="http://www.blogger.com/atom/ns#" term="History" /><title>How to find the Database Restore Details in SQL Server 2008</title><content type="html">&lt;span style="font-size:85%;"&gt;It is often useful to know the details from where the database is restored.The restore history of the database is stored in the msdb table "restorehistory".I recently came across this query which gives the complete information of restore history including the Restored Login , From &amp;amp; To Location of the Files&lt;br /&gt;&lt;br /&gt;SELECT&lt;br /&gt;rsh.destination_database_name AS [Database],&lt;br /&gt;rsh.user_name AS [Restored By],&lt;br /&gt;CASE WHEN rsh.restore_type = 'D' THEN 'Database'&lt;br /&gt;WHEN rsh.restore_type = 'F' THEN 'File'&lt;br /&gt;WHEN rsh.restore_type = 'G' THEN 'Filegroup'&lt;br /&gt;WHEN rsh.restore_type = 'I' THEN 'Differential'&lt;br /&gt;WHEN rsh.restore_type = 'L' THEN 'Log'&lt;br /&gt;WHEN rsh.restore_type = 'V' THEN 'Verifyonly'&lt;br /&gt;WHEN rsh.restore_type = 'R' THEN 'Revert'&lt;br /&gt;ELSE rsh.restore_type&lt;br /&gt;END AS [Restore Type],&lt;br /&gt;rsh.restore_date AS [Restore Started],&lt;br /&gt;bmf.physical_device_name AS [Restored From],&lt;br /&gt;rf.destination_phys_name AS [Restored To]&lt;br /&gt;FROM msdb.dbo.restorehistory rsh&lt;br /&gt;INNER JOIN msdb.dbo.backupset bs ON rsh.backup_set_id = bs.backup_set_id&lt;br /&gt;INNER JOIN msdb.dbo.restorefile rf ON rsh.restore_history_id = rf.restore_history_id&lt;br /&gt;INNER JOIN msdb.dbo.backupmediafamily bmf ON bmf.media_set_id = bs.media_set_id&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;You can apply filter criteria such as the restore date , Database by addding a where clause to the existing query as shown below&lt;br /&gt;&lt;br /&gt;WHERE&lt;br /&gt;rsh.restore_date &gt;= DATEADD(dd, "No of Past Days" , GETDATE())&lt;br /&gt;AND destination_database_name = ISNULL( "DB Name", destination_database_name)&lt;br /&gt;ORDER BY rsh.restore_history_id DESC&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-9178970393071790890?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/9178970393071790890/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=9178970393071790890" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/9178970393071790890?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/9178970393071790890?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/05/how-to-find-database-restore-details-in.html" title="How to find the Database Restore Details in SQL Server 2008" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CkYEQXg_eyp7ImA9WxJSFU4.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8993429386685656291</id><published>2009-05-05T06:14:00.000-07:00</published><updated>2009-05-05T06:28:20.643-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-05T06:28:20.643-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="troubleshooting" /><category scheme="http://www.blogger.com/atom/ns#" term="white paper" /><category scheme="http://www.blogger.com/atom/ns#" term="Performance" /><title>SQL Server 2008 - Performance white paper</title><content type="html">&lt;span style="font-size:85%;"&gt;Microsoft has release its latest white paper on SQL Server 2008 performance trouble shooting.This article provides steps to diagonse the common performance problems faced by Microsoft CSS team.The following areas are covered in depth&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;CPU Bottlenecks&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Memory Bottlenecks&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;IO Bottlenecks&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Temp DB&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Slow Running Queries&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Extended Events&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Data Collector &amp;amp; MDV&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-size:85%;"&gt;The new features of SQL Server 2008  such as Extended Events &amp;amp; Data Collector are covered in detail .It is worth to have a look at this long running ( 102 pages) document. It is avilable for download at&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#009900;"&gt;&lt;span style="font-size:85%;color:#000000;"&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/dd672789.aspx"&gt;http://msdn.microsoft.com/en-us/library/dd672789.aspx&lt;/a&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/8857019241081536639-8993429386685656291?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8993429386685656291/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8993429386685656291" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8993429386685656291?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8993429386685656291?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/05/sql-server-2008-performance-white-paper.html" title="SQL Server 2008 - Performance white paper" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CkIHR3k8fSp7ImA9WxVaFkw.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-5567346220945040268</id><published>2009-04-13T01:11:00.000-07:00</published><updated>2009-04-13T01:15:36.775-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-13T01:15:36.775-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="Service Pack1" /><title>SQL Server 2008 SP1- Released</title><content type="html">&lt;span style="font-size:85%;"&gt;Microsoft has released the latest service pack for SQL Server 2008 with the following key improvements&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;SlipStream - The SQL Server 2008 and Service Pack 1 installation can be integrated and installed in a single step. &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Service Pack Uninstall – We can uninstall the service pack alone ( no need to un install the entire service) &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt; Report Builder 2.0 Click Once capability  &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;It is available for download at&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=66ab3dbb-bf3e-4f46-9559-ccc6a4f9dc19 &lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-5567346220945040268?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/5567346220945040268/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=5567346220945040268" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/5567346220945040268?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/5567346220945040268?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/04/sql-server-2008-sp1-released.html" title="SQL Server 2008 SP1- Released" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;A0IBQHY-eyp7ImA9WxVXFEw.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-2893712264180374492</id><published>2009-02-11T22:13:00.000-08:00</published><updated>2009-02-11T22:19:11.853-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-11T22:19:11.853-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2005" /><category scheme="http://www.blogger.com/atom/ns#" term="DMV" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>SQL Server 2008 DMV's Relationship mapping</title><content type="html">&lt;span style="font-size:85%;"&gt;Microsoft has introduced the concept of DMV’s (Dynamic Management Views) in SQL Server 2005 and concept is extended to SQL Server 2008 also with additional DMV's for mirroring , memory management etc.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;Microsoft has recently released the latest “System Views Map” for SQL Server 2008 which shows the key system views and the relationships between them. You can download the latest System Views Map at&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=531c53e7-8a2a-4375-8f2f-5d799aa67b5c&amp;amp;displaylang=en"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=531c53e7-8a2a-4375-8f2f-5d799aa67b5c&amp;amp;displaylang=en&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;The updated “System views Map” for SQ Server 2005 also can be downloaded at&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=2EC9E842-40BE-4321-9B56-92FD3860FB32&amp;amp;displaylang=en"&gt;&lt;span style="font-size:85%;"&gt;http://www.microsoft.com/downloads/details.aspx?familyid=2EC9E842-40BE-4321-9B56-92FD3860FB32&amp;amp;displaylang=en&lt;/span&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-2893712264180374492?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/2893712264180374492/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=2893712264180374492" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/2893712264180374492?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/2893712264180374492?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/02/sql-server-2008-dmvs-relationship.html" title="SQL Server 2008 DMV's Relationship mapping" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CUIBRH0zeip7ImA9WxVXE0s.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8468479702497912948</id><published>2009-02-11T06:33:00.000-08:00</published><updated>2009-02-11T06:45:55.382-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-11T06:45:55.382-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><category scheme="http://www.blogger.com/atom/ns#" term="Hot Fix" /><title>SQL Server Hot Fixes at one place</title><content type="html">&lt;span style="font-size:85%;"&gt;Microsoft is now days releasing lot of hot fixes for its products’ recently found one TechNet blog which is specific to hot fixes. This is one place where you can find the cumulative update of each hot fixes / updates released for SQL Server, also it has the release note information linked to the knowledge base articles.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;This blog also contains hot fix information for other Microsoft products such as Windows, Visual Studio, and IE etc. The original blog can be find at&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;a href="http://blogs.technet.com/hot/archive/tags/SQL+Server/default.aspx"&gt;http://blogs.technet.com/hot/archive/tags/SQL+Server/default.aspx&lt;/a&gt;&lt;a href="http://blogs.technet.com/hot/archive/tags/SQL+Server/default.aspx"&gt;&lt;/a&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-8468479702497912948?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8468479702497912948/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8468479702497912948" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8468479702497912948?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8468479702497912948?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/02/sql-server-hot-fixes-at-one-place.html" title="SQL Server Hot Fixes at one place" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CkEDQ3s-cSp7ImA9WxVQGEk.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8315531946112844498</id><published>2009-02-05T05:28:00.000-08:00</published><updated>2009-02-05T05:31:12.559-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-05T05:31:12.559-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="SLOW DELETE" /><category scheme="http://www.blogger.com/atom/ns#" term="DELETE" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2005" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Reasons for slower Delete in SQL Server</title><content type="html">&lt;p&gt;&lt;span style="font-size:85%;"&gt;Delete statement plays a major role in many of the database maintenance activities. Extreme care should be taken before executing the DELETE statements&lt;br /&gt;Before executing the DELETE statement it is better to check the “Estimated execution plan”, so that we can create proper indexes to speed up the execution .I have given some of the possible reasons for slower delete.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;1. Locking / Blocking - If it is a production database process is having Lock / Block on the table&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;2. Fragmentation - The Index pages are fragmented due to excessive delete on the table (Defragment the Indexes and try again)&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;3. The table you are trying to delete is referred by many tables as foreign key and those columns are not indexed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;4. There might be hanging transactions on the table - Try to truncate the Log and do&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;5. You can also change the Recovery Mode to simple and try - but not advised in case of production DB&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Also it is recommended to execute the DELETE statements in smaller batches so that the Log space &amp;amp; Roll back of the records can be easier as shown below&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;em&gt;// assume you wanted to delete 100000 records, we can split them into 10 batches as&lt;br /&gt;DECLARE @V_Count INT =0&lt;br /&gt;WHILE  @V_Count &lt; 100000&lt;br /&gt;BEGIN&lt;br /&gt;DELETE TOP(10000)&lt;br /&gt;FROM  &lt;strong&gt;Table&lt;/strong&gt;&lt;br /&gt;WHERE   &lt;strong&gt;COLUMN&lt;/strong&gt; =  &lt;strong&gt;Condition&lt;/strong&gt;&lt;br /&gt;SET @V_Count =@V_Count+10000&lt;br /&gt;END&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-8315531946112844498?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8315531946112844498/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8315531946112844498" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8315531946112844498?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8315531946112844498?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/02/reasons-for-slower-delete-in-sql-server.html" title="Reasons for slower Delete in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;C0QBR3k4fip7ImA9WxVQF0g.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-2817564068584805588</id><published>2009-02-04T04:40:00.000-08:00</published><updated>2009-02-04T04:42:36.736-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-04T04:42:36.736-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="multi user" /><category scheme="http://www.blogger.com/atom/ns#" term="Isolation" /><category scheme="http://www.blogger.com/atom/ns#" term="Single User" /><category scheme="http://www.blogger.com/atom/ns#" term="maintenance" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2005" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Sinlge user mode in SQL Server</title><content type="html">I was trying to change the isolation level of my database using the ALTER DATABASE statement and the query was running for hours to execute it, because there were ongoing transactions in the db which is preventing the isolation change. I have solved this problem by taking the DB into single user mode before running the alter statement using below script&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;if(charindex('Microsoft SQL Server 2005',@@version) &gt; 0)&lt;br /&gt;begin&lt;br /&gt;declare @sql varchar(8000)&lt;br /&gt;select @sql = '&lt;br /&gt;ALTER DATABASE ' + DB_NAME() + ' SET SINGLE_USER WITH ROLLBACK IMMEDIATE ;&lt;br /&gt;ALTER DATABASE ' + DB_NAME() + ' SET READ_COMMITTED_SNAPSHOT ON;&lt;br /&gt;ALTER DATABASE ' + DB_NAME() + ' SET MULTI_USER;'&lt;br /&gt;Exec(@sql)&lt;br /&gt;end&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Any changes to Database level properties in SQL Server can be done easily through the use of single user mode, which permits only one connection to be made to the database at any time.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-2817564068584805588?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/2817564068584805588/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=2817564068584805588" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/2817564068584805588?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/2817564068584805588?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/02/sinlge-user-mode-in-sql-server.html" title="Sinlge user mode in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;C0QNQ34yfCp7ImA9WxVQFko.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-3414086902370543763</id><published>2009-02-03T06:20:00.000-08:00</published><updated>2009-02-03T06:29:52.094-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-03T06:29:52.094-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="COALESCE" /><category scheme="http://www.blogger.com/atom/ns#" term="Combine Rows" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>How to combine Multiple Rows into Single Column in SQL Server</title><content type="html">I have come across a link where you can combine multiple rows into single column using the COALESCE function.It is very simple as shown below&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;CREATE TABLE WeekDays&lt;br /&gt;([Name] varchar(40))&lt;br /&gt;INSERT INTO WeekDays VALUES('Mon');&lt;br /&gt;INSERT INTO WeekDays VALUES('Tue');&lt;br /&gt;INSERT INTO WeekDays VALUES('Wed');&lt;br /&gt;&lt;br /&gt;DECLARE @str VARCHAR(2000)&lt;br /&gt;select @str = COALESCE(@str + ',', '') + [Name]&lt;br /&gt;from WeekDays&lt;br /&gt;SELECT @str&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;em&gt;Output :Mon,Tue,Wed&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;You can see the original article on&lt;br /&gt;&lt;a href="http://www.sqlservercurry.com/2008/06/combine-multiple-rows-into-one-row.html"&gt;http://www.sqlservercurry.com/2008/06/combine-multiple-rows-into-one-row.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-3414086902370543763?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/3414086902370543763/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=3414086902370543763" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3414086902370543763?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3414086902370543763?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/02/how-to-combine-multiple-rows-into.html" title="How to combine Multiple Rows into Single Column in SQL Server" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;DEEMR3k7fCp7ImA9WxVQFUU.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8792304819609434946</id><published>2009-02-02T06:44:00.000-08:00</published><updated>2009-02-02T06:58:06.704-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-02T06:58:06.704-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="Schema Comparison" /><category scheme="http://www.blogger.com/atom/ns#" term="Schema" /><category scheme="http://www.blogger.com/atom/ns#" term="Database" /><category scheme="http://www.blogger.com/atom/ns#" term="XML" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>How to import Database Schema to XML</title><content type="html">&lt;span style="font-size:85%;"&gt;I often get questions on how to import database schema into XML file for doing activities like Data Comaprison etc. I have written a small script to generate the database schema including the following&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Column Details ( Name, data type ,length etc)&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Primary Key&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Foreign Key&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Indexes&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;Sample Script&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:85%;"&gt;SELECT a.name TableName,&lt;br /&gt;( SELECT&lt;br /&gt;c.name ColumnName,type_name(c.xusertype) DataType,&lt;br /&gt;CASE WHEN type_name(c.xusertype)='NUMERIC' THEN CAST(c.prec AS SMALLINT)&lt;br /&gt;WHEN type_name(c.xusertype)='UNIQUEIDENTIFIER' THEN NULL&lt;br /&gt;WHEN type_name(c.xusertype)='BIGINT' THEN&lt;br /&gt;CASE WHEN colstat =1 THEN CAST(IDENT_SEED(a.name) AS SMALLINT)&lt;br /&gt;END&lt;br /&gt;ELSE CAST(c.prec AS SMALLINT)&lt;br /&gt;END DataLength,&lt;br /&gt;CASE WHEN type_name(c.xusertype)='NUMERIC' THEN c.scale&lt;br /&gt;WHEN type_name(c.xusertype)='BIGINT' THEN&lt;br /&gt;CASE WHEN colstat =1 THEN CAST( IDENT_INCR(a.name) AS INT)&lt;br /&gt;END&lt;br /&gt;ELSE NULL&lt;br /&gt;END Scale,&lt;br /&gt;CAST(c.isnullable AS BIT) As IsNullable,NULL AS DataDefault,NULL AS DefConstraintName,&lt;br /&gt;CASE WHEN colstat=1 THEN CAST(1 AS BIT)&lt;br /&gt;ELSE CAST(0 AS BIT)&lt;br /&gt;END AS IsIdentColumn&lt;br /&gt;FROM SYSColumns c&lt;br /&gt;WHERE c.id = OBJECT_ID(a.name)&lt;br /&gt;and a.id = c.id&lt;br /&gt;AND C.CDEFAULT =0&lt;br /&gt;FOR XML AUTO, TYPE&lt;br /&gt;) columns,&lt;br /&gt;(select 'UID' ColumnName,f.name PrimaryKeyName, f.type_desc PrimaryKeyType&lt;br /&gt;from sys.indexes f&lt;br /&gt;where f.object_id = a.id&lt;br /&gt;AND f.NAME IS NOT NULL&lt;br /&gt;AND f.Is_Primary_Key =1&lt;br /&gt;AND OBJECT_ID &gt; 97&lt;br /&gt;FOR XML AUTO, TYPE&lt;br /&gt;)PrimaryKey,&lt;br /&gt;(Select&lt;br /&gt;object_name(rkeyid) Parent_Table,object_name(fkeyid) Child_Table, object_name(constid) FKey_Name, c1.name FKey_Col,c2.name Ref_KeyCol&lt;br /&gt;From&lt;br /&gt;sys.sysforeignkeys s&lt;br /&gt;Inner join sys.syscolumns c1&lt;br /&gt;on ( s.fkeyid = c1.id And s.fkey = c1.colid )&lt;br /&gt;Inner join syscolumns c2&lt;br /&gt;on ( s.rkeyid = c2.id And s.rkey = c2.colid )&lt;br /&gt;where s.fkeyid = a.id&lt;br /&gt;FOR XML RAW,TYPE&lt;br /&gt;) ForeignKey,&lt;br /&gt;(select f.name IndexName ,DBO.fGetIndexCols (object_NAME(f.object_id), f.index_id ) IndexColumn,&lt;br /&gt;f.type_desc IndexType&lt;br /&gt;from sys.indexes f&lt;br /&gt;where f.object_id = a.id&lt;br /&gt;AND f.NAME IS NOT NULL&lt;br /&gt;AND f.Is_Primary_Key =0&lt;br /&gt;AND OBJECT_ID &gt; 97&lt;br /&gt;FOR XML AUTO, TYPE&lt;br /&gt;) Indexes&lt;br /&gt;from sysobjects a&lt;br /&gt;where a.xtype ='u'&lt;br /&gt;FOR XML PATH('Table'), ROOT('TableDetails')&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-8792304819609434946?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8792304819609434946/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8792304819609434946" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8792304819609434946?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8792304819609434946?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/02/how-to-import-database-schema-to-xml.html" title="How to import Database Schema to XML" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;CEIFSXs4eyp7ImA9WxVQE0U.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-3531402283332650038</id><published>2009-01-30T22:12:00.000-08:00</published><updated>2009-01-30T22:15:18.533-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-30T22:15:18.533-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="Declaration" /><title>SQL Server 2008 – Inline variable initialization</title><content type="html">&lt;span style="font-size:85%;"&gt;Microsoft has extended the support of inline variable initialization feature from the programming languages in to T-SQL in SQL Server 2008.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;When we want to declare and initialize a value to variable in T- SQL, we need to do it is two steps (declaration &amp;amp; initialization) as shown in the example&lt;br /&gt;&lt;br /&gt;DECLARE @V_Value DATETIME&lt;br /&gt;SET  @V_Value =GETDATE()&lt;br /&gt;&lt;br /&gt;In SQL Server 2008 this can be simplified by combining both the lines into a single steps as we do in programming languages&lt;br /&gt;&lt;br /&gt;DECLARE @V_Value DATETIME = GETDATE()&lt;br /&gt;&lt;br /&gt;Even though it is a very small feature, it helps the developers who have the technical background for programmig languages like  JAVA, C#.NET , VB.NET etc&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-3531402283332650038?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/3531402283332650038/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=3531402283332650038" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3531402283332650038?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3531402283332650038?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/01/sql-server-2008-inline-variable.html" title="SQL Server 2008 – Inline variable initialization" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;AkQGSXY8fCp7ImA9WxVRGEQ.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8723560537215261208</id><published>2009-01-25T07:26:00.000-08:00</published><updated>2009-01-25T07:45:28.874-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-25T07:45:28.874-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server Management Studio" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server" /><title>Turn Off - Prevent saving changes in SQL Server 2008</title><content type="html">&lt;div&gt;I was working with SQL Server 2008 for quite some time and noticed a strange behavior (which is not in previous versions of SQL Server) when I try to save a table in Management Studio that requires table to be dropped and recreated (e.g. Try to ADD a new NOT NULL column to the table which is having data) .I get the following warning message&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-family:arial;"&gt;&lt;em&gt;Saving changes is not permitted. The changes you have made require the following tables to be dropped and re-created. You have either made changes to a table that can't be re-created or enabled the option Prevent saving changes that require the table to be re-created.&lt;/em&gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;I though it is bug with SQL Server, but later cam to know it is the expected behavior and can be turned of by unchecking "Prevent saving changes that require table re-creation" in the Designer properties. Please refer to the below screen shot&lt;/div&gt;&lt;br /&gt;&lt;div&gt;&lt;/div&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_3LWHOOFVwHA/SXyHka129xI/AAAAAAAAASM/fCXD_T2Xavs/s1600-h/SQL.png"&gt;&lt;img id="BLOGGER_PHOTO_ID_5295256321631123218" style="DISPLAY: block; MARGIN: 0px auto 10px; WIDTH: 320px; CURSOR: hand; HEIGHT: 182px; TEXT-ALIGN: center" alt="" src="http://2.bp.blogspot.com/_3LWHOOFVwHA/SXyHka129xI/AAAAAAAAASM/fCXD_T2Xavs/s320/SQL.png" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-8723560537215261208?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8723560537215261208/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8723560537215261208" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8723560537215261208?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8723560537215261208?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2009/01/turn-off-prevent-saving-changes-in-sql.html" title="Turn Off - Prevent saving changes in SQL Server 2008" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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/_3LWHOOFVwHA/SXyHka129xI/AAAAAAAAASM/fCXD_T2Xavs/s72-c/SQL.png" height="72" width="72" /><thr:total>0</thr:total></entry><entry gd:etag="W/&quot;DEQHSHw_eip7ImA9WxRaEkg.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-8461359318332496683</id><published>2008-12-14T04:00:00.000-08:00</published><updated>2008-12-14T04:05:39.242-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-14T04:05:39.242-08:00</app:edited><title>How to upgrade database from SQL Server 2005 to SQL Server 2008</title><content type="html">&lt;span style="font-size:85%;"&gt;The following steps should be carried out upgrade a database from SQL Server 2005 to SQL Server 2008&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Step 1:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Detach the database files from SQL Server 2005 and attach to SQL Server 2008 Serve&lt;/span&gt;&lt;span style="font-size:85%;"&gt;r&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Step 2:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Execute  the below command to update the index and table  Statistics in the newly attached database&lt;br /&gt;SP_UPDATESTATS&lt;br /&gt;It is recommended to execute update statistics separately for each table with full scan as given below&lt;br /&gt; UPDATE STATISTICS &lt;schema&gt;.&lt;tablename&gt;    WITH FULLSCAN, NORECOMPUTE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;/span&gt;Step 3:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Execute  the below command to rest all the counters   DBCC UPDATEUSAGE('&lt;actual&gt;')&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Step 4:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Change the Database Compatibility Level as specified&lt;br /&gt; Go to Database Properties à Options à  Compatibility Level to à SQL Server 2008(100)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-8461359318332496683?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/8461359318332496683/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=8461359318332496683" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8461359318332496683?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/8461359318332496683?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2008/12/how-to-upgrade-database-from-sql-server.html" title="How to upgrade database from SQL Server 2005 to SQL Server 2008" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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 gd:etag="W/&quot;AkEER3s4eip7ImA9WxRWEE8.&quot;"><id>tag:blogger.com,1999:blog-8857019241081536639.post-3632291675306688264</id><published>2008-10-26T06:35:00.001-07:00</published><updated>2008-10-26T06:43:26.532-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-26T06:43:26.532-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008" /><category scheme="http://www.blogger.com/atom/ns#" term="Paging" /><category scheme="http://www.blogger.com/atom/ns#" term="LINQ" /><title>Paging using LINQ</title><content type="html">&lt;span style="font-size:85%;"&gt;SQL Server supports many ways of implementing paging in the applications. With the introduction of LINQ (Language Integrated Query) support in VS 2008 paging is further made simple. Please follow the below steps to implement paging for Employee List screen&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;br /&gt;&lt;strong&gt;Step 1 :&lt;br /&gt;&lt;/strong&gt;Write a method to retrieve the employee list from the table “Employee” using LINQ as shown in the method “GetEmployeeList”&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;public List&lt;employee&gt; GetEmployeeList(int PageNo ,out int TotalPages)&lt;br /&gt;{&lt;br /&gt;Int NoofRecordsPerPage =10;&lt;br /&gt;List&lt;employee&gt; oResultOut = new List&lt;employee&gt;();&lt;br /&gt;var query = (from p in dc.Employees&lt;br /&gt;select p).ToList();&lt;br /&gt;if (PageNo == 0)&lt;br /&gt;TotalPages = query.Count / NoofRecordsPerPage;&lt;br /&gt;&lt;br /&gt;oResultOut = query.Skip(PageNo * NoofRecordsPerPage)&lt;br /&gt;.Take(NoofRecordsPerPage)&lt;br /&gt;.ToList();&lt;br /&gt;&lt;br /&gt;} &lt;/span&gt;&lt;br /&gt;The parameter “PageNo” is used to determine the current page of Employee List view. It is often required to know the total number of pages, the List view will span during the first execution of the query. The above method will fill the total number of pages using the “query.Count” attribute.&lt;br /&gt;The query.Skip() will filter the records of the previous pages and the query.Take() method will show only the records qualified for the current page. The number of records to be displayed on each page can be controlled using the variable “NoofRecordsPerPage” .&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Step 2 :&lt;/strong&gt;&lt;br /&gt;Calling the “GetEmplyeeList” from the UI based on current page selected by the user in the Employee List view&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;// assume the user sees the first page&lt;br /&gt;List&lt;employee&gt; oResult = new List&lt;employee&gt;();&lt;br /&gt;int TotalPages =0;&lt;br /&gt;oResult = GetEmployeeList( 0, out Totalages);&lt;br /&gt;&lt;br /&gt;// assume the user sees the fifth page&lt;br /&gt;List&lt;employee&gt; oResult = new List&lt;employee&gt;();&lt;br /&gt;int TotalPages =0;&lt;br /&gt;oResult = GetEmployeeList( 5, out Totalages); &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-size:78%;"&gt;&lt;br /&gt;&lt;/span&gt;We will see the benefits of using LINQ and how to implement paging for retrievals using the stored procedures using DLINQ in my next post&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8857019241081536639-3632291675306688264?l=samsudeenb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel="replies" type="application/atom+xml" href="http://samsudeenb.blogspot.com/feeds/3632291675306688264/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=8857019241081536639&amp;postID=3632291675306688264" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3632291675306688264?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8857019241081536639/posts/default/3632291675306688264?v=2" /><link rel="alternate" type="text/html" href="http://samsudeenb.blogspot.com/2008/10/paging-using-linq.html" title="Paging using LINQ" /><author><name>Samsudeen B</name><uri>http://www.blogger.com/profile/04746198882784164274</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>

