<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>Thinking outside the box</title>
        <link>http://weblogs.sqlteam.com/peterl/Default.aspx</link>
        <description>Patron Saint of Lost Yaks</description>
        <language>sv-SE</language>
        <copyright>Peter Larsson</copyright>
        <generator>Subtext Version 2.5.1.0</generator>
        <image>
            <title>Thinking outside the box</title>
            <url>http://weblogs.sqlteam.com/images/RSS2Image.gif</url>
            <link>http://weblogs.sqlteam.com/peterl/Default.aspx</link>
            <width>77</width>
            <height>60</height>
        </image>
        <item>
            <title>How to calculate the covariance in T-SQL</title>
            <category>Optimization</category>
            <category>SQL Server 2008</category>
            <category>Algorithms</category>
            <category>SQL Server 2005</category>
            <category>SQL Server 2000</category>
            <category>Denali</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2012/01/18/how-to-calculate-the-covariance-in-t-sql.aspx</link>
            <description>&lt;div style="line-height: normal;"&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;DECLARE &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;@Sample &lt;span style="color: blue;"&gt;TABLE&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;(&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;            x &lt;span style="color: blue;"&gt;INT&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;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;            y &lt;span style="color: blue;"&gt;INT&lt;/span&gt; &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style="line-height: normal;"&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;INSERT&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;  @Sample&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;VALUES  &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;3&lt;span style="color: gray;"&gt;,&lt;/span&gt; 9&lt;span style="color: gray;"&gt;),&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;2&lt;span style="color: gray;"&gt;,&lt;/span&gt; 7&lt;span style="color: gray;"&gt;),&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;4&lt;span style="color: gray;"&gt;,&lt;/span&gt; 12&lt;span style="color: gray;"&gt;),&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;5&lt;span style="color: gray;"&gt;,&lt;/span&gt; 15&lt;span style="color: gray;"&gt;),&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;6&lt;span style="color: gray;"&gt;,&lt;/span&gt; 17&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;WITH&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt; cteSource&lt;span style="color: gray;"&gt;(&lt;/span&gt;x&lt;span style="color: gray;"&gt;,&lt;/span&gt; xAvg&lt;span style="color: gray;"&gt;,&lt;/span&gt; y&lt;span style="color: gray;"&gt;,&lt;/span&gt; yAvg&lt;span style="color: gray;"&gt;,&lt;/span&gt; n&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;AS &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;(&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;  1E &lt;span style="color: gray;"&gt;*&lt;/span&gt; x&lt;span style="color: gray;"&gt;,&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;                &lt;span style="color: fuchsia;"&gt;AVG&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;1E &lt;span style="color: gray;"&gt;*&lt;/span&gt; x&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;OVER &lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;PARTITION&lt;/span&gt; &lt;span style="color: blue;"&gt;BY &lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL)),&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;                1E &lt;span style="color: gray;"&gt;*&lt;/span&gt; y&lt;span style="color: gray;"&gt;,&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;                &lt;span style="color: fuchsia;"&gt;AVG&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;1E &lt;span style="color: gray;"&gt;*&lt;/span&gt; y&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;OVER &lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;PARTITION&lt;/span&gt; &lt;span style="color: blue;"&gt;BY &lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL)),&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;                &lt;span style="color: fuchsia;"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray;"&gt;(*)&lt;/span&gt; &lt;span style="color: blue;"&gt;OVER &lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;PARTITION&lt;/span&gt; &lt;span style="color: blue;"&gt;BY &lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL))&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;        &lt;span style="color: blue;"&gt;FROM&lt;/span&gt;    @Sample&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;SELECT&lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;  &lt;span style="color: fuchsia;"&gt;SUM&lt;/span&gt;&lt;span style="color: gray;"&gt;((&lt;/span&gt;x &lt;span style="color: gray;"&gt;-&lt;/span&gt; xAvg&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;*&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;y &lt;span style="color: gray;"&gt;-&lt;/span&gt; yAvg&lt;span style="color: gray;"&gt;))&lt;/span&gt; &lt;span style="color: gray;"&gt;/&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;n&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; [COVAR(x,y)]&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;FROM&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;    cteSource&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61396.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2012/01/18/how-to-calculate-the-covariance-in-t-sql.aspx</guid>
            <pubDate>Wed, 18 Jan 2012 12:01:46 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2012/01/18/how-to-calculate-the-covariance-in-t-sql.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61396.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61396.aspx</trackback:ping>
        </item>
        <item>
            <title>Avoid stupid mistakes</title>
            <category>SQL Server 2008</category>
            <category>SQL Server 2005</category>
            <category>SQL Server 2000</category>
            <category>Miscellaneous</category>
            <category>Denali</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/09/22/avoid-stupid-mistakes.aspx</link>
            <description>&lt;p&gt;Today I had the opportunity to debug a system with a client. I have to confess it took a while to figure out the bug, but here it is&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span style="color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-ansi-language: SV; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;SELECT&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-ansi-language: SV; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt; &lt;span style="color: fuchsia;"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray;"&gt;(*)&lt;/span&gt; OfflineData&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
Do you see the bug?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Yes, there should be a FROM clause before the table name. Without the from clause, SQL Server treats the name as an alias for the count column. And what do the COUNT always return in this case?&lt;/p&gt;
&lt;p&gt;It returns 1.&lt;/p&gt;
&lt;p&gt;So the bug had a severe implication. Now I now it's easy to forget to write a FROM in your query. How can we avoid these stupid mistakes?&lt;br /&gt;
An way is very easy; always prefix your table names with schema. Besides this bug there are a lot of other benefits from prefixing your tables names with schema.&lt;br /&gt;
&lt;br /&gt;
In my client's case, if OfflineData had been prefixed with dbo, the query wouldn't parse and you get a compile error.&lt;br /&gt;
Next thing to do to avoid stupid mistakes is to put AS before alias names, and have alias names after the expression.&lt;/p&gt;
&lt;p&gt;&lt;span style="color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-ansi-language: SV; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;SELECT&lt;/span&gt;&lt;span style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-ansi-language: SV; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt; &lt;span style="color: fuchsia;"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray;"&gt;(*)&lt;/span&gt; &lt;span style="color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-ansi-language: SV; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;AS&lt;/span&gt; MyCount &lt;span style="color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 10pt; mso-ansi-language: SV; mso-no-proof: yes; mso-fareast-font-family: Calibri; mso-fareast-theme-font: minor-latin; mso-fareast-language: EN-US; mso-bidi-language: AR-SA;"&gt;FROM&lt;/span&gt; dbo.OfflineData&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61352.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/09/22/avoid-stupid-mistakes.aspx</guid>
            <pubDate>Thu, 22 Sep 2011 06:38:31 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/09/22/avoid-stupid-mistakes.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61352.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61352.aspx</trackback:ping>
        </item>
        <item>
            <title>Convert UTF-8 string to ANSI</title>
            <category>Optimization</category>
            <category>SQL Server 2008</category>
            <category>Algorithms</category>
            <category>SQL Server 2005</category>
            <category>SQL Server 2000</category>
            <category>Denali</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/09/14/convert-utf-8-string-to-ansi.aspx</link>
            <description>&lt;p&gt;&lt;span lang="EN-US" style="color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US;"&gt; &lt;span style="color: blue;"&gt;FUNCTION &lt;/span&gt;dbo&lt;span style="color: gray;"&gt;.&lt;/span&gt;fnConvertUtf8Ansi&lt;br /&gt;
&lt;span style="color: gray;"&gt;(&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;    &lt;/span&gt;@Source &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;br /&gt;
)&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue;"&gt;RETURNS&lt;/span&gt; &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue;"&gt;AS&lt;br /&gt;
BEGIN&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;    &lt;/span&gt;&lt;span style="color: blue;"&gt;DECLARE&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt; &lt;/span&gt;@Value &lt;span style="color: blue;"&gt;SMALLINT &lt;/span&gt;&lt;span style="color: gray;"&gt;=&lt;/span&gt; 160&lt;span style="color: gray;"&gt;,&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;            &lt;/span&gt;@Utf8 &lt;span style="color: blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;2&lt;span style="color: gray;"&gt;),&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;            &lt;/span&gt;@Ansi &lt;span style="color: blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;1&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;    &lt;/span&gt;&lt;span style="color: blue;"&gt;IF &lt;/span&gt;@Source &lt;span style="color: gray;"&gt;NOT&lt;/span&gt; &lt;span style="color: gray;"&gt;LIKE &lt;/span&gt;&lt;span style="color: red;"&gt;'%[ÂÃ]%'&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;RETURN&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;  &lt;/span&gt;@Source&lt;br /&gt;
&lt;br /&gt;
&lt;span style="mso-spacerun: yes;"&gt;    &lt;/span&gt;&lt;span style="color: blue;"&gt;WHILE &lt;/span&gt;@Value &lt;span style="color: gray;"&gt;&amp;lt;=&lt;/span&gt; 255&lt;br /&gt;
&lt;span style="mso-spacerun: yes;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;BEGIN&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;  &lt;/span&gt;@Utf8 &lt;span style="color: gray;"&gt;=&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt; &lt;/span&gt;&lt;span style="color: blue;"&gt;CASE&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;                                &lt;/span&gt;&lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; @Value &lt;span style="color: gray;"&gt;BETWEEN &lt;/span&gt;160 &lt;span style="color: gray;"&gt;AND&lt;/span&gt; 191 &lt;span style="color: blue;"&gt;THEN &lt;/span&gt;&lt;span style="color: blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;194&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;+&lt;/span&gt; &lt;span style="color: blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;@Value&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;                                &lt;/span&gt;&lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; @Value &lt;span style="color: gray;"&gt;BETWEEN &lt;/span&gt;192 &lt;span style="color: gray;"&gt;AND&lt;/span&gt; 255 &lt;span style="color: blue;"&gt;THEN &lt;/span&gt;&lt;span style="color: blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;195&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;+&lt;/span&gt; &lt;span style="color: blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;@Value &lt;span style="color: gray;"&gt;-&lt;/span&gt; 64&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;                                &lt;/span&gt;&lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;                            &lt;/span&gt;&lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;                    &lt;/span&gt;@Ansi &lt;span style="color: gray;"&gt;=&lt;/span&gt; &lt;span style="color: blue;"&gt;CHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;@Value&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;WHILE&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;CHARINDEX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;@Source&lt;span style="color: gray;"&gt;,&lt;/span&gt; @Utf8&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;&amp;gt;&lt;/span&gt; 0&lt;br /&gt;
&lt;span style="mso-spacerun: yes;"&gt;                &lt;/span&gt;&lt;span style="color: blue;"&gt;SET&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;    &lt;/span&gt;@Source &lt;span style="color: gray;"&gt;=&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;REPLACE&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;@Source&lt;span style="color: gray;"&gt;,&lt;/span&gt; @Utf8&lt;span style="color: gray;"&gt;,&lt;/span&gt; @Ansi&lt;span style="color: gray;"&gt;)&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;            &lt;/span&gt;&lt;span style="color: blue;"&gt;SET&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;    &lt;/span&gt;@Value &lt;span style="color: gray;"&gt;+=&lt;/span&gt; 1&lt;br /&gt;
&lt;span style="mso-spacerun: yes;"&gt;        &lt;/span&gt;&lt;span style="color: blue;"&gt;END&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;    &lt;/span&gt;&lt;span style="color: blue;"&gt;RETURN&lt;/span&gt;&lt;span style="mso-spacerun: yes;"&gt;  &lt;/span&gt;@Source&lt;br /&gt;
&lt;span style="color: blue;"&gt;END&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61349.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/09/14/convert-utf-8-string-to-ansi.aspx</guid>
            <pubDate>Wed, 14 Sep 2011 04:30:46 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/09/14/convert-utf-8-string-to-ansi.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61349.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61349.aspx</trackback:ping>
        </item>
        <item>
            <title>Do people want help? I mean, real help?</title>
            <category>Miscellaneous</category>
            <category>Denali</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/07/24/do-people-want-help-i-mean-real-help.aspx</link>
            <description>&lt;p&gt;   &lt;br /&gt;Or do they just want to continue with their old habits?     &lt;br /&gt;    &lt;br /&gt;The reason for this blog post is that I the last week have tried to help people on several forums. Most of them just want to know how to solve their current problem and there is no harm in that. But when I recognize the same poster the very next day with a similar problem I ask myself; Did I really help him or her at all?&lt;/p&gt;  &lt;p&gt;All I did was probably to help the poster keep his or her job. It sound harsh, but is probably true. Why would the poster else continue in the old habit? The most convincing post was about someone wanted to use SP_DBOPTIONS. He had an ugly procedure which used dynamic sql and other things done wrong.&lt;/p&gt;  &lt;p&gt;I wrote to him he should stop using SP_DBOPTION because that procedure have been marked for deprecation and will not work on a SQL Server version after 2008R2, and that he should start using DATABASEPROPERTYEX() function instead.    &lt;br /&gt;His response was basically “Thanks, but no thanks”. Then some other MVP jumped in and gave him a solution using SP_DBOPTIONS and the original poster once again was a happy camper.&lt;/p&gt;  &lt;p&gt;Another problem was posted by someone who wanted a unique sequence number like “T000001” to “T999999”. I suggested him to use a normal IDENTITY column and add a computed column and concatenate the “T” with the value from the IDENTITY column. Even if other people several times proposed my suggestion as an answer, the original poster (OP) unproposed my suggestion! Why?&lt;/p&gt;  &lt;p&gt;The only reason I can think of, is that OP is not used to (or even heard of) computed columns. Some other guy posted and insinuated that computed columns don’t work on SQL Server 2000 and earlier. To that I just posted that computed columns did in fact work already back in SQL Server 7. &lt;/p&gt;  &lt;p&gt;Are people so stuck in their old habit and inept to change for whatever reason that might be? Could it be they are not qualified, or lack enough experience, for their current position? Do they lack basic education about relational databases?&lt;/p&gt;  &lt;p&gt;My question to you is, how do you really help people with these mindsets?&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61329.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/07/24/do-people-want-help-i-mean-real-help.aspx</guid>
            <pubDate>Sun, 24 Jul 2011 06:08:26 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/07/24/do-people-want-help-i-mean-real-help.aspx#feedback</comments>
            <slash:comments>9</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61329.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61329.aspx</trackback:ping>
        </item>
        <item>
            <title>Code Audit - The Beginning</title>
            <category>Optimization</category>
            <category>SQL Server 2008</category>
            <category>Algorithms</category>
            <category>Administration</category>
            <category>SQL Server 2005</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/07/21/code-audit-the-beginning.aspx</link>
            <description>&lt;p&gt;For the next few months, I will be involved in an interesting project for a mission critical application that our company have outsourced to a well-known and respected consulting company here Sweden.&lt;br /&gt;
My part will be the technical details of the forecasting application now when our former DBA has left our company. &lt;/p&gt;
&lt;p&gt;Today I took a brief look at the smallest building blocks; the Functions. No function is inline so I can assume some of the performance issues are derived from these.&lt;br /&gt;
&lt;br /&gt;
One function I stumled across is very simple. All it does is to add a timepart from current execution time to the datepart from a variable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;FUNCTION&lt;/span&gt; dbo&lt;span style="color: gray;"&gt;.&lt;/span&gt;GetDateTimeFromDate&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;(&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;@p_date &lt;span style="color: blue;"&gt;DATE&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;RETURNS&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;DATETIME&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;AS&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;BEGIN&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="color: blue;"&gt;DECLARE&lt;/span&gt;&lt;span style="mso-tab-count: 1;"&gt; &lt;/span&gt;@ActualWorkDateTime &lt;span style="color: blue;"&gt;DATETIME&lt;br /&gt;
&lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="color: blue;"&gt;SET&lt;/span&gt; @ActualWorkDateTime &lt;span style="color: gray;"&gt;= &lt;/span&gt;&lt;span style="color: fuchsia;"&gt;CONVERT&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt; @p_date&lt;span style="color: gray;"&gt;,&lt;/span&gt; 101&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: gray;"&gt;+&lt;/span&gt; &lt;span style="color: red;"&gt;' '&lt;/span&gt;&lt;span style="color: gray;"&gt;+&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;CONVERT&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;GETDATE&lt;/span&gt;&lt;span style="color: gray;"&gt;(),&lt;/span&gt; 114&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;font color="#808080"&gt;&lt;br /&gt;
&lt;br /&gt;
    &lt;/font&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes;"&gt;RETURN  &lt;/span&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes;"&gt;@ActualWorkDateTime&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes;"&gt;END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;   This doesn't look to bad compared to what I have seen on the online forums. But there is a hidden performance issue here, besides being not an inline function, and that is the conversion to varchar and back to datetime. Also, this functions crashed in my tests when I changed dateformat to dmy. This is because the developer used style 101 in the convert function. If he had used style 112 the function would not have crashed no matter which dateformat value I use.&lt;br /&gt;
&lt;br /&gt;
So to our next meeting I will explain to the consultants the issues I have with this function and the others that I've found.&lt;br /&gt;
A better choice for this function would be&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;FUNCTION&lt;/span&gt; dbo&lt;span style="color: gray;"&gt;.&lt;/span&gt;GetDateTimeFromDate&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;(&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;@p_date &lt;span style="color: blue;"&gt;DATE&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;RETURNS&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;DATETIME&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;AS&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;BEGIN&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="color: blue;"&gt;    RETURN&lt;span style="mso-tab-count: 1;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;br /&gt;
                &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="color: blue;"&gt;SELECT&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;DATEDIFF&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;GETDATE&lt;/span&gt;&lt;span style="color: gray;"&gt;(),&lt;/span&gt; @p_date&lt;span style="color: gray;"&gt;),&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;GETDATE&lt;/span&gt;&lt;span style="color: gray;"&gt;())&lt;br /&gt;
            &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes;"&gt;END&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;See, now there is no conversion, it's inline and dateformat-safe! A generic function for adding the date part from one variable to the time part from another variable looks like this&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;CREATE&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;FUNCTION&lt;/span&gt; dbo&lt;span style="color: gray;"&gt;.&lt;/span&gt;fnGetDateTimeFromDatePartAndTimePart&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;(&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;@DatePart &lt;span style="color: blue;"&gt;DATETIME&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;br /&gt;
    &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;@TimePart &lt;span style="color: blue;"&gt;DATETIME&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;RETURNS&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt; &lt;span style="color: blue;"&gt;DATETIME&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;AS&lt;br /&gt;
&lt;/span&gt;&lt;span lang="EN-US" style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;BEGIN&lt;br /&gt;
    &lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="color: blue;"&gt;RETURN&lt;span style="mso-tab-count: 1;"&gt;  &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;br /&gt;
                &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-ansi-language: EN-US; mso-no-proof: yes;"&gt;&lt;span style="color: blue;"&gt;SELECT&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;DATEDIFF&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; @TimePart&lt;span style="color: gray;"&gt;,&lt;/span&gt; @DatePart&lt;span style="color: gray;"&gt;),&lt;/span&gt; @TimePart&lt;span style="color: gray;"&gt;)&lt;br /&gt;
            &lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt; mso-no-proof: yes;"&gt;END&lt;br /&gt;
&lt;/span&gt;&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61327.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/07/21/code-audit-the-beginning.aspx</guid>
            <pubDate>Thu, 21 Jul 2011 06:44:57 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/07/21/code-audit-the-beginning.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61327.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61327.aspx</trackback:ping>
        </item>
        <item>
            <title>A glance at SQL Server Denali CTP3 - DATEFROMPARTS</title>
            <category>Denali</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/07/13/a-glance-at-sql-server-denali-ctp3-datefromparts.aspx</link>
            <description>&lt;p&gt;There is a new function in SQL Server Denali named DATEFROMPART. What is does, is to calculate a date from a number of user supplied parameters such as Year, Month and Date.&lt;br /&gt;
&lt;br /&gt;
Previously you had to use a formula like this&lt;/p&gt;
&lt;p&gt;DATEADD(MONTH, 12 * @Year + @Month - 22801, @Day)&lt;/p&gt;
&lt;p&gt;to calculate the correct datevalue from the parameters. With the new DATEFROMPARTS, you simple write&lt;br /&gt;
&lt;br /&gt;
DATEFROMPARTS(@Year, @Month, @Day)&lt;br /&gt;
&lt;br /&gt;
and you get the same result, only slower by 22 percent. So why should you use the new function, if it's slower?&lt;br /&gt;
There are two good arguments for this&lt;/p&gt;
&lt;p&gt;1) It is easier to remember&lt;br /&gt;
2) It has a built-in validator so that you cannot "spill" over the current month.&lt;/p&gt;
&lt;p&gt;For the old way of doing this, using @Year = 2009, @Month = 2 and @Day = 29 you would end up with a date of 2009-02-28 and the DATEFROMPARTS will give you an error message.&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61322.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/07/13/a-glance-at-sql-server-denali-ctp3-datefromparts.aspx</guid>
            <pubDate>Wed, 13 Jul 2011 07:18:51 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/07/13/a-glance-at-sql-server-denali-ctp3-datefromparts.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61322.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61322.aspx</trackback:ping>
        </item>
        <item>
            <title>MVP renewed</title>
            <category>Miscellaneous</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/07/03/mvp-renewed.aspx</link>
            <description>I got an email last friday telling me I was to keep my MVP status!&lt;br /&gt;
&lt;br /&gt;
What do one say about that? Except "Thank you". To all that reads my articles and posts. To all who attends my presentations.&lt;br /&gt;
&lt;br /&gt;
//Peter&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61316.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/07/03/mvp-renewed.aspx</guid>
            <pubDate>Sun, 03 Jul 2011 13:20:48 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/07/03/mvp-renewed.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61316.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61316.aspx</trackback:ping>
        </item>
        <item>
            <title>Feedback from SQLBits 8</title>
            <category>Miscellaneous</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/05/18/feedback-from-sqlbits-8.aspx</link>
            <description>&lt;p&gt;This years SQLBits occurred in Brighton. Although I didn’t have the opportunity to attend the full conference, I did a presentation at Saturday.&lt;/p&gt;  &lt;p&gt;Getting to Brighton was easy. Drove to Copenhagen airport at 0415, flew 0605 and arrived at Gatwick 0735. Then I took the direct train to Brighton and showed up at 0830, just one hour before presenting. This was the easy part.&lt;/p&gt;  &lt;p&gt;Getting home was much worse. Presentation ended at 1030 and I had to rush to the train station to get back to London, change to tube for Heathrow. Made it at the gate just 15 seconds before closing. That included a half mile run in the airport…&lt;/p&gt;  &lt;p&gt;Anyway, yesterday I got the feedback for my presentation. It does look good, especially since English is not my first language.&lt;/p&gt;  &lt;p&gt;This is the first graph   &lt;br /&gt;&lt;img src="http://images.developerworkshop.net/sqlbits8a.png" /&gt;&lt;/p&gt;  &lt;p&gt;Seems to be just halfway between conference average and best session. I can live with that.&lt;/p&gt;  &lt;p&gt;Second graph shows more detail about attendees voting.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://images.developerworkshop.net/sqlbits8b.png" /&gt;&lt;/p&gt;  &lt;p&gt;It also look acceptable. A wider spread for the 9’s, but it is an inevitable effect from how attendees percept the session. I did get a lot of 8’s and the lower grades in an descending order. The two people voting 4 and 5 didn’t say why they voted this so I don’t know how to remedy this.&lt;/p&gt;  &lt;p&gt;Third graph is about each category of votes.&lt;/p&gt;  &lt;p&gt;&lt;img src="http://images.developerworkshop.net/sqlbits8c.png" /&gt;&lt;/p&gt;  &lt;p&gt; &lt;/p&gt;  &lt;p&gt;Again, I find this acceptable. The Session abstract and Speaker’s knowledge seems to follow attendees expectations compared to conference average.   &lt;br /&gt;I seem to have met the attendees expectations (and some more) for the other four categories, also compared to conference average.&lt;/p&gt;  &lt;p&gt;Since this did encourage me, I believe I will present some more at future meetings. I do have a new presentation about something all developers are doing every day but they may not know it.&lt;/p&gt;  &lt;p&gt;I will also cover this new topic in the next Deep Dives II book.   &lt;br /&gt;    &lt;br /&gt;Stay tuned!    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;//Peter&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61295.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/05/18/feedback-from-sqlbits-8.aspx</guid>
            <pubDate>Wed, 18 May 2011 11:25:52 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/05/18/feedback-from-sqlbits-8.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61295.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61295.aspx</trackback:ping>
        </item>
        <item>
            <title>A tale from a Stalker</title>
            <category>Algorithms</category>
            <category>Miscellaneous</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/04/27/a-tale-from-a-stalker.aspx</link>
            <description>&lt;p&gt;&lt;strong&gt;Today I thought I should write something about a stalker I've got. Don't get me wrong, I have way more fans than stalkers, but this stalker is particular persistent towards me.&lt;br /&gt;
&lt;br /&gt;
It all started when I wrote about Relational Division with Sets late last year(&lt;font face="Arial"&gt;&lt;a href="http://weblogs.sqlteam.com/peterl/archive/2010/07/02/Proper-Relational-Division-With-Sets.aspx"&gt;http://weblogs.sqlteam.com/peterl/archive/2010/07/02/Proper-Relational-Division-With-Sets.aspx&lt;/a&gt;&lt;/font&gt;) and no matter what he tried, he didn't get a better performing query than me. But this I didn't click until later into this conversation. He must have saved himself for 9 months before posting to me again. Well...&lt;br /&gt;
&lt;br /&gt;
Some days ago I get an email from someone I thought i didn't know. Here is his first email&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;hr /&gt;
&lt;span style="color: black;"&gt;Hi,&lt;/span&gt;
&lt;p&gt;&lt;span style="color: black;"&gt;I want a proper solution for achievement the result. The solution must be standard query, means no using as any native code like TOP clause, also the query should run in SQL Server 2000 (no CTE use).&lt;/span&gt;&lt;br /&gt;
&lt;/p&gt;
&lt;div&gt;&lt;span style="color: black;"&gt;We have a table with consecutive keys (nbr) that is not exact sequence. &lt;/span&gt;&lt;span style="color: black;"&gt;We need bringing all values related with nearest key in the current key row.&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: black;"&gt;See the DDL:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: black;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;CREATE &lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;TABLE&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt; Nums&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;(&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;nbr &lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;INTEGER &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;NOT &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;NULL &lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;PRIMARY &lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;KEY&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt; val &lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;INTEGER &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;NOT &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;NULL);&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;INSERT &lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;INTO&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt; Nums&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;(&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;nbr&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt; val&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;) &lt;/span&gt;&lt;span style="color: blue; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;VALUES &lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;(&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;1&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt; 0&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;),&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;(&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;5&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt; 7&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;),&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;(&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;9&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;,&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt; 4&lt;/span&gt;&lt;span style="color: gray; font-family: &amp;quot;Courier New&amp;quot;; font-size: 9pt;"&gt;);&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span style="color: black;"&gt;See the Result:&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;pre_nbr     pre_val     nbr         val         nxt_nbr     nxt_val&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;----------- ----------- ----------- ----------- ----------- -----------&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;NULL        NULL        1           0           5           7&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;1           0           5           7           9           4&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: black; font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;5           7           9           4           NULL        NULL&lt;br /&gt;
&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: black;"&gt;The goal is suggesting most elegant solution. I would like see your best solution first, after that I will send my best (if not same with yours)&lt;/span&gt;&lt;br /&gt;
 &lt;/p&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Notice there is no name, no please or nothing polite asking for my help.&lt;br /&gt;
So, on the top of my head I sent him two solutions, following the rule "Work on SQL Server 2000 and only standard non-native code".&lt;/strong&gt;    &lt;/p&gt;
&lt;hr /&gt;
&lt;font face="Calibri"&gt;-- Peso 1&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;SELECT               pre_nbr,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             (&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          SELECT               x.val&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          FROM                dbo.Nums AS x&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          WHERE              x.nbr = d.pre_nbr&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             ) AS pre_val,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             d.nbr,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             d.val,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             d.nxt_nbr,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             (&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          SELECT               x.val&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          FROM                dbo.Nums AS x&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          WHERE              x.nbr = d.nxt_nbr&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             ) AS nxt_val&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;FROM                (&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          SELECT               (&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                                                    SELECT               MAX(x.nbr) AS nbr&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                                                    FROM                dbo.Nums AS x&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                                                    WHERE              x.nbr &amp;lt; n.nbr&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                       ) AS pre_nbr,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                       n.nbr,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                       n.val,&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                       (&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                                                    SELECT               MIN(x.nbr) AS nbr&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                                                    FROM                dbo.Nums AS x&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                                                    WHERE              x.nbr &amp;gt; n.nbr&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                                                       ) AS nxt_nbr&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                          FROM                dbo.Nums AS n&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                             ) AS d&lt;br /&gt;
&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;-- Peso 2&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;CREATE TABLE #Temp&lt;br /&gt;
&lt;/font&gt;&lt;font face="Calibri"&gt;                                                        (&lt;/font&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                                                       ID INT IDENTITY(1, 1) PRIMARY KEY,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                                                       nbr INT,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                                                       val INT&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          )&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;INSERT                                            #Temp&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          (&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                                                       nbr,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                                                       val&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          )&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;SELECT                                            nbr,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          val&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;FROM                                             dbo.Nums&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;ORDER BY         nbr&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;SELECT                                            pre.nbr AS pre_nbr,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          pre.val AS pre_val,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          t.nbr,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          t.val,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          nxt.nbr AS nxt_nbr,&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;                                                          nxt.val AS nxt_val&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;FROM                                             #Temp AS pre&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;RIGHT JOIN      #Temp AS t ON t.ID = pre.ID + 1&lt;/font&gt;&lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;LEFT JOIN         #Temp AS nxt ON nxt.ID = t.ID + 1&lt;/font&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;font face="Calibri"&gt;DROP TABLE    #Temp&lt;/font&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;Notice there are no indexes on #Temp table yet.&lt;br /&gt;
And here is where the conversation derailed. First I got this response back&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div style="margin: 0cm 0cm 12pt;"&gt;&lt;span style="font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt;Now my solutions:&lt;br /&gt;
&lt;br /&gt;
--My 1st Slt&lt;br /&gt;
SELECT T2.*, T1.*, T3.*&lt;br /&gt;
  FROM Nums AS T1&lt;br /&gt;
       LEFT JOIN Nums AS T2&lt;br /&gt;
         ON T2.nbr = (SELECT MAX(nbr)&lt;br /&gt;
                        FROM Nums&lt;br /&gt;
                       WHERE nbr &amp;lt; T1.nbr)&lt;br /&gt;
       LEFT JOIN Nums AS T3&lt;br /&gt;
         ON T3.nbr = (SELECT MIN(nbr)&lt;br /&gt;
                        FROM Nums&lt;br /&gt;
                       WHERE nbr &amp;gt; T1.nbr); &lt;br /&gt;
&lt;br /&gt;
--My 2nd Slt&lt;br /&gt;
SELECT MAX(CASE WHEN N1.nbr &amp;gt; N2.nbr THEN N2.nbr ELSE NULL END) AS pre_nbr, &lt;br /&gt;
       (SELECT val FROM Nums WHERE nbr = MAX(CASE WHEN N1.nbr &amp;gt; N2.nbr THEN N2.nbr ELSE NULL END)) AS pre_val,&lt;br /&gt;
       N1.nbr AS cur_nbr, N1.val AS cur_val,&lt;br /&gt;
       MIN(CASE WHEN N1.nbr &amp;lt; N2.nbr THEN N2.nbr ELSE NULL END) AS nxt_nbr,&lt;br /&gt;
       (SELECT val FROM Nums WHERE nbr = MIN(CASE WHEN N1.nbr &amp;lt; N2.nbr THEN N2.nbr ELSE NULL END)) AS nxt_val&lt;br /&gt;
  FROM Nums AS N1,&lt;br /&gt;
       Nums AS N2&lt;br /&gt;
 GROUP BY N1.nbr, N1.val;&lt;br /&gt;
 &lt;br /&gt;
/*&lt;br /&gt;
My 1st Slt&lt;br /&gt;
Table 'Nums'. Scan count 7, logical reads 14&lt;br /&gt;
&lt;br /&gt;
My 2nd Slt&lt;br /&gt;
Table 'Nums'. Scan count 4, logical reads 23&lt;br /&gt;
&lt;br /&gt;
Peso 1&lt;br /&gt;
Table 'Nums'. Scan count 9, logical reads 28&lt;br /&gt;
&lt;br /&gt;
Peso 2&lt;br /&gt;
Table '#Temp'. Scan count 0, logical reads 7&lt;br /&gt;
Table 'Nums'. Scan count 1, logical reads 2&lt;br /&gt;
Table '#Temp'. Scan count 3, logical reads 16&lt;br /&gt;
*/&lt;/span&gt; &lt;/div&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;To this, I emailed him back asking for a scalability test&lt;/strong&gt;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;What if you try with a Nums table with 100,000 rows? &lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;His response to that started to get nasty. &lt;/strong&gt;  &lt;hr /&gt;
&lt;div&gt;I have to say Peso 2 is not acceptable.&lt;/div&gt;
&lt;div&gt;As I said before the solution must be standard, ORDER BY is not part of standard SELECT. &lt;span style="font-family: &amp;quot;Tahoma&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 10pt;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;Try this without ORDER BY: &lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;Truncate Table Nums&lt;/div&gt;
&lt;div&gt;&lt;span style="font-size: 9pt;"&gt;INSERT INTO Nums (nbr, val) &lt;/span&gt;&lt;span style="font-size: 9pt;"&gt;VALUES (1, 0),(9,4), (5, 7)&lt;/span&gt;  &lt;/div&gt;
&lt;hr /&gt;
&lt;p&gt;&lt;strong&gt;So now we have new rules. No ORDER BY because it's not standard SQL! Of course I asked him&lt;/strong&gt; &lt;/p&gt;
&lt;hr /&gt;
&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Why do you have that idea? ORDER BY is not standard?&lt;/span&gt;&lt;hr /&gt;
&lt;strong&gt;To this, his replies went stranger and stranger&lt;/strong&gt;&lt;hr /&gt;
&lt;div&gt;Standard Select = Set-based (no any cursor)&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;It’s free to know, just refer to Advanced SQL Programming by Celko or mail to him if you accept comments from him.&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;What the stalker probably doesn't know, is that I and Mr Celko occasionally are involved in some conversation and thus we exchange emails. I don't know if this reference to Mr Celko was made to intimidate me either. So I answered him, still polite, this&lt;/strong&gt;&lt;hr /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;What do you mean?&lt;br /&gt;
The SELECT itself has a ”cursor under the hood”.&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;Now the stalker gets rude&lt;/strong&gt; &lt;hr /&gt;
&lt;div&gt;But however I mean the solution must no containing any order by, top...&lt;/div&gt;
&lt;div&gt;No problem, I do not like Peso 2, it’s very non-intelligent and elementary.&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;Yes, Peso 2 is elementary but most performing queries are... And now is the time where I started to feel the stalker really wanted to achieve something else, so I wrote to him&lt;/strong&gt; &lt;hr /&gt;
&lt;div style="margin: 0cm 0cm 12pt;"&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;So what is your goal?&lt;br /&gt;
Have a query that performs well, or a query that is super-portable?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;My Peso 2 outperforms any of your code with a factor of 100 when using more than 100,000 rows.&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;While I awaited his answer, I posted him this query&lt;/strong&gt;&lt;hr /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Ok, here is another one&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: green; font-family: Anonymous; font-size: 10pt;"&gt;&lt;br /&gt;
-- Peso 3&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;SELECT&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;             &lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;CASE&lt;/span&gt; &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; d &lt;span style="color: gray;"&gt;=&lt;/span&gt; 1 &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; nbr &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;/span&gt; &lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; pre_nbr&lt;span style="color: gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                   &lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;CASE&lt;/span&gt; &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; d &lt;span style="color: gray;"&gt;=&lt;/span&gt; 1 &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; val &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;/span&gt; &lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; pre_val&lt;span style="color: gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                   &lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;CASE&lt;/span&gt; &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; d &lt;span style="color: gray;"&gt;=&lt;/span&gt; 0 &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; nbr &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;/span&gt; &lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; nbr&lt;span style="color: gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                   &lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;CASE&lt;/span&gt; &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; d &lt;span style="color: gray;"&gt;=&lt;/span&gt; 0 &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; val &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;/span&gt; &lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; val&lt;span style="color: gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                   &lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;CASE&lt;/span&gt; &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; d &lt;span style="color: gray;"&gt;=&lt;/span&gt; &lt;span style="color: gray;"&gt;-&lt;/span&gt;1 &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; nbr &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;/span&gt; &lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; nxt_nbr&lt;span style="color: gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                   &lt;span style="color: fuchsia;"&gt;MAX&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;CASE&lt;/span&gt; &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; d &lt;span style="color: gray;"&gt;=&lt;/span&gt; &lt;span style="color: gray;"&gt;-&lt;/span&gt;1 &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; val &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: gray;"&gt;NULL&lt;/span&gt; &lt;span style="color: blue;"&gt;END&lt;/span&gt;&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; nxt_val&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;FROM               &lt;/span&gt;&lt;span style="color: gray; font-family: Anonymous; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                             &lt;span style="color: blue;"&gt;SELECT&lt;/span&gt;    nbr&lt;span style="color: gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                                       val&lt;span style="color: gray;"&gt;,&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                                       &lt;span style="color: fuchsia;"&gt;ROW_NUMBER&lt;/span&gt;&lt;span style="color: gray;"&gt;()&lt;/span&gt; &lt;span style="color: blue;"&gt;OVER &lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;ORDER&lt;/span&gt; &lt;span style="color: blue;"&gt;BY&lt;/span&gt; nbr&lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; SeqID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                             &lt;span style="color: blue;"&gt;FROM&lt;/span&gt;      dbo&lt;span style="color: gray;"&gt;.&lt;/span&gt;Nums&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                   &lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; s&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: gray; font-family: Anonymous; font-size: 10pt;"&gt;CROSS&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt; &lt;span style="color: gray;"&gt;JOIN&lt;/span&gt;&lt;span style="color: blue;"&gt;         &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-family: Anonymous; font-size: 10pt;"&gt;                             &lt;span style="color: blue;"&gt;VALUES    &lt;/span&gt;&lt;span style="color: gray;"&gt;(-&lt;/span&gt;1&lt;span style="color: gray;"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;                                       &lt;/span&gt;&lt;span style="color: gray; font-family: Anonymous; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;0&lt;span style="color: gray;"&gt;),&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;                                       &lt;/span&gt;&lt;span style="color: gray; font-family: Anonymous; font-size: 10pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;1&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                   &lt;span style="color: gray;"&gt;)&lt;/span&gt; &lt;span style="color: blue;"&gt;AS&lt;/span&gt; x&lt;span style="color: gray;"&gt;(&lt;/span&gt;d&lt;span style="color: gray;"&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;GROUP&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt; &lt;span style="color: blue;"&gt;BY&lt;/span&gt;           SeqID &lt;span style="color: gray;"&gt;+&lt;/span&gt; x&lt;span style="color: gray;"&gt;.&lt;/span&gt;d&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;HAVING&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;             &lt;span style="color: fuchsia;"&gt;COUNT&lt;/span&gt;&lt;span style="color: gray;"&gt;(*)&lt;/span&gt; &lt;span style="color: gray;"&gt;&amp;gt;&lt;/span&gt; 1&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;And here is the stats&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="font-family: &amp;quot;Courier New&amp;quot;; font-size: 8pt;"&gt;&lt;br /&gt;
Table 'Nums'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;It beats the hell out of your queries….&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;Now I finally got a response from my stalker and now I also clicked who he was. This is his reponse&lt;/strong&gt; &lt;hr /&gt;
&lt;div&gt;Why you post my original method with a bit change under you name? I do not like it.&lt;br /&gt;
See: &lt;a href="http://www.sqlservercentral.com/Forums/Topic468501-362-14.aspx"&gt;&lt;font color="#0000ff"&gt;http://www.sqlservercentral.com/Forums/Topic468501-362-14.aspx&lt;/font&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;span class="pun"&gt;&lt;span class="kwd"&gt;&lt;span class="kwd"&gt;;WITH&lt;/span&gt;&lt;span class="pln"&gt; C &lt;/span&gt;&lt;span class="kwd"&gt;AS&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="kwd"&gt;SELECT&lt;/span&gt;&lt;span class="pln"&gt; seq_nbr&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; k&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt; &lt;br /&gt;
       DENSE_RANK&lt;/span&gt;&lt;span class="pun"&gt;()&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;OVER&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="kwd"&gt;ORDER&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;BY&lt;/span&gt;&lt;span class="pln"&gt; seq_nbr &lt;/span&gt;&lt;span class="kwd"&gt;ASC&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;+&lt;/span&gt;&lt;span class="pln"&gt; k &lt;/span&gt;&lt;span class="kwd"&gt;AS&lt;/span&gt;&lt;span class="pln"&gt; grp_fct&lt;br /&gt;
  &lt;/span&gt;&lt;span class="kwd"&gt;FROM&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;[&lt;/span&gt;&lt;span class="pln"&gt;Sample&lt;/span&gt;&lt;span class="pun"&gt;]&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
        &lt;/span&gt;&lt;span class="kwd3"&gt;CROSS&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd3"&gt;JOIN&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
        &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="kwd"&gt;VALUES&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(-&lt;/span&gt;&lt;span class="lit"&gt;1&lt;/span&gt;&lt;span class="pun"&gt;),&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pun"&gt;),&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="lit"&gt;1&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
        &lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;AS&lt;/span&gt;&lt;span class="pln"&gt; D&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;k&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;span class="kwd"&gt;SELECT&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd2"&gt;MIN&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;seq_nbr&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;AS&lt;/span&gt;&lt;span class="pln"&gt; pre_value&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
       &lt;/span&gt;&lt;span class="kwd2"&gt;MAX&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="kwd"&gt;CASE&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;WHEN&lt;/span&gt;&lt;span class="pln"&gt; k &lt;/span&gt;&lt;span class="pun"&gt;=&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="lit"&gt;0&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;THEN&lt;/span&gt;&lt;span class="pln"&gt; seq_nbr &lt;/span&gt;&lt;span class="kwd"&gt;END&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;AS&lt;/span&gt;&lt;span class="pln"&gt; current_value&lt;/span&gt;&lt;span class="pun"&gt;,&lt;/span&gt;&lt;span class="pln"&gt;&lt;br /&gt;
       &lt;/span&gt;&lt;span class="kwd2"&gt;MAX&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;seq_nbr&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;AS&lt;/span&gt;&lt;span class="pln"&gt; next_value&lt;br /&gt;
  &lt;/span&gt;&lt;span class="kwd"&gt;FROM&lt;/span&gt;&lt;span class="pln"&gt; C&lt;br /&gt;
&lt;/span&gt;&lt;span class="kwd"&gt;GROUP&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd"&gt;BY&lt;/span&gt;&lt;span class="pln"&gt; grp_fct&lt;br /&gt;
&lt;/span&gt;&lt;span class="kwd"&gt;HAVING&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd2"&gt;min&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;seq_nbr&lt;/span&gt;&lt;span class="pun"&gt;)&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="pun"&gt;&amp;lt;&lt;/span&gt;&lt;span class="pln"&gt; &lt;/span&gt;&lt;span class="kwd2"&gt;max&lt;/span&gt;&lt;span class="pun"&gt;(&lt;/span&gt;&lt;span class="pln"&gt;seq_nbr&lt;/span&gt;&lt;span class="pun"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p&gt;&lt;span class="pun"&gt;&lt;span class="kwd"&gt;These posts:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;Posted Tuesday, April 12, 2011 10:04 AM&lt;/div&gt;
&lt;div&gt;Posted Tuesday, April 12, 2011 1:22 PM&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;Why post a solution where will not work in SQL Server 2000?&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;Wait a minute! His own solution is using both a CTE and a ranking function so his query will not work on SQL Server 2000! Bummer... The reference to "Me not like" are my exact words in a previous topic on SQLTeam.com and when I remembered the phrasing, I also knew who he was. See this topic &lt;font face="Arial"&gt;&lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=159262"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=159262&lt;/a&gt; where he writes a query and posts it under my name, as if I wrote it. &lt;br /&gt;
So I answered him this (less polite).&lt;/font&gt;&lt;/strong&gt;&lt;hr /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Like I keep track of all topics in the whole world… &lt;/span&gt;&lt;span style="color: rgb(31, 73, 125); font-family: Wingdings; font-size: 11pt;"&gt;J&lt;br /&gt;
&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;So you think you are the only one coming up with this idea?&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Besides, “&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: 10.5pt;"&gt;&lt;font color="#008000"&gt;M S solution&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;” doesn’t work.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;This is the result I get&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;pre_value        current_value                             next_value&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;1                           1                           5&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;1                           5                           9&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;5                           9                           9&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt; &lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;And I did nothing like you did here, where you posted a solution which you “thought” I should write&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=159262"&gt;&lt;font color="#0000ff"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=159262&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;So why are you yourself using ranking function when this was not allowed per your original email, and no cte? You use CTE in your link above, which do not work in SQL Server 2000.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;All this makes no sense to me, other than you are trying your best to once in a lifetime create a better performing query than me?&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;After a few hours I get this email back. I don't fully understand it, but it's probably a language barrier.&lt;/strong&gt;&lt;hr /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;gt;&amp;gt;Like I keep track of all topics in the whole world… &lt;/span&gt;&lt;span style="color: rgb(31, 73, 125); font-family: Wingdings; font-size: 11pt;"&gt;J&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;So you think you are the only one coming up with this idea?&lt;/span&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;You right, but do not think you are the first creator of this.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;br /&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;gt;&amp;gt;Besides, “&lt;/span&gt;&lt;strong&gt;&lt;span style="font-size: 10.5pt;"&gt;&lt;font color="#008000"&gt;M S Solution&lt;/font&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;” doesn’t work.&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;This is the result I get &amp;lt;&amp;lt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt; &lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Why you get so unimportant mistake?&lt;br /&gt;
See this post to correct it:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;Posted 4/12/2011 8:22:23 PM&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;gt;&amp;gt; &lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;So why are you yourself using ranking function when this was not allowed per your original email, and no cte? You use CTE in your link above, which do not work in &lt;span id="lw_1303911443_1" style="cursor: pointer; background-attachment: scroll;"&gt;SQL Server&lt;/span&gt; 2000. &lt;/span&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;/div&gt;
&lt;br /&gt;
&lt;div&gt;A&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;gain, why you get some unimportant incompatibility?&lt;br /&gt;
You offer that solution for current goals not me&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt; &lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;All this makes no sense to me, other than you are trying your best to once in a lifetime create a better performing query than me? &amp;lt;&amp;lt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div&gt; &lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;No, I only wanted to know who you will solve it.&lt;br /&gt;
Now I know you do not have a special solution. No problem.&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;No problem for me either. So I just answered him&lt;/strong&gt;&lt;hr /&gt;
&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;I am not the first, and you are not the first to come up with this idea. So what is your problem? I am pretty sure other people have come up with the same idea before us.&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Calibri&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;I used this technique all the way back to 2007, see &lt;a href="http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=93911"&gt;&lt;font color="#0000ff"&gt;http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=93911&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;hr /&gt;
&lt;strong&gt;Let's see if he returns...  He did!&lt;br /&gt;
&lt;hr /&gt;
&lt;/strong&gt; &amp;gt;&amp;gt; &lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;So what is your problem? &amp;lt;&amp;lt;&lt;/span&gt;&lt;br /&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Nothing&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;" /&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Thanks for all replies; maybe we have some competitions in future, maybe.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;Also I like you but you do not attend it. Your behavior with me is not friendly. Not any meeting…&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style="color: rgb(31, 73, 125); font-family: &amp;quot;Arial&amp;quot;,&amp;quot;sans-serif&amp;quot;; font-size: 11pt;"&gt;&lt;br /&gt;
Regards&lt;/span&gt;&lt;/div&gt;
&lt;strong&gt;&lt;hr /&gt;
&lt;br /&gt;
&lt;br /&gt;
//Peso&lt;br /&gt;
&lt;/strong&gt;  &lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61293.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/04/27/a-tale-from-a-stalker.aspx</guid>
            <pubDate>Wed, 27 Apr 2011 14:16:11 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/04/27/a-tale-from-a-stalker.aspx#feedback</comments>
            <slash:comments>4</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61293.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61293.aspx</trackback:ping>
        </item>
        <item>
            <title>Simple function to get beginning or end of month</title>
            <category>Optimization</category>
            <category>SQL Server 2008</category>
            <category>Algorithms</category>
            <category>SQL Server 2005</category>
            <category>SQL Server 2000</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2011/04/14/simple-function-to-get-beginning-or-end-of-month.aspx</link>
            <description>&lt;div style="line-height: normal;"&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;CREATE&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt; &lt;span style="color: blue;"&gt;FUNCTION&lt;/span&gt; dbo&lt;span style="color: gray;"&gt;.&lt;/span&gt;fnIsOnMonthEdge&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: gray; font-family: Anonymous; font-size: 10pt;"&gt;(&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;    @theDate &lt;span style="color: blue;"&gt;DATETIME&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: gray; font-family: Anonymous; font-size: 10pt;"&gt;)&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;RETURNS&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt; &lt;span style="color: blue;"&gt;SMALLINT&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;AS&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;BEGIN&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;    &lt;span style="color: blue;"&gt;RETURN&lt;/span&gt; &lt;span style="color: blue;"&gt;CASE&lt;/span&gt; @theDate&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; &lt;span style="color: red;"&gt;'99991231'&lt;/span&gt; &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; 1&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;MONTH&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt; @theDate&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; 1&lt;span style="color: gray;"&gt;,&lt;/span&gt; @theDate&lt;span style="color: gray;"&gt;))&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;            &lt;span style="color: blue;"&gt;END&lt;/span&gt; &lt;span style="color: gray;"&gt;+&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;            &lt;span style="color: blue;"&gt;CASE&lt;/span&gt; @theDate&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                &lt;span style="color: blue;"&gt;WHEN&lt;/span&gt; &lt;span style="color: red;"&gt;'17530101'&lt;/span&gt; &lt;span style="color: blue;"&gt;THEN&lt;/span&gt; &lt;span style="color: gray;"&gt;-&lt;/span&gt;1&lt;br /&gt;
&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;                &lt;span style="color: blue;"&gt;ELSE&lt;/span&gt; &lt;span style="color: fuchsia;"&gt;DATEDIFF&lt;/span&gt;&lt;span style="color: gray;"&gt;(&lt;/span&gt;&lt;span style="color: fuchsia;"&gt;MONTH&lt;/span&gt;&lt;span style="color: gray;"&gt;,&lt;/span&gt; @theDate&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: gray;"&gt;-&lt;/span&gt;1&lt;span style="color: gray;"&gt;,&lt;/span&gt; @theDate&lt;span style="color: gray;"&gt;))&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: Anonymous; font-size: 10pt;"&gt;            &lt;/span&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;END&lt;br /&gt;
&lt;/span&gt;&lt;span style="color: blue; font-family: Anonymous; font-size: 10pt;"&gt;END&lt;/span&gt;&lt;/div&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61291.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2011/04/14/simple-function-to-get-beginning-or-end-of-month.aspx</guid>
            <pubDate>Thu, 14 Apr 2011 11:40:28 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2011/04/14/simple-function-to-get-beginning-or-end-of-month.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61291.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61291.aspx</trackback:ping>
        </item>
    </channel>
</rss>
