<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>Remove all Extended Properties in a database</title>
            <category>Denali</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2012/05/27/remove-all-extended-properties-in-a-database.aspx</link>
            <description>&lt;p&gt;During my tests to port several databases to SQL Azure, one of the recurring things that fails export is the Extended Properties. So I just wanted to remove them. &lt;br /&gt;
This is a simple wayh to list all Extended Properties and the corresponding delete statement.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;
SELECT      'EXEC sp_dropextendedproperty @name = ' + QUOTENAME(ep.name, '''')                 + ', @level0type = ''schema'', @level0name = ''dbo'''                 + ', @level1type = ''table'', @level1name = ' + QUOTENAME(OBJECT_NAME(c.[object_id]), '''')                 + ', @level2type = ''column'', @level2name = ' + QUOTENAME(c.name, '''') + ';' FROM        sys.extended_properties AS ep INNER JOIN  sys.columns AS c ON c.[object_id] = ep.major_id 			AND c.column_id = ep.minor_id      &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61415.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2012/05/27/remove-all-extended-properties-in-a-database.aspx</guid>
            <pubDate>Sun, 27 May 2012 20:02:33 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2012/05/27/remove-all-extended-properties-in-a-database.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61415.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61415.aspx</trackback:ping>
        </item>
        <item>
            <title>The one feature that would make me invest in SSIS 2012</title>
            <category>Optimization</category>
            <category>Denali</category>
            <category>SSIS</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2012/05/26/the-one-feature-that-would-make-me-invest-in-ssis.aspx</link>
            <description>&lt;p&gt;This week I was invited my Microsoft to give two presentations in Slovenia. My presentations went well and I had good energy and the audience was interacting with me.&lt;/p&gt;
&lt;p&gt;When I had some time over from networking and partying, I attended a few other presentations. At least the ones who where held in English. One of these was "&lt;font face="Arial"&gt;SQL Server Integration Services 2012 - All the News, and More", given by Davide Mauri, a fellow co-worker from SolidQ.&lt;/font&gt;&lt;/p&gt;
&lt;p&gt;We started to talk and soon came into the details of the new things in SSIS 2012. All of the official things Davide talked about are good stuff, but for me, the best thing is one he didn't cover in his presentation.&lt;/p&gt;
&lt;p&gt;In earlier versions of SSIS than 2012, it is possible to have a stored procedure to act as a data source, as long as it doesn't have a temp table in it. In that case, you will get an error message from SSIS that "Metadata could not be found". &lt;br /&gt;
This is still true with SSIS 2012, so the thing I am talking about is not really a SSIS feature, it's a SQL Server 2012 feature.&lt;/p&gt;
&lt;p&gt;And this is the EXECUTE WITH RESULTSETS feature! With this, you can have a stored procedure with a temp table to deliver the resultset to SSIS, if you execute the stored procedure from SSIS and add the "WITH RESULTSETS" option.&lt;/p&gt;
&lt;p&gt;If you do this, SSIS is able to take the metadata from the code you write in SSIS and not from the stored procedure! And it's very fast too. Let's say you have a stored procedure in earlier versions and when referencing that stored procedure in SSIS forced SSIS to call the stored procedure (which can take hours), to retrieve the metadata. Now, with RESULTSETS, SSIS 2012 can continue in milliseconds!&lt;/p&gt;
&lt;p&gt;This is because you provide the metadata in the RESULTSETS clause, and if the data from the stored procedure doesn't match this RESULTSETS, you will get an error anyway, so it makes sense Microsoft has provided this optimization for us.&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61413.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2012/05/26/the-one-feature-that-would-make-me-invest-in-ssis.aspx</guid>
            <pubDate>Sat, 26 May 2012 08:52:34 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2012/05/26/the-one-feature-that-would-make-me-invest-in-ssis.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61413.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61413.aspx</trackback:ping>
        </item>
        <item>
            <title>New Article series</title>
            <category>Miscellaneous</category>
            <link>http://weblogs.sqlteam.com/peterl/archive/2012/02/24/new-article-series.aspx</link>
            <description>&lt;p&gt;I have started a new article series at Simple Talk. It's all about the transition from procedural programming to declarative programming.&lt;/p&gt;
&lt;p&gt;&lt;font face="Arial"&gt;&lt;a href="http://www.simple-talk.com/sql/"&gt;http://www.simple-talk.com/sql/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;First article is found here&lt;br /&gt;
&lt;font face="Arial"&gt;&lt;a href="http://www.simple-talk.com/sql/database-administration/the-road-to-professional-database-development-set-based-thinking/"&gt;http://www.simple-talk.com/sql/database-administration/the-road-to-professional-database-development-set-based-thinking/&lt;/a&gt;&lt;/font&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;And it is already viewed 5500 times.&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/peterl/aggbug/61401.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Peter Larsson</dc:creator>
            <guid>http://weblogs.sqlteam.com/peterl/archive/2012/02/24/new-article-series.aspx</guid>
            <pubDate>Fri, 24 Feb 2012 10:39:53 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/peterl/archive/2012/02/24/new-article-series.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/peterl/comments/commentRss/61401.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/peterl/services/trackbacks/61401.aspx</trackback:ping>
        </item>
        <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>
            <slash:comments>1</slash: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>3</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>14</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>2</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>5</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>
    </channel>
</rss>