<?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>The Rambling DBA: Jonathan Kehayias : Transact-SQL, MSDN Forums</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Transact-SQL/MSDN+Forums/default.aspx</link><description>Tags: Transact-SQL, MSDN Forums</description><dc:language>en</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>Using DDL Triggers to Dynamically Create DML Triggers</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2009/05/28/using-ddl-triggers-to-dynamically-create-dml-triggers.aspx</link><pubDate>Thu, 28 May 2009 10:24:06 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:14315</guid><dc:creator>Jonathan Kehayias</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/jonathan_kehayias/comments/14315.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/jonathan_kehayias/commentrss.aspx?PostID=14315</wfw:commentRss><description>&lt;p&gt;This one is from the MSDN Forums on a post titled &lt;a href="http://social.msdn.microsoft.com/Forums/en-US/sqldatabaseengine/thread/b50f8e6e-2c6a-4d84-8dcc-f0cfdb5e406d"&gt;DDL trigger limitations&lt;/a&gt;.&amp;#160; Basically the problem in a nutshell is that an application is harvesting information from the Internet and storing it in SQL Server on what appears to be a timed schedule.&amp;#160; When it stores the information in SQL Server it checks if a tablename exists and performs a DROP/CREATE for the table before storing data into the table.&amp;#160; The problem being posed was how to get the data into a &amp;quot;historical data&amp;quot; table so that existing data isn't lost when the table is being dropped by using a DDL Trigger.&amp;#160; Complete details are available in the post.&lt;/p&gt;  &lt;p&gt;A quick fire solution that I came up with while being narrow focused on the question being asked alone was to use a DDL trigger for CREATE_TABLE that executed a Dynamic SQL Statement to create a DML trigger FOR INSERT on the newly created table.&amp;#160; The DML Trigger will then copy the rows from the inserted table into the &amp;quot;historical data&amp;quot; table for permanent storage.&amp;#160; It's really not that complex, and it works to solve the immediate problem.&lt;/p&gt; &lt;code style="font-size:12px;"&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;&lt;span style="color:black;"&gt;dbo.persistedtable      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&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:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;somecolumn &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;100&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:black;"&gt;someothercolumn &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;100&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;CREATE TRIGGER &lt;/span&gt;&lt;span style="color:black;"&gt;new_table_add_trigger      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;ON DATABASE      &lt;br /&gt;FOR &lt;/span&gt;&lt;span style="color:black;"&gt;create_table      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;AS      &lt;br /&gt;      &lt;br /&gt;SET &lt;/span&gt;&lt;span style="color:black;"&gt;nocount &lt;/span&gt;&lt;span style="color:blue;"&gt;ON&amp;#160; &lt;br /&gt;      &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@data &lt;/span&gt;&lt;span style="color:black;"&gt;xml      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@data &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;EVENTDATA&lt;/span&gt;&lt;span style="color:gray;"&gt;()      &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;@objname &lt;/span&gt;&lt;span style="color:black;"&gt;sysname      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@objname &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:#434343;"&gt;@data&lt;/span&gt;&lt;span style="color:black;"&gt;.value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/EVENT_INSTANCE/ObjectName)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(256)'&lt;/span&gt;&lt;span style="color:gray;"&gt;)      &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;@sql &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:blue;"&gt;MAX&lt;/span&gt;&lt;span style="color:gray;"&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'create trigger ' &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:#434343;"&gt;@objname &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:red;"&gt;'_inserted      &lt;br /&gt;on ' &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:#434343;"&gt;@objname &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:red;"&gt;'      &lt;br /&gt;after insert       &lt;br /&gt;as       &lt;br /&gt;begin       &lt;br /&gt;      &lt;br /&gt;insert into persistedtable (rowid, somecolumn, someothercolumn)       &lt;br /&gt;select rowid, somecolumn, someothercolumn       &lt;br /&gt;from inserted       &lt;br /&gt;      &lt;br /&gt;end'       &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;EXECUTE &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql&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;CREATE TABLE &lt;/span&gt;&lt;span style="color:black;"&gt;testtable1      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&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;/span&gt;&lt;span style="color:black;"&gt;somecolumn &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;100&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:black;"&gt;someothercolumn &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;100&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;testtable1 &lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'test1'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'test1'&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;DROP TABLE &lt;/span&gt;&lt;span style="color:black;"&gt;testtable1      &lt;br /&gt;GO       &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;&lt;span style="color:black;"&gt;testtable1      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&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;/span&gt;&lt;span style="color:black;"&gt;somecolumn &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;100&lt;/span&gt;&lt;span style="color:gray;"&gt;), &lt;/span&gt;&lt;span style="color:black;"&gt;someothercolumn &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;100&lt;/span&gt;&lt;span style="color:gray;"&gt;))      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;&lt;span style="color:black;"&gt;testtable1 &lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'test2'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'test2'&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;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;persistedtable      &lt;br /&gt;&lt;/span&gt;&lt;/code&gt;  &lt;p&gt;However, what I didn't realize when I wrote my response was that an additional response from the original poster was added with some further details that changed my perception of how best to solve the problem.&amp;#160; Essentially there are three major problems with the above solution, though it works.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Triggers are expensive, and are often the last thing you think about when troubleshooting performance problems and irregular activity in your database. &lt;/li&gt;    &lt;li&gt;The insert transactions are going to be slower because you are doing a double insert for each record, so expect to take a performance hit.&amp;#160; &lt;/li&gt;    &lt;li&gt;The Dynamic SQL code being used to create the FOR INSERT trigger on the table is safe only because it is using controlled data in the way it concatenates the object_name into the SQL command to be executed by the EXECUTE command.&amp;#160; Using Dynamic SQL in this manner with unchecked inputs because SQL Injection can occur which is very dangerous. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Since the process is running on a schedule, I would instead opt for a slightly more complex, but more also more robust solution if I were actually implementing a change of this nature and couldn't change the application behavior itself.&amp;#160; First I would create a table that had a single column for the tablename being created by the application, and then change the DDL Trigger so that all it did was insert the tablename being created into this table.&amp;#160; Then a small stored procedure can be written to read the names from this table if any exist and copy the data into the &amp;quot;historical data&amp;quot; table.&lt;/p&gt; &lt;code style="font-size:12px;"&gt;&lt;span style="color:blue;"&gt;CREATE TABLE &lt;/span&gt;&lt;span style="color:black;"&gt;ddl_changed_tables      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;tablename sysname&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;CREATE TRIGGER &lt;/span&gt;&lt;span style="color:black;"&gt;new_table_add      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;ON DATABASE      &lt;br /&gt;FOR &lt;/span&gt;&lt;span style="color:black;"&gt;create_table      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;AS      &lt;br /&gt;      &lt;br /&gt;SET &lt;/span&gt;&lt;span style="color:black;"&gt;nocount &lt;/span&gt;&lt;span style="color:blue;"&gt;ON&amp;#160; &lt;br /&gt;      &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@data &lt;/span&gt;&lt;span style="color:black;"&gt;xml      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@data &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;EVENTDATA&lt;/span&gt;&lt;span style="color:gray;"&gt;()      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;INSERT INTO &lt;/span&gt;&lt;span style="color:black;"&gt;ddl_changed_tables &lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;VALUES&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@data&lt;/span&gt;&lt;span style="color:black;"&gt;.value&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:red;"&gt;'(/EVENT_INSTANCE/ObjectName)[1]'&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'varchar(256)'&lt;/span&gt;&lt;span style="color:gray;"&gt;))      &lt;br /&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;CREATE PROCEDURE &lt;/span&gt;&lt;span style="color:black;"&gt;migrate_new_data      &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;@sql &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:blue;"&gt;MAX&lt;/span&gt;&lt;span style="color:gray;"&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:black;"&gt;sysname      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;= MIN&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;ddl_changed_tables      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;IS &lt;/span&gt;&lt;span style="color:gray;"&gt;NOT NULL      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN      &lt;br /&gt;      &lt;br /&gt;SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;'insert into persistedtable (rowid, somecolumn, someothercolumn)      &lt;br /&gt;select rowid, somecolumn, someothercolumn       &lt;br /&gt;from ' &lt;/span&gt;&lt;span style="color:gray;"&gt;+ &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;EXECUTE&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql&lt;/span&gt;&lt;span style="color:gray;"&gt;)      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DELETE &lt;/span&gt;&lt;span style="color:black;"&gt;ddl_changed_tables      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:black;"&gt;tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;= MIN&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;ddl_changed_tables      &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;END      &lt;br /&gt;      &lt;br /&gt;END       &lt;br /&gt;&lt;/span&gt;&lt;span style="color:black;"&gt;GO&lt;/span&gt;&lt;/code&gt;   &lt;p&gt;The benefit here is that the copy process doesn't happen during the initial insert, so the performance of the initial process is not impacted.&amp;#160; The downside is that you could catch a table in a half load state depending on the scheduling of the process actually running.&amp;#160; If I knew more about the problem, this could probably be overcome.&lt;/p&gt;  &lt;p&gt;In the end, either of these solutions can be used to solve the problem, but I prefer to avoid the use of DML triggers in design if another process can be developed to accomplish the same task.&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=14315" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Transact-SQL/default.aspx">Transact-SQL</category><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/MSDN+Forums/default.aspx">MSDN Forums</category><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category></item><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>Jonathan Kehayias</dc:creator><slash:comments>1</slash:comments><comments>http://sqlblog.com/blogs/jonathan_kehayias/comments/12018.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/jonathan_kehayias/commentrss.aspx?PostID=12018</wfw:commentRss><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;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=12018" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Transact-SQL/default.aspx">Transact-SQL</category><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/MSDN+Forums/default.aspx">MSDN Forums</category><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Miscellaneous/default.aspx">Miscellaneous</category></item><item><title>Drop All Indexes and Stats in one Script</title><link>http://sqlblog.com/blogs/jonathan_kehayias/archive/2008/12/15/drop-all-indexes-and-stats-in-one-script.aspx</link><pubDate>Mon, 15 Dec 2008 12:44:12 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:11298</guid><dc:creator>Jonathan Kehayias</dc:creator><slash:comments>0</slash:comments><comments>http://sqlblog.com/blogs/jonathan_kehayias/comments/11298.aspx</comments><wfw:commentRss>http://sqlblog.com/blogs/jonathan_kehayias/commentrss.aspx?PostID=11298</wfw:commentRss><description>&lt;p&gt;I am not sure why someone would want to do this, but it was asked on the forums, and I figured I would post the code I created to perform such a nightmarish operation.&amp;#160; As with any post that I make providing code that could be potentially damaging and dangerous, if you use it, you do so at your own risk.&amp;#160; Don't send me emails complaining that you got fired for deleting all the indexes with the scripts on this post.&amp;#160; I am not going to be able to help you fix it, and my recommendation is going to be restore a backup, and start scripting them all off if you still have a job.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;SQL Server 2000 Code&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;4000&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes &lt;/span&gt;&lt;span style="color:blue;"&gt;CURSOR FOR          &lt;br /&gt;          &lt;br /&gt;SELECT &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;sysusers.name          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.id &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.id          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sysusers &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.uid &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;sysusers.uid          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:black;"&gt;indid &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;indid &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color:black;"&gt;255          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:magenta;"&gt;INDEXPROPERTY&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.id&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'IsStatistics'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.&lt;/span&gt;&lt;span style="color:blue;"&gt;TYPE = &lt;/span&gt;&lt;span style="color:red;"&gt;N'U'          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND NOT EXISTS (&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:black;"&gt;1 &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.name &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.name&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.id&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;indid &lt;/span&gt;&lt;span style="color:blue;"&gt;DESC          &lt;br /&gt;          &lt;br /&gt;OPEN &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@@fetch_status &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN          &lt;br /&gt;&amp;#160; SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'DROP INDEX '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;PRINT &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:darkred;"&gt;sp_executesql &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;END          &lt;br /&gt;CLOSE &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DEALLOCATE &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes          &lt;br /&gt;          &lt;br /&gt;GO           &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;4000&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats &lt;/span&gt;&lt;span style="color:blue;"&gt;CURSOR FOR          &lt;br /&gt;          &lt;br /&gt;SELECT &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;sysusers.name          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.id &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.id          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sysusers &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.uid &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;sysusers.uid          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:black;"&gt;indid &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;indid &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color:black;"&gt;255          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:magenta;"&gt;INDEXPROPERTY&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.id&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;sysindexes.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:red;"&gt;'IsStatistics'&lt;/span&gt;&lt;span style="color:gray;"&gt;) &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;1          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;sysobjects.&lt;/span&gt;&lt;span style="color:blue;"&gt;TYPE = &lt;/span&gt;&lt;span style="color:red;"&gt;N'U'&lt;/span&gt;&lt;span style="color:gray;"&gt;;          &lt;br /&gt;          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;OPEN &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@@fetch_status &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN          &lt;br /&gt;&amp;#160; SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'DROP STATISTICS '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:darkred;"&gt;sp_executesql &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:green;"&gt;--PRINT @sql          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;END          &lt;br /&gt;CLOSE &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DEALLOCATE &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats          &lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The above script will work for SQL 2005 and 2008 also, but only because compatibility views have been carried forward in code by Microsoft. The correct code for doing this in SQL 2005 and 2008 is as follows:    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;SQL Server 2005/2008&lt;/strong&gt;&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;code style="font-size:12px;"&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;4000&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes &lt;/span&gt;&lt;span style="color:blue;"&gt;CURSOR FOR          &lt;br /&gt;          &lt;br /&gt;SELECT &lt;/span&gt;&lt;span style="color:black;"&gt;indexes.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;objects.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;schemas.name          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;sys.indexes          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sys.objects &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;indexes.&lt;/span&gt;&lt;span style="color:magenta;"&gt;OBJECT_ID &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;objects.&lt;/span&gt;&lt;span style="color:magenta;"&gt;OBJECT_ID          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sys.schemas &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;objects.schema_id &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;schemas.schema_id          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:black;"&gt;indexes.index_id &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;indexes.index_id &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color:black;"&gt;255          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;objects.is_ms_shipped &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND NOT EXISTS (&lt;/span&gt;&lt;span style="color:blue;"&gt;SELECT &lt;/span&gt;&lt;span style="color:black;"&gt;1 &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;sys.objects &lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:black;"&gt;objects.name &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;indexes.name&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;&lt;span style="color:black;"&gt;objects.&lt;/span&gt;&lt;span style="color:magenta;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;indexes.index_id &lt;/span&gt;&lt;span style="color:blue;"&gt;DESC          &lt;br /&gt;          &lt;br /&gt;          &lt;br /&gt;SELECT &lt;/span&gt;&lt;span style="color:gray;"&gt;* &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;sys.stats          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;OPEN &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@@fetch_status &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN          &lt;br /&gt;&amp;#160; SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'DROP INDEX '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;PRINT &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:darkred;"&gt;sp_executesql &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@indexname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;END          &lt;br /&gt;CLOSE &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DEALLOCATE &lt;/span&gt;&lt;span style="color:black;"&gt;dropindexes          &lt;br /&gt;          &lt;br /&gt;GO           &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname &lt;/span&gt;&lt;span style="color:blue;"&gt;SYSNAME          &lt;br /&gt;DECLARE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;NVARCHAR&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:black;"&gt;4000&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DECLARE &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats &lt;/span&gt;&lt;span style="color:blue;"&gt;CURSOR FOR          &lt;br /&gt;          &lt;br /&gt;SELECT &lt;/span&gt;&lt;span style="color:black;"&gt;stats.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;objects.name&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;schemas.name          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;sys.stats          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sys.objects &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;stats.&lt;/span&gt;&lt;span style="color:magenta;"&gt;OBJECT_ID &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;objects.&lt;/span&gt;&lt;span style="color:magenta;"&gt;OBJECT_ID          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;JOIN &lt;/span&gt;&lt;span style="color:black;"&gt;sys.schemas &lt;/span&gt;&lt;span style="color:blue;"&gt;ON &lt;/span&gt;&lt;span style="color:black;"&gt;objects.schema_id &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;schemas.schema_id          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHERE &lt;/span&gt;&lt;span style="color:black;"&gt;stats.stats_id &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;gt; &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;stats.stats_id &lt;/span&gt;&lt;span style="color:gray;"&gt;&amp;lt; &lt;/span&gt;&lt;span style="color:black;"&gt;255          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:gray;"&gt;AND &lt;/span&gt;&lt;span style="color:black;"&gt;objects.is_ms_shipped &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;ORDER BY &lt;/span&gt;&lt;span style="color:black;"&gt;objects.&lt;/span&gt;&lt;span style="color:magenta;"&gt;OBJECT_ID&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:black;"&gt;stats.stats_id &lt;/span&gt;&lt;span style="color:blue;"&gt;DESC          &lt;br /&gt;          &lt;br /&gt;OPEN &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;WHILE &lt;/span&gt;&lt;span style="color:#434343;"&gt;@@fetch_status &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:black;"&gt;0          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;BEGIN          &lt;br /&gt;&amp;#160; SET &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql &lt;/span&gt;&lt;span style="color:blue;"&gt;= &lt;/span&gt;&lt;span style="color:red;"&gt;N'DROP STATISTICS '&lt;/span&gt;&lt;span style="color:gray;"&gt;+&lt;/span&gt;&lt;span style="color:magenta;"&gt;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&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;QUOTENAME&lt;/span&gt;&lt;span style="color:gray;"&gt;(&lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname&lt;/span&gt;&lt;span style="color:gray;"&gt;)          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;EXEC &lt;/span&gt;&lt;span style="color:darkred;"&gt;sp_executesql &lt;/span&gt;&lt;span style="color:#434343;"&gt;@sql&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:green;"&gt;--PRINT @sql          &lt;br /&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;FETCH &lt;/span&gt;&lt;span style="color:black;"&gt;NEXT &lt;/span&gt;&lt;span style="color:blue;"&gt;FROM &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats &lt;/span&gt;&lt;span style="color:blue;"&gt;INTO &lt;/span&gt;&lt;span style="color:#434343;"&gt;@statsname&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@tablename&lt;/span&gt;&lt;span style="color:gray;"&gt;, &lt;/span&gt;&lt;span style="color:#434343;"&gt;@ownername          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;END          &lt;br /&gt;CLOSE &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats          &lt;br /&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;DEALLOCATE &lt;/span&gt;&lt;span style="color:black;"&gt;dropstats          &lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Hope it helps someone out.&lt;/p&gt;&lt;img src="http://sqlblog.com/aggbug.aspx?PostID=11298" width="1" height="1"&gt;</description><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/Transact-SQL/default.aspx">Transact-SQL</category><category domain="http://sqlblog.com/blogs/jonathan_kehayias/archive/tags/MSDN+Forums/default.aspx">MSDN Forums</category></item></channel></rss>