<feed xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns="http://www.w3.org/2005/Atom" xml:lang="sv-SE">
    <title>Thinking outside the box</title>
    <link rel="self" type="application/xml" href="http://weblogs.sqlteam.com/peterl/Atom.aspx" />
    <subtitle type="html">Patron Saint of Lost Yaks</subtitle>
    <id>http://weblogs.sqlteam.com/peterl/Default.aspx</id>
    <author>
        <name>Peter Larsson</name>
        <uri>http://weblogs.sqlteam.com/peterl/Default.aspx</uri>
    </author>
    <generator uri="http://subtextproject.com" version="Subtext Version 1.9.4.0">Subtext</generator>
    <updated>2008-05-14T11:14:47Z</updated>
    <entry>
        <title>SQL Injection</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/05/14/SQL-Injection.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/05/14/SQL-Injection.aspx</id>
        <published>2008-05-14T11:14:4702:00:00</published>
        <updated>2008-05-14T11:14:47Z</updated>
        <content type="html">&lt;p&gt;Every now and then I see sites where commands are concatenated and sent to database server.&lt;br /&gt;
The author must really trust the user inputs!&lt;/p&gt;
&lt;p&gt;For every system built this way, you can expect at least one attack with SQL injection. In some cases you might not be aware of the attack, and sometimes you are aware.&lt;/p&gt;
&lt;p&gt;Here is an example of a "friendly" attack, that just promotes a site and when you click the link you execute a javascript who knows do what?&lt;/p&gt;
&lt;p&gt;In this link &lt;font face="Arial"&gt;&lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=102737"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=102737&lt;/a&gt;&lt;br /&gt;
and this &lt;a target="_blank" href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101673"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=101673&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;there are examples of SQL injection attacks.&lt;/p&gt;
&lt;p&gt;As I wrote in the first topic, "What if the attack could have encrypted all columns!".&lt;br /&gt;
That would be easy spotted in front-end application.&lt;/p&gt;
&lt;p&gt;But what if the attack had scrambled all date columns? How long time would it then take to discover the SQL Injection attack?&lt;/p&gt;
&lt;p&gt;I hope this learns all newbies, noobs and beginners to NEVER EVER concatenate string to send to database.&lt;br /&gt;
Always use parametrized queries as a first line of defence.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60598.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60598.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60598.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60598.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Lightning fast collapsed date ranges and missing date ranges</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/05/13/Lightning-fast-collapsed-date-ranges-and-missing-date-ranges.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/05/13/Lightning-fast-collapsed-date-ranges-and-missing-date-ranges.aspx</id>
        <published>2008-05-13T16:16:4102:00:00</published>
        <updated>2008-05-13T16:16:41Z</updated>
        <content type="html">&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;The last two days I have been involved in a rather interesting discussion.&lt;br /&gt;
&lt;br /&gt;
The original poster wanted a fast way to get missing date ranges in a series of date pairs.&lt;br /&gt;
Naturally I posted the link to the Script Library topic &lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=88422"&gt;&lt;font color="#800080"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=88422&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
Traditional T-SQL proved to be very inefficient. Even when using the CTE approch which proved to be second fastest and still 100 to 1,600 times slower!&lt;br /&gt;
&lt;br /&gt;
I started out with creating 1,000 date pairs with following code&lt;br /&gt;
&lt;span style="COLOR: black"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;-- Prepare sample data&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;CREATE&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;TABLE&lt;/span&gt; #ProcessCellAllocation&lt;br /&gt;
              &lt;span style="COLOR: gray"&gt;(&lt;br /&gt;
&lt;/span&gt;                     AllocationID &lt;span style="COLOR: blue"&gt;INT&lt;/span&gt; &lt;span style="COLOR: blue"&gt;IDENTITY&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;1&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; 1&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NOT&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL,&lt;br /&gt;
&lt;/span&gt;                     ProcessCell &lt;span style="COLOR: blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;50&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NOT&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL,&lt;br /&gt;
&lt;/span&gt;                     DateFrom &lt;span style="COLOR: blue"&gt;DATETIME&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NOT&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL,&lt;br /&gt;
&lt;/span&gt;                     DateTo &lt;span style="COLOR: blue"&gt;DATETIME&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;br /&gt;
&lt;/span&gt;                     Seq &lt;span style="COLOR: blue"&gt;INT&lt;br /&gt;
&lt;/span&gt;              &lt;span style="COLOR: gray"&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: blue"&gt;INSERT&lt;/span&gt;        #ProcessCellAllocation&lt;br /&gt;
                &lt;span style="COLOR: gray"&gt;(&lt;br /&gt;
&lt;/span&gt;                     ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;br /&gt;
&lt;/span&gt;                     DateFrom&lt;br /&gt;
                &lt;span style="COLOR: gray"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: blue"&gt;SELECT&lt;/span&gt;        &lt;span style="COLOR: blue"&gt;TOP&lt;/span&gt; 10000&lt;br /&gt;
              &lt;span style="COLOR: blue"&gt;CHAR&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;65 &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;ABS&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;CHECKSUM&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;NEWID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;()))&lt;/span&gt; &lt;span style="COLOR: gray"&gt;%&lt;/span&gt; 26&lt;span style="COLOR: gray"&gt;),&lt;br /&gt;
&lt;/span&gt;              25000 &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;ABS&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;CHECKSUM&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;NEWID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;()))&lt;/span&gt; &lt;span style="COLOR: gray"&gt;%&lt;/span&gt; 25000&lt;br /&gt;
&lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt;          syscolumns &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; c1&lt;br /&gt;
&lt;span style="COLOR: gray"&gt;CROSS&lt;/span&gt; &lt;span style="COLOR: gray"&gt;JOIN&lt;/span&gt;    syscolumns &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; c2&lt;br /&gt;
&lt;br /&gt;
&lt;span style="COLOR: blue"&gt;UPDATE&lt;/span&gt; #ProcessCellAllocation&lt;br /&gt;
&lt;span style="COLOR: blue"&gt;SET&lt;/span&gt;    DateTo &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;DATEADD&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;DAY&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;ABS&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;CHECKSUM&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;NEWID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;()))&lt;/span&gt; &lt;span style="COLOR: gray"&gt;%&lt;/span&gt; 30&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; DateFrom&lt;span style="COLOR: gray"&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="COLOR: blue"&gt;CREATE&lt;/span&gt; &lt;span style="COLOR: blue"&gt;CLUSTERED&lt;/span&gt; &lt;span style="COLOR: blue"&gt;INDEX&lt;/span&gt; IX_DateFrom &lt;span style="COLOR: blue"&gt;ON&lt;/span&gt; #ProcessCellAllocation &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; DateFrom&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; DateTo&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;WITH&lt;/span&gt; &lt;span style="COLOR: blue"&gt;FILLFACTOR&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 95&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;The various techniques used to produce the wanted results were very inefficient.&lt;br /&gt;
Ultimately I come up with this idea, which produced both collapsed date ranges and missing date ranges.&lt;br /&gt;
&lt;br /&gt;
I started out with clearing a preexisting Seq columns. I can clear all records or only a certain range of ProcessCells.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;UPDATE &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;#ProcessCellAllocation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SET&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;    Seq &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;WHERE&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;  ProcessCell &lt;span style="COLOR: gray"&gt;BETWEEN&lt;/span&gt; &lt;span style="COLOR: red"&gt;'A'&lt;/span&gt; &lt;span style="COLOR: gray"&gt;AND&lt;/span&gt; &lt;span style="COLOR: red"&gt;'F'&lt;/span&gt;&lt;/span&gt;&lt;span style="COLOR: red"&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;I then initialize some variables to speed up counting&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;DECLARE&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;     @Seq &lt;span style="COLOR: blue"&gt;INT&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 36pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;@ProcessCell &lt;span style="COLOR: blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;50&lt;span style="COLOR: gray"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 36pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;@DateFrom &lt;span style="COLOR: blue"&gt;DATETIME&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 36pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;@DateTo &lt;span style="COLOR: blue"&gt;DATETIME&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      &lt;span style="COLOR: blue"&gt;TOP&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div style="MARGIN: 0cm 0cm 0pt 36pt; TEXT-INDENT: 36pt"&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;@Seq &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 0&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;@ProcessCell &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            @DateFrom &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; DateFrom&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            @DateTo &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; DateTo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        #ProcessCellAllocation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;ORDER&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;BY&lt;/span&gt;    ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span&gt;                        &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;DateFrom&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;This is only for initializing the documented trick I use, the Clustered Index Update.&lt;br /&gt;
The code used for the actual update looks like this&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;UPDATE&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      #ProcessCellAllocation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SET&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;         @Seq &lt;span style="COLOR: gray"&gt;=&lt;/span&gt;      &lt;span style="COLOR: blue"&gt;CASE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              &lt;span style="COLOR: blue"&gt;WHEN&lt;/span&gt; DateFrom &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @DateTo &lt;span style="COLOR: blue"&gt;THEN&lt;/span&gt; @Seq &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              &lt;span style="COLOR: blue"&gt;WHEN&lt;/span&gt; ProcessCell &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @ProcessCell &lt;span style="COLOR: blue"&gt;THEN&lt;/span&gt; @Seq &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              &lt;span style="COLOR: blue"&gt;ELSE&lt;/span&gt; @Seq&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                        &lt;span style="COLOR: blue"&gt;END&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            @DateFrom &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: blue"&gt;CASE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                                    &lt;span style="COLOR: blue"&gt;WHEN&lt;/span&gt; DateTo &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @DateTo &lt;span style="COLOR: blue"&gt;THEN&lt;/span&gt; DateFrom&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                                    &lt;span style="COLOR: blue"&gt;WHEN&lt;/span&gt; ProcessCell &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @ProcessCell &lt;span style="COLOR: blue"&gt;THEN&lt;/span&gt; DateFrom&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                                    &lt;span style="COLOR: blue"&gt;ELSE&lt;/span&gt; @DateFrom&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                        &lt;span style="COLOR: blue"&gt;END&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            @DateTo &lt;span style="COLOR: gray"&gt;=&lt;/span&gt;   &lt;span style="COLOR: blue"&gt;CASE&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                                    &lt;span style="COLOR: blue"&gt;WHEN&lt;/span&gt; DateTo &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @DateTo &lt;span style="COLOR: blue"&gt;THEN&lt;/span&gt; DateTo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                                    &lt;span style="COLOR: blue"&gt;WHEN&lt;/span&gt; ProcessCell &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @ProcessCell &lt;span style="COLOR: blue"&gt;THEN&lt;/span&gt; DateTo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                                    &lt;span style="COLOR: blue"&gt;ELSE&lt;/span&gt; @DateTo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                        &lt;span style="COLOR: blue"&gt;END&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            Seq &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @Seq&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            @ProcessCell &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; ProcessCell&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;Now all work is done, and we can either show the collapgsed date ranges with this&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;-- Get the collapsed date ranges&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;      ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;DateFrom&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; DateFrom&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: fuchsia"&gt;MAX&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;DateTo&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; DateTo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        #ProcessCellAllocation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;GROUP&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;BY&lt;/span&gt;    ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            Seq&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;ORDER&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: blue"&gt;BY&lt;/span&gt;    Seq&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;Or we can get the missing date ranges with this&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;-- Get the missing date ranges&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            a&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            a&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;DateFrom&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            b&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;DateTo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                  &lt;span style="COLOR: blue"&gt;SELECT&lt;/span&gt;            ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              Seq&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              &lt;span style="COLOR: fuchsia"&gt;MAX&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;DateTo&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; DateFrom&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                  &lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt;        #ProcessCellAllocation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                  &lt;span style="COLOR: blue"&gt;GROUP&lt;/span&gt; &lt;span style="COLOR: blue"&gt;BY&lt;/span&gt;    ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              Seq&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; a&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: gray; FONT-FAMILY: 'Courier New'"&gt;INNER&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; &lt;span style="COLOR: gray"&gt;JOIN&lt;/span&gt; &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                  &lt;span style="COLOR: blue"&gt;SELECT&lt;/span&gt;            ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              Seq&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              &lt;span style="COLOR: fuchsia"&gt;MIN&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;DateFrom&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; DateTo&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                  &lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt;        #ProcessCellAllocation&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                  &lt;span style="COLOR: blue"&gt;GROUP&lt;/span&gt; &lt;span style="COLOR: blue"&gt;BY&lt;/span&gt;    ProcessCell&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;                              Seq&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;            &lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; b &lt;span style="COLOR: blue"&gt;ON&lt;/span&gt; b&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;ProcessCell &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; a&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;ProcessCell&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;WHERE&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;       a&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;Seq &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; b&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;Seq &lt;span style="COLOR: gray"&gt;-&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="COLOR: blue"&gt;ORDER&lt;/span&gt; &lt;span style="COLOR: blue"&gt;BY   a&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;Seq&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;This technique is very fast!&lt;br /&gt;
&lt;br /&gt;
For 1,000 date pairs the algorithm runs in 80 ms.&lt;br /&gt;
For 10,000 date pairs the algorithm runs in 360 ms.&lt;br /&gt;
For 100,000 date pairs the algorithm runs in 900 ms.&lt;br /&gt;
For 1,000,000 date pairs the algorithm runs in 2250 ms.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: Arial"&gt;&lt;/span&gt;&lt;/div&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60595.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60595.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60595.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60595.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Index pages</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/04/30/Index-pages.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/04/30/Index-pages.aspx</id>
        <published>2008-04-30T09:38:3302:00:00</published>
        <updated>2008-04-30T09:38:33Z</updated>
        <content type="html">&lt;p&gt;SQL Server 2005 introduced the new DMV views. They are great and a real improvement to debug and optimize queries.&lt;/p&gt;
&lt;p&gt;I find &lt;font size="2"&gt;sys.dm_db_index_physical_stats very useful and often write this type of code&lt;/font&gt;&lt;/p&gt;
&lt;font size="2"&gt;&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;        page_count&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;    sys.dm_db_index_physical_stats&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;DB_ID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'MyDB'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;),&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'MyTable'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;),&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL,&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL,&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;to find out if the query optimizer has choosen the "right" index for the query.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;em&gt;This can be done in SQL Server 2000 too!&lt;/em&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Use the DBCC SHOWCONTIG command. Maybe most of you have only used this with tables too see table fragmentation?&lt;/div&gt;
&lt;div&gt;Well, you can use it for indexes too.&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;Use&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;DBCC&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt; SHOWCONTIG &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'MyDB..MyTable'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;WITH&lt;/span&gt; &lt;span style="COLOR: blue"&gt;ALL_INDEXES&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: blue"&gt;TABLERESULTS&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;&lt;span style="COLOR: blue"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/font&gt;&lt;/font&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'"&gt;  index_id&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60579.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60579.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60579.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60579.aspx</trackback:ping>
    </entry>
    <entry>
        <title>SP3 for Microsoft SQL Server 2005</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/04/22/SP3-for-Microsoft-SQL-Server-2005.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/04/22/SP3-for-Microsoft-SQL-Server-2005.aspx</id>
        <published>2008-04-22T16:07:2802:00:00</published>
        <updated>2008-04-22T16:07:28Z</updated>
        <content type="html">&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://blogs.technet.com/dataplatforminsider/archive/2008/04/15/sql-server-2005-sp3-coming-soon.aspx"&gt;http://blogs.technet.com/dataplatforminsider/archive/2008/04/15/sql-server-2005-sp3-coming-soon.aspx&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60571.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60571.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60571.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60571.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Cumulative update package 7 for SQL Server 2005 Service Pack 2 available now</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/04/17/Cumulative-update-package-7-for-SQL-Server-2005-Service-PackAgain.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/04/17/Cumulative-update-package-7-for-SQL-Server-2005-Service-PackAgain.aspx</id>
        <published>2008-04-17T22:18:3402:00:00</published>
        <updated>2008-04-17T22:19:01Z</updated>
        <content type="html">&lt;p&gt;Find it here here&lt;br /&gt;
&lt;font face="Arial"&gt;http://support.microsoft.com/default.aspx/kb/949095/&lt;br /&gt;
&lt;/font&gt;&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60570.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60570.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60570.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60570.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Cumulative update package 7 for SQL Server 2005 Service Pack 2</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/03/28/Cumulative-update-package-7-for-SQL-Server-2005-Service-Pack.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/03/28/Cumulative-update-package-7-for-SQL-Server-2005-Service-Pack.aspx</id>
        <published>2008-03-28T08:14:5101:00:00</published>
        <updated>2008-03-28T08:15:37Z</updated>
        <content type="html">Soon available here&lt;br /&gt;
&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;&lt;a href="http://support.microsoft.com/default.aspx/kb/949095/"&gt;http://support.microsoft.com/default.aspx/kb/949095/&lt;/a&gt;&lt;/font&gt;&lt;/font&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60558.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60558.aspx</wfw:comment>
        <slash:comments>1</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60558.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60558.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Some XML search approaches</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/03/26/Some-XML-search-approaches.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/03/26/Some-XML-search-approaches.aspx</id>
        <published>2008-03-26T11:17:2901:00:00</published>
        <updated>2008-03-26T11:17:29Z</updated>
        <content type="html">&lt;p&gt;I just played around with some different techniques to fetch relevant data from XML content.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;DECLARE&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       @XMLString &lt;span style="COLOR: blue"&gt;XML&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       @Search &lt;span style="COLOR: blue"&gt;VARCHAR&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;50&lt;span style="COLOR: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; @XMLString &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: red"&gt;'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                           &amp;lt;Customers&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                  &amp;lt;Customer&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                         &amp;lt;FirstName&amp;gt;Kevin&amp;lt;/FirstName&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                         &amp;lt;LastName&amp;gt;Goff&amp;lt;/LastName&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                         &amp;lt;City type="aca"&amp;gt;Camp Hill&amp;lt;/City&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                  &amp;lt;/Customer&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                  &amp;lt;Customer&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                         &amp;lt;FirstName&amp;gt;Steve&amp;lt;/FirstName&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                         &amp;lt;LastName&amp;gt;Goff&amp;lt;/LastName&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                         &amp;lt;City type="acb"&amp;gt;Philadelphia&amp;lt;/City&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                                  &amp;lt;/Customer&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: red; FONT-FAMILY: 'Courier New'"&gt;                           &amp;lt;/Customers&amp;gt;'&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: gray; FONT-FAMILY: 'Courier New'"&gt;,&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;              @Search &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: red"&gt;'Camp Hill'&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;-- Get all customers living in Camp Hill&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'FirstName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; FirstName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'LastName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; LastName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; City&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]/@type'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; Typ&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;   @XMLString&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;nodes&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'/Customers/Customer'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; cust&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;WHERE&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;exist&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City/text()[.= sql:variable("@Search")]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;-- Get all customers living in a City containing the text "adel"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'FirstName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; FirstName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'LastName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; LastName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; City&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]/@type'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; Typ&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;   @XMLString&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;nodes&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'/Customers/Customer'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; cust&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;WHERE&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;exist&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City [contains(.,"adel")]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;-- Get all customers living in a City of type "acb"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'FirstName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; FirstName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'LastName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; LastName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; City&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]/@type'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; Typ&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;   @XMLString&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;nodes&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'/Customers/Customer'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; cust&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;WHERE&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;exist&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[@type="acb"]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: green; FONT-FAMILY: 'Courier New'"&gt;-- Get all customers living in a City with a Type containing an "c"&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;SELECT&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'FirstName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; FirstName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'LastName[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; LastName&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; City&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;       cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;value&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City[1]/@type'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt;&lt;span style="COLOR: red"&gt;'VARCHAR(20)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; Typ&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;FROM&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt;   @XMLString&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;nodes&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'/Customers/Customer'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; cust&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="FONT-SIZE: 8pt; COLOR: blue; FONT-FAMILY: 'Courier New'"&gt;WHERE&lt;/span&gt;&lt;span style="FONT-SIZE: 8pt; FONT-FAMILY: 'Courier New'"&gt; cust&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;coldef&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;exist&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'City [contains(@type, "c")]'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60554.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60554.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60554.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60554.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Search all code for specific keyword</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/03/14/Search-all-code-for-specific-keyword.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/03/14/Search-all-code-for-specific-keyword.aspx</id>
        <published>2008-03-14T14:05:0901:00:00</published>
        <updated>2008-03-14T16:51:22Z</updated>
        <content type="html">&lt;p&gt;This is an updated version for SQL 2005 and later to search all code for a specific keyword&lt;br /&gt;
&lt;br /&gt;
SELECT p.RoutineName, &lt;br /&gt;
'EXEC sp_helptext ' + QUOTENAME(p.RoutineName) AS [Exec] &lt;br /&gt;
FROM ( &lt;br /&gt;
SELECT OBJECT_NAME(so.ID) AS RoutineName, &lt;br /&gt;
(SELECT TOP 100 PERCENT '' + sc.TEXT FROM SYSCOMMENTS AS sc WHERE sc.ID = so.ID ORDER BY sc.COLID FOR XML PATH('')) AS Body &lt;br /&gt;
FROM SYSOBJECTS AS so &lt;br /&gt;
WHERE so.TYPE IN ('C', 'D', 'FN', 'IF', 'P', 'R', 'RF', 'TF', 'TR', 'V', 'X') &lt;br /&gt;
) AS p &lt;br /&gt;
WHERE p.Body LIKE '%YourKeyWordHere%' &lt;/p&gt;
&lt;p&gt;The types are&lt;br /&gt;
&lt;br /&gt;
C = CHECK constraint &lt;br /&gt;
D = Default or DEFAULT constraint &lt;br /&gt;
FN = Scalar function &lt;br /&gt;
IF = In-lined table-function &lt;br /&gt;
P = Stored procedure &lt;br /&gt;
R = Rule &lt;br /&gt;
RF = Replication filter stored procedure &lt;br /&gt;
TF = Table function &lt;br /&gt;
TR = Trigger &lt;br /&gt;
V = View &lt;br /&gt;
X = Extended stored procedure&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60549.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60549.aspx</wfw:comment>
        <slash:comments>4</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60549.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60549.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Change schema for all tables</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/03/05/Change-schema-for-all-tables.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/03/05/Change-schema-for-all-tables.aspx</id>
        <published>2008-03-05T01:31:2701:00:00</published>
        <updated>2008-03-05T01:33:26Z</updated>
        <content type="html">&lt;font color="#0000ff" size="2"&gt;
&lt;p&gt;I just helped a guy here &lt;font face="Arial" size="2"&gt;&lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=98346"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=98346&lt;/a&gt; with schema&lt;br /&gt;
and thought that someone could benefit from this code&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;exec&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;/font&gt;&lt;font size="2"&gt;&lt;/font&gt;&lt;font color="#800000" size="2"&gt;sp_MSforeachtable&lt;/font&gt;&lt;font size="2"&gt; "PRINT '? modify'; ALTER SCHEMA new_schema TRANSFER ?; IF @@ERROR = 0 PRINT '? modified'; PRINT ''"&lt;/font&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60543.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60543.aspx</wfw:comment>
        <slash:comments>0</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60543.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60543.aspx</trackback:ping>
    </entry>
    <entry>
        <title>Efficient pagination for large set of data?</title>
        <link rel="self" type="text/html" href="http://weblogs.sqlteam.com/peterl/archive/2008/02/19/Efficient-pagination-for-large-set-of-data.aspx" />
        <id>http://weblogs.sqlteam.com/peterl/archive/2008/02/19/Efficient-pagination-for-large-set-of-data.aspx</id>
        <published>2008-02-19T16:12:2001:00:00</published>
        <updated>2008-02-19T16:12:20Z</updated>
        <content type="html">&lt;p&gt;This is what I pondered about today. Maybe I also will have some time to test it.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;CREATE PROCEDURE dbo.uspPaginate &lt;br /&gt;
( &lt;br /&gt;
@PageNumber INT, &lt;br /&gt;
@RecordsPerPage TINYINT = 50 &lt;br /&gt;
) &lt;br /&gt;
AS &lt;br /&gt;
&lt;br /&gt;
SET NOCOUNT ON &lt;br /&gt;
&lt;br /&gt;
DECLARE @MaxRows INT &lt;br /&gt;
&lt;br /&gt;
SET @MaxRows = @PageNumber * @RecordsPerPage &lt;br /&gt;
&lt;br /&gt;
SELECT SomeColumns &lt;br /&gt;
FROM ( &lt;br /&gt;
SELECT TOP (@RecordsPerPage) &lt;br /&gt;
SomeColumns &lt;br /&gt;
FROM ( &lt;br /&gt;
SELECT TOP (@MaxRows) &lt;br /&gt;
SomeColumns &lt;br /&gt;
FROM YourTable &lt;br /&gt;
ORDER BY SomeCase ASC/DESC &lt;br /&gt;
) &lt;br /&gt;
ORDER BY SomeCase DESC/ASC &lt;br /&gt;
) &lt;br /&gt;
ORDER BY SomeCase ASC/DESC &lt;br /&gt;
&lt;/p&gt;
&lt;p&gt;Topic is here &lt;font face="Arial"&gt;&lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=97550"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=97550&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/60517.aspx" width="1" height="1" /&gt;</content>
        <wfw:comment>http://weblogs.sqlteam.com/peterl/comments/60517.aspx</wfw:comment>
        <slash:comments>2</slash:comments>
        <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/60517.aspx</wfw:commentRss>
        <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/60517.aspx</trackback:ping>
    </entry>
</feed>