<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'Miscellaneous', 'Transact-SQL', and 'MSDN Forums'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=Miscellaneous,Transact-SQL,MSDN+Forums&amp;orTags=0</link><description>Search results matching tags 'Miscellaneous', 'Transact-SQL', and 'MSDN Forums'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>SQL Tip: Keep your Presentation Logic in your Presentation Layer</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/02/19/sql-tip-keep-your-presentation-logic-in-your-presentation-layer.aspx</link><pubDate>Fri, 20 Feb 2009 03:13:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:12018</guid><dc:creator>jmkehayias</dc:creator><description>&lt;P&gt;Whether you are just starting out in SQL Server, or you have been working in SQL Server for many years, eventually in your work, you cross a boundary where someone will want data formatted in a different manner than it is stored in the database server.&amp;nbsp; Take for example DateTime data.&amp;nbsp; It is not uncommon to see questions on the forums where someone asks how to return data from a DateTime column in a custom format, or to return the difference between two DateTime columns as hours, minutes and seconds.&amp;nbsp; Now it is entirely possible to do this kind of logic inside of SQL Server using TSQL, I'll admit that.&amp;nbsp; I'll also admit to having written some of the most convoluted TSQL there could ever possibly be to solve problems simply because it was all I knew.&lt;/P&gt;
&lt;P&gt;I've used this analogy before, and I'll use it again.&amp;nbsp; If you have to build a house of wood and screws and all that you have is a hammer, it is completely possible to drive a screw through a board using a hammer, and you could most assuredly build your house.&amp;nbsp; However, if you were to take a little time and drive to the hardware store and either buy some nails, or a screwdriver, you are probably going to be able to first build the house faster, it will be much more stable, and it will last much longer.&amp;nbsp; The same thing goes with software development.&amp;nbsp; I used to write logic to do everything you can imagine using TSQL, and I to be reusable,&amp;nbsp; I did much of it in functions and or stored procedures using output parameters and created more than my share of badly performing and overly complex TSQL code that did very little actual work.&lt;/P&gt;
&lt;P&gt;Back on topic with this post, I find that a lot of people starting out in development work just like I did, writing TSQL and they stick with TSQL to everything in the world.&amp;nbsp; Take the original example, the difference between two dates in a custom format like DD:HH:MI:SS for displaying the result.&amp;nbsp; You can do this in TSQL, and putting the code in a function makes it really easy to use anywhere you want to:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE style="FONT-SIZE:12px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;CREATE FUNCTION &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dbo.testSQL&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@first &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;datetime&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@second &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;datetime&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;RETURNS VARCHAR&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;12&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;BR&gt;DECLARE &lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@difference &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;datetime &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SET &lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@difference&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;=&lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@second&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;-&lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@first &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;DECLARE &lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@retval &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:black;"&gt;12&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@retval &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;CAST&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DATEDIFF&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dd&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:red;"&gt;'1900/01/01'&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@difference&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;AS VARCHAR&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:magenta;"&gt;RIGHT&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&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:#434343;"&gt;@difference&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;120&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;),&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;8&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;RETURN&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;@retval&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;END &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;GO&lt;/SPAN&gt;&lt;/CODE&gt; &lt;/BLOCKQUOTE&gt;
&lt;P&gt;Then again, you can do it in the presentation layer for example C#:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE style="FONT-SIZE:12px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;private static string &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;CSharpDateDiff&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime first&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime second&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimeSpan diff &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;second.Subtract&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;first&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Duration&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Format&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"{0}:{1}:{2}:{3}"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Days&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Hours&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Minutes&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Seconds&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;}&lt;/SPAN&gt;&lt;/CODE&gt; &lt;/BLOCKQUOTE&gt;
&lt;P&gt;or VB.NET:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE style="FONT-SIZE:12px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;Private &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Shared &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Function &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;CSharpDateDiff&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ByVal &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;first &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;As &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;ByVal &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;second &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;As &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;As String&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Dim &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;As &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;TimeSpan &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;second.Subtract&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;first&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Duration&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;()&amp;nbsp; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;Return String&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Format&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"{0}:{1}:{2}:{3}"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Days&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Hours&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Minutes&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Seconds&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&amp;nbsp; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;End Function &lt;/SPAN&gt;&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Now to me, both of these are much easier to read than the TSQL code, and they are just as reusable in your application when placed in an appropriate library or class that can be imported or used by your code, but what about performance? I'm so glad you asked. Using the following 100000 row test table:&lt;/P&gt;
&lt;BLOCKQUOTE&gt;&lt;CODE style="FONT-SIZE:12px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;USE &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;tempdb &lt;BR&gt;GO &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;CREATE TABLE &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;temptimes &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;( &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;rowid &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INT &lt;/SPAN&gt;&lt;SPAN style="COLOR:#434343;"&gt;IDENTITY &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;PRIMARY KEY&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;date1 datetime&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;date2 datetime &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;GO &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;INSERT INTO &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;temptimes &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;SELECT &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;GETDATE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(), &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DATEADD&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;ss&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;RAND&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;()*&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;10000&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;DATEADD&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;mi&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;RAND&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;()*&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;10000&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:magenta;"&gt;GETDATE&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;())) &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;GO 100000&lt;/SPAN&gt;&lt;/CODE&gt; 
&lt;P&gt;and the following C# console app:&lt;/P&gt;&lt;CODE style="FONT-SIZE:12px;"&gt;&lt;SPAN style="COLOR:blue;"&gt;using &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;System&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;using &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;System.Collections.Generic&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;using &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;System.Text&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;using &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;System.Data&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;using &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;System.Data.SqlClient&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;namespace &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;ConsoleApplication3 &lt;BR&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;class &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Program &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public struct &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public int &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowID&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public string &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DiffVal&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;public &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;int &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;rowid&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; RowID &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;rowid&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DiffVal &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;static void &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Main&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;[] args&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DateTime startTSQL&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime finishTSQL&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime startCLR&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime finishCLR&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;clrdata &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RunCLRTest&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;sqldata &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RunSQLTest&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;startCLR &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime.Now&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;clrdata &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RunCLRTest&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;finishCLR &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime.Now&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;startTSQL &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime.Now&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;sqldata &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RunSQLTest&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;finishTSQL &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime.Now&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;TimeSpan sql &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;finishTSQL.Subtract&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;startTSQL&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;TimeSpan clr &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;finishCLR.Subtract&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;startCLR&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Console.WriteLine&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Format&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"SQL RunTime: {0} seconds, {1} milliseconds"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;sql.Seconds&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;sql.Milliseconds&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Console.WriteLine&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Format&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"CLR RunTime: {0} seconds, {1} milliseconds"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;clr.Seconds&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;clr.Milliseconds&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Console.WriteLine&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"Press Any Key to Exit!"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;Console.Read&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private static &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RunSQLTest&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;ret &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlConnection conn &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlConnection&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"Server=.;Database=tempdb;Trusted_Connection=True;"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;conn.Open&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlCommand cmd &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlCommand&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"select rowid, dbo.testSql(date1, date2) from temptimes"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;conn&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlDataReader dr &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;cmd.ExecuteReader&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;while &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dr.Read&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;()) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret.Add&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dr.GetInt32&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;), &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dr.GetString&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;))); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.Close&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;ret&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private static &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RunCLRTest&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;() &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;ret &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;List&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;lt;&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;&amp;gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlConnection conn &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlConnection&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"Server=.;Database=tempdb;Trusted_Connection=True;"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;conn.Open&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlCommand cmd &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlCommand&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"select rowid, date1, date2 from temptimes"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;conn&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;SqlDataReader dr &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;cmd.ExecuteReader&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;while &lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dr.Read&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;()) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ret.Add&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;new &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;RowData&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dr.GetInt32&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;0&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;), &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;CSharpDateDiff&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dr.GetDateTime&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;1&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;), &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;dr.GetDateTime&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;2&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)))); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; conn.Close&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;ret&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;; &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;} &lt;BR&gt;&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;private static string &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;CSharpDateDiff&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime first&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;DateTime second&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;) &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;{ &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TimeSpan diff &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;= &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;second.Subtract&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;first&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;)&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Duration&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:blue;"&gt;return string&lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;.Format&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;(&lt;/SPAN&gt;&lt;SPAN style="COLOR:darkred;"&gt;"{0}:{1}:{2}:{3}"&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Days&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Hours&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Minutes&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;, &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;diff.Seconds&lt;/SPAN&gt;&lt;SPAN style="COLOR:gray;"&gt;); &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="COLOR:black;"&gt;} &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;BR&gt;} &lt;BR&gt;&lt;/SPAN&gt;&lt;/CODE&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;you will find that the CLR parsing is faster consistently for this simplistic test.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/WindowsLiveWriter/SQLTipKeepyourPresentationLogicinyourPre_121D2/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height=195 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/WindowsLiveWriter/SQLTipKeepyourPresentationLogicinyourPre_121D2/image_thumb_1.png" width=481 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;add to that the output of a SqlTrace for the execution:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://sqlblog.com/blogs/jonathan_kehayias/WindowsLiveWriter/SQLTipKeepyourPresentationLogicinyourPre_121D2/image_2.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH:0px;BORDER-LEFT-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-RIGHT-WIDTH:0px;" height=134 alt=image src="http://sqlblog.com/blogs/jonathan_kehayias/WindowsLiveWriter/SQLTipKeepyourPresentationLogicinyourPre_121D2/image_thumb.png" width=729 border=0&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;and you can see that the TSQL function drives more CPU and has a longer duration in both of the executions performed by the C# code above.&amp;nbsp; Speaking of which, why did I run both loads twice in the code?&amp;nbsp; It was done intentionally, to remove any cost of setting up the SqlConnection to the SQL Server initially, and to remove anyone's ability to point to cached data being beneficial to one call over the other.&amp;nbsp; The numbers reported by the app are for the second runs which would have loaded the data into the Buffer Cache so both work from cache.&amp;nbsp; The SqlTrace numbers hold true to the C# numbers as well.&lt;/P&gt;
&lt;P&gt;So in the future hopefully this will help you make the decision to do presentation work in the presentation layer, and leave the database server to what it does the best, CRUD (create, retrieve, update, delete) operations on data.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;EDIT AFTER THE FACT:&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;After reading this post,&amp;nbsp;&lt;A id=bp___v___ctl00_ctl00_bcr_r___postlist___EntryItems_ctl01_AuthorLink href="http://sqlblog.com/user/Profile.aspx?UserID=2141"&gt;Alexander Kuznetsov&lt;/A&gt;&amp;nbsp; wrote a followup post called 
&lt;H4 class=BlogPostHeader&gt;&lt;A id=bp___v___ctl00_ctl00_bcr_r___postlist___EntryItems_ctl01_PostTitle href="http://sqlblog.com/blogs/alexander_kuznetsov/archive/2009/02/20/should-i-always-keep-my-presentation-logic-in-my-presentation-layer.aspx"&gt;Should I Always Keep My Presentation Logic in My Presentation Layer?&lt;/A&gt; &lt;/H4&gt;
&lt;P&gt;where he covers reasons for placing Presentation Login inside SQL Server. After reading this post, please jump over to his and see the other side of the story.&amp;nbsp; Many thanks to Alexander for covering those in his post.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description></item></channel></rss>