<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:copyright="http://blogs.law.harvard.edu/tech/rss" xmlns:image="http://purl.org/rss/1.0/modules/image/">
    <channel>
        <title>SQL General</title>
        <link>http://weblogs.sqlteam.com/geoffh/category/291.aspx</link>
        <description>SQL Stuff that doesn't fit in another category</description>
        <language>en-US</language>
        <copyright>Geoff N. Hiten</copyright>
        <managingEditor>sqlcraftsman@gmail.com</managingEditor>
        <generator>Subtext Version 1.9.4.0</generator>
        <item>
            <title>Speaking Schedule</title>
            <link>http://weblogs.sqlteam.com/geoffh/archive/2008/03/27/Speaking-Schedule.aspx</link>
            <description>&lt;p&gt;If you feel an uncontrollable urge to listen to my voice or to meet me in person, here is your chance. &lt;/p&gt;
&lt;p&gt;You can listen to me on Greg Low's SQL Down Under Podcast. I discuss SQL Clustering, SANs, and ramble on about other topics as well. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sqldownunder.com/PreviousShows/tabid/98/Default.aspx"&gt;http://www.sqldownunder.com/PreviousShows/tabid/98/Default.aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;I will be joining Kevin Kline and Hilary Cotter on a webcast for Quest Software on April 9&lt;sup&gt;th&lt;/sup&gt;. We will be discussing features in the forthcoming SQL 2008 product. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.quest.com/events/listdetails.aspx?contentid=7059&amp;amp;searchoff=true&amp;amp;technology=34&amp;amp;prod=&amp;amp;prodfamily=&amp;amp;loc"&gt;http://www.quest.com/events/listdetails.aspx?contentid=7059&amp;amp;searchoff=true&amp;amp;technology=34&amp;amp;prod=&amp;amp;prodfamily=&amp;amp;loc&lt;/a&gt;= &lt;/p&gt;
&lt;p&gt;And I will be speaking at the SQLSaturday #3 event in Jacksonville, Florida on May 3&lt;sup&gt;rd&lt;/sup&gt;. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.sqlsaturday.com/default.aspx"&gt;http://www.sqlsaturday.com/default.aspx&lt;/a&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/geoffh/aggbug/60557.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Geoff N. Hiten</dc:creator>
            <guid>http://weblogs.sqlteam.com/geoffh/archive/2008/03/27/Speaking-Schedule.aspx</guid>
            <pubDate>Thu, 27 Mar 2008 14:36:01 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/geoffh/archive/2008/03/27/Speaking-Schedule.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/geoffh/comments/commentRss/60557.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/geoffh/services/trackbacks/60557.aspx</trackback:ping>
        </item>
        <item>
            <title>Leverage</title>
            <link>http://weblogs.sqlteam.com/geoffh/archive/2008/02/06/Leverage.aspx</link>
            <description>&lt;p&gt;One definition of leverage is "&lt;span style="FONT-SIZE: 10pt; COLOR: #333333"&gt;&lt;em&gt;the use of a small initial investment, credit, or borrowed funds to gain a very high return in relation to one's investment, to control a much larger investment, or to reduce one's own liability for any loss." (Courtesy Dictionary.Com). &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;In programming, the smallest change we can make is a single bit. The next smallest change and the one we can make most effectively in human-readable source code is a single character. This story is how changing one character in a 300 line stored procedure removed 90% of the impact of the worst single query on the entire server. &lt;/p&gt;
&lt;p&gt;This process began with a fairly normal analysis of a poorly performing server. As usual, the server was found to be I/O bound. Routine analysis indicated a particular query within a stored procedure to be the worst performing query. Comparing this query to the second worst query on the top ten list revealed it consumed 15 times the CPU and 20 times the IO cycles of the next worst offender. Calling Captain Obvious, please report to Performance Tuning. &lt;/p&gt;
&lt;p&gt;I did an index analysis. No joy there. Everything looked correct and the query plans were fine. The query took a lookup string, hit a master lookup table, did key lookups across 4 other tables (three joins deep at most) and returned the extended attributes of the master key. The master table had about 400K rows and was constantly growing with new key values. This lookup was executed hundreds of thousands of times a day, so any improvement would be significant. &lt;/p&gt;
&lt;p&gt;Since the schema and data was from an external data provider, I couldn't make any significant changes, nor was there any support for de-normalizing the data for a flat lookup. &lt;/p&gt;
&lt;p&gt;My brilliant idea was to create an indexed view and let SQL Enterprise Edition do an under-the-covers substitution. Like most brilliant ideas, this did not work as expected. I could not get SQL to substitute the view for the underlying tables. ARRGHHH! &lt;/p&gt;
&lt;p&gt;Finally I realized the problem was not in the query, nor was it in the index. It was something we usually take for granted. An implicit data type conversion was killing me. This was the culprit: &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; MasterKey &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @LookupKey &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Well, it was sort of the culprit. You see, Master_key was defined as varchar(10) by the external data provider and @LookupKey was defined by a wannabe senior developer. Naturally, a real developer uses forward-compatible data types like nvarchar(10) and not nearly obsolete types like varchar(10). &lt;/p&gt;
&lt;p&gt;Most of us know not to write something like this: &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; Column_Value &lt;span style="COLOR: gray"&gt;/&lt;/span&gt; 2 &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 4 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;We write something like: &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; Column_Value &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 8&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;The idea is to NOT force SQL to scan the column, run every value through a function, and then compare it to a constant. The correct way is to pre-calculate the constant and compare it to the column. Turns scans into seeks, cuts IO, promotes world peace, you get the idea. &lt;/p&gt;
&lt;p&gt;So what does this have to do with the first WHERE clause. One rule on implicit conversions to larger data types is that the lower type always gets promoted. Thus the WHERE clause actually became: &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;convert&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: blue"&gt;nvarchar&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;10&lt;span style="COLOR: gray"&gt;),&lt;/span&gt; MasterKey&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @LookupKey&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Now that is pretty obviously bad. &lt;/p&gt;
&lt;p&gt;By now, you have likely figured out the one character fix. Remove the 'N' from the declare function and use the old, bad, non-portable data type. Given the data definition for the real-world data type in this example only uses A-Z and 0-9 characters and the fix was at least a full order of magnitude faster, I can live with that. &lt;/p&gt;
&lt;p&gt;Leverage. One character change fixes an entire problem server. &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/geoffh/aggbug/60493.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Geoff N. Hiten</dc:creator>
            <guid>http://weblogs.sqlteam.com/geoffh/archive/2008/02/06/Leverage.aspx</guid>
            <pubDate>Thu, 07 Feb 2008 02:23:43 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/geoffh/archive/2008/02/06/Leverage.aspx#feedback</comments>
            <slash:comments>2</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/geoffh/comments/commentRss/60493.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/geoffh/services/trackbacks/60493.aspx</trackback:ping>
        </item>
        <item>
            <title>SQL 2008 CTP5 First Glance</title>
            <link>http://weblogs.sqlteam.com/geoffh/archive/2007/11/16/SQL-2008-CTP5-First-Glance.aspx</link>
            <description>&lt;p&gt;Microsoft began releasing SQL 2008 CTP5 yesterday through Connect.   It should hit MSDN within a few days so everyone can play along.  The most obvious change for this release is a much-needed &lt;span style="text-decoration:line-through"&gt;improvement&lt;/span&gt; replacement of the installer.  As I mentioned in an earlier post, the installer is being totally re-engineered.  We still don't have clustering support in this CTP, but the basic installer changes are now included.  While there are a few "fit and finish" items that need cleanup, the overall design of the installer is very good.  The requirements checker is much lighter and cleaner.  The install review presentation page is in a hierarchal form and actually makes sense.  Best of all, you can specify separate default directories for system databases, user databases, user database log, tempdb data, tempdb log and backup target locations.  Installation is one area where attention to detail and listening to customer feedback has given the SQL development team a significant win.&lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/geoffh/aggbug/60407.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Geoff N. Hiten</dc:creator>
            <guid>http://weblogs.sqlteam.com/geoffh/archive/2007/11/16/SQL-2008-CTP5-First-Glance.aspx</guid>
            <pubDate>Fri, 16 Nov 2007 19:11:10 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/geoffh/archive/2007/11/16/SQL-2008-CTP5-First-Glance.aspx#feedback</comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/geoffh/comments/commentRss/60407.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/geoffh/services/trackbacks/60407.aspx</trackback:ping>
        </item>
        <item>
            <title>Online Reindex = ON</title>
            <link>http://weblogs.sqlteam.com/geoffh/archive/2007/11/01/Online-Reindex--ON.aspx</link>
            <description>&lt;p&gt;For the past several editions, SQL Books On-Line (BOL) has helpfully included a script to rebuild or defragment (since 2000) an index. Being Microsoft, this script is NOT located under the reindex or defragmentation topic, it is included in the fragmentation analysis section. For SQL 2000, this is DBCC SHOWCONTIG. For SQL 2005, they rewrote it to use the new system views and stashed it under sys.dm_db_physical_stats. It also uses the new ALTER INDEX command rather than the older DBCC DBREINDEX or DBCC INDEXDEFRAG command. However, this script does not allow you to take advantage of online indexing &lt;/p&gt;
&lt;p&gt;My first attempt to modify the script consisted of dropping the defragmentation option and simply adding a WITH ONLINE = ON line to the script. As with most quick and dirty mods, this failed miserably. I soon discovered that some indexes cannot be rebuilt online. There are two conditions that will prevent online reindexing, both of which involve BLOB data types: &lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR: red"&gt;You cannot online reindex a non-clustered index that contains a BLOB column. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="COLOR: red"&gt;You cannot online reindex a clustered index of a table that contains a BLOB column. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Pretty straightforward, or so it seems. The code to identify BLOB columns from an index is a bit tricky, but not too impossible. I used actual data type names rather than the internal data type IDs to make the code more readable. I also added a filter condition to remove "trivial" sized indexes. These are typically allocated into mixed extents and do not respond to defragmentation. There is no real harm in including them, but they clutter up the result set when troubleshooting. I kept tweaking the number until I got it as low as possible without an index reappearing in subsequent runs. The test platform was a Microsoft CRM implementation. For those unfamiliar with the table design of MSCRM, it uses GUIDs as primary keys and accepts the default of clustering the primary key. This makes for a nicely fragmented database to test, especially if there is a lot of insert and delete activity. &lt;/p&gt;
&lt;p&gt;So without further ado, here is the modified BOL code that allows for scripting online index rebuilds. &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Adapted from BOL script by Geoff N. Hiten. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;USE&lt;/span&gt; &lt;span style="COLOR: gray"&gt;&amp;lt;&lt;/span&gt;Your &lt;span style="COLOR: blue"&gt;Database&lt;/span&gt; &lt;span style="COLOR: blue"&gt;name&lt;/span&gt; here&lt;span style="COLOR: gray"&gt;&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;GO &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Ensure a USE &amp;lt;databasename&amp;gt; statement has been executed first. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SET&lt;/span&gt; &lt;span style="COLOR: blue"&gt;NOCOUNT&lt;/span&gt; &lt;span style="COLOR: blue"&gt;ON&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @objectid &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @indexid &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @partitioncount &lt;span style="COLOR: blue"&gt;bigint&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @schemaname &lt;span style="COLOR: blue"&gt;nvarchar&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;130&lt;span style="COLOR: gray"&gt;);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @objectname &lt;span style="COLOR: blue"&gt;nvarchar&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;130&lt;span style="COLOR: gray"&gt;);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @indexname &lt;span style="COLOR: blue"&gt;nvarchar&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;130&lt;span style="COLOR: gray"&gt;);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @partitionnum &lt;span style="COLOR: blue"&gt;bigint&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @partitions &lt;span style="COLOR: blue"&gt;bigint&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @frag &lt;span style="COLOR: blue"&gt;float&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @command &lt;span style="COLOR: blue"&gt;nvarchar&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;4000&lt;span style="COLOR: gray"&gt;);&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @HasBlobColumn &lt;span style="COLOR: blue"&gt;int&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @MaxFragmentation &lt;span style="COLOR: blue"&gt;int &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; @TrivialPageCount &lt;span style="COLOR: blue"&gt;int &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Tuning constants &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SET&lt;/span&gt; @MAxFragmentation &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 10 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SET&lt;/span&gt; @TrivialPageCount &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 12 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Conditionally select tables and indexes from the sys.dm_db_index_physical_stats function &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- and convert object and index IDs to names. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SELECT&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: fuchsia"&gt;object_id&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; objectid&lt;span style="COLOR: gray"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;index_id &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; indexid&lt;span style="COLOR: gray"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;partition_number &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; partitionnum&lt;span style="COLOR: gray"&gt;, &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;avg_fragmentation_in_percent &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; frag &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;INTO&lt;/span&gt; #work_to_do &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt; sys.dm_db_index_physical_stats &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;DB_ID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(),&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL,&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL&lt;/span&gt; &lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'LIMITED'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; avg_fragmentation_in_percent &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @MaxFragmentation &lt;span style="COLOR: green"&gt;-- arbitrary threshold. YMMV &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;    &lt;span style="COLOR: gray"&gt;AND&lt;/span&gt; index_id &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; 0 &lt;span style="COLOR: green"&gt;-- cannot defrag a heap &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;    &lt;span style="COLOR: gray"&gt;and&lt;/span&gt; page_count &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; @TrivialPageCount &lt;span style="COLOR: green"&gt;-- ignore trivial sized indexes &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Declare the cursor for the list of partitions to be processed. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DECLARE&lt;/span&gt; partitions &lt;span style="COLOR: blue"&gt;CURSOR&lt;/span&gt; &lt;span style="COLOR: blue"&gt;FOR&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; #work_to_do&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Open the cursor. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;OPEN&lt;/span&gt; partitions&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Loop through the partitions. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;WHILE&lt;/span&gt; &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;1&lt;span style="COLOR: gray"&gt;=&lt;/span&gt;1&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;BEGIN&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;FETCH&lt;/span&gt; &lt;span style="COLOR: blue"&gt;NEXT &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt; partitions &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;INTO&lt;/span&gt; @objectid&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; @indexid&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; @partitionnum&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; @frag&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;IF&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;@@FETCH_STATUS&lt;/span&gt; &lt;span style="COLOR: gray"&gt;&amp;lt;&lt;/span&gt; 0 &lt;span style="COLOR: blue"&gt;BREAK&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;        &lt;span style="COLOR: blue"&gt;Set&lt;/span&gt; @HasBlobColumn &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 0 &lt;span style="COLOR: green"&gt;-- reinitialize &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SELECT&lt;/span&gt; @objectname &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;QUOTENAME&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;o&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;name&lt;span style="COLOR: gray"&gt;),&lt;/span&gt; @schemaname &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;QUOTENAME&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;s&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;name&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.objects&lt;/span&gt; &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; o &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: gray"&gt;JOIN&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.schemas&lt;/span&gt; &lt;span style="COLOR: blue"&gt;as&lt;/span&gt; s &lt;span style="COLOR: blue"&gt;ON&lt;/span&gt; s&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;schema_id&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; o&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;schema_id &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; o&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;object_id&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @objectid&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SELECT&lt;/span&gt; @indexname &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;QUOTENAME&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: blue"&gt;name&lt;/span&gt;&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.indexes &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;object_id&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @objectid &lt;span style="COLOR: gray"&gt;AND&lt;/span&gt; index_id &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @indexid&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SELECT&lt;/span&gt; @partitioncount &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;count&lt;/span&gt; &lt;span style="COLOR: gray"&gt;(*) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;FROM&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.partitions &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;WHERE&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;object_id&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @objectid &lt;span style="COLOR: gray"&gt;AND&lt;/span&gt; index_id &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @indexid&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;        &lt;span style="COLOR: green"&gt;-- Check for BLOB columns &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; @indexid &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 1 &lt;span style="COLOR: green"&gt;-- only check here for clustered indexes ANY blob column on the table counts &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;Select&lt;/span&gt; @HasBlobColumn &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: blue"&gt;case&lt;/span&gt; &lt;span style="COLOR: blue"&gt;when&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;max&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;so&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;object_ID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;IS&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL&lt;/span&gt; &lt;span style="COLOR: blue"&gt;then&lt;/span&gt; 0 &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; 1 &lt;span style="COLOR: blue"&gt;end &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: blue"&gt;From&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.objects&lt;/span&gt; SO &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: gray"&gt;inner&lt;/span&gt; &lt;span style="COLOR: gray"&gt;join&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.columns&lt;/span&gt; SC &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: blue"&gt;on&lt;/span&gt; SO&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Object_id&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; SC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;object_id &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: gray"&gt;inner&lt;/span&gt; &lt;span style="COLOR: gray"&gt;join&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.types&lt;/span&gt; ST &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: blue"&gt;on&lt;/span&gt; SC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;system_type_id &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; ST&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;system_type_id &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: gray"&gt;and&lt;/span&gt; ST&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;name &lt;span style="COLOR: gray"&gt;in&lt;/span&gt; &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'text'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'ntext'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'image'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'varchar(max)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'varbinary(max)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'xml'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: blue"&gt;where&lt;/span&gt; SO&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Object_ID&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @objectID &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; &lt;span style="COLOR: green"&gt;-- nonclustered. Only need to check if indexed column is a BLOB &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;Select&lt;/span&gt; @HasBlobColumn &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; &lt;span style="COLOR: blue"&gt;case&lt;/span&gt; &lt;span style="COLOR: blue"&gt;when&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;max&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;so&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;object_ID&lt;/span&gt;&lt;span style="COLOR: gray"&gt;)&lt;/span&gt; &lt;span style="COLOR: gray"&gt;IS&lt;/span&gt; &lt;span style="COLOR: gray"&gt;NULL&lt;/span&gt; &lt;span style="COLOR: blue"&gt;then&lt;/span&gt; 0 &lt;span style="COLOR: blue"&gt;else&lt;/span&gt; 1 &lt;span style="COLOR: blue"&gt;end &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: blue"&gt;from&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.objects&lt;/span&gt; SO &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: gray"&gt;inner&lt;/span&gt; &lt;span style="COLOR: gray"&gt;join&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.index_columns&lt;/span&gt; SIC &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: blue"&gt;on&lt;/span&gt; SO&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Object_ID&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; SIC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;object_id &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: gray"&gt;inner&lt;/span&gt; &lt;span style="COLOR: gray"&gt;join&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.Indexes&lt;/span&gt; SI &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: blue"&gt;on&lt;/span&gt; SO&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Object_ID&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; SI&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Object_ID &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: gray"&gt;and&lt;/span&gt; SIC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;index_id &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; SI&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;index_id &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: gray"&gt;inner&lt;/span&gt; &lt;span style="COLOR: gray"&gt;join&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.columns&lt;/span&gt; SC &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: blue"&gt;on&lt;/span&gt; SO&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Object_id&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; SC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;object_id &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: gray"&gt;and&lt;/span&gt; SIC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;Column_id &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; SC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;column_id &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: gray"&gt;inner&lt;/span&gt; &lt;span style="COLOR: gray"&gt;join&lt;/span&gt; &lt;span style="COLOR: green"&gt;sys.types&lt;/span&gt; ST &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: blue"&gt;on&lt;/span&gt; SC&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;system_type_id &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; ST&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;system_type_id &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                    &lt;span style="COLOR: gray"&gt;and&lt;/span&gt; ST&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;name &lt;span style="COLOR: gray"&gt;in&lt;/span&gt; &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: red"&gt;'text'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'ntext'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'image'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'varchar(max)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'nvarchar(max)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'varbinary(max)'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;,&lt;/span&gt; &lt;span style="COLOR: red"&gt;'xml'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;                &lt;span style="COLOR: blue"&gt;where&lt;/span&gt; SO&lt;span style="COLOR: gray"&gt;.&lt;/span&gt;&lt;span style="COLOR: fuchsia"&gt;Object_ID&lt;/span&gt; &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @objectID &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;        &lt;span style="COLOR: blue"&gt;SET&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; N&lt;span style="COLOR: red"&gt;'ALTER INDEX '&lt;/span&gt; &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; @indexname &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; N&lt;span style="COLOR: red"&gt;' ON '&lt;/span&gt; &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; @schemaname &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; N&lt;span style="COLOR: red"&gt;'.'&lt;/span&gt; &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; @objectname &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; N&lt;span style="COLOR: red"&gt;' REBUILD'&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;        &lt;span style="COLOR: blue"&gt;if&lt;/span&gt; @HasBlobColumn &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; 1 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;Set&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; N&lt;span style="COLOR: red"&gt;' WITH( SORT_IN_TEMPDB = ON) ' &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;        &lt;span style="COLOR: blue"&gt;else &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;            &lt;span style="COLOR: blue"&gt;Set&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; N&lt;span style="COLOR: red"&gt;' WITH( ONLINE = ON, SORT_IN_TEMPDB = ON) ' &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;IF&lt;/span&gt; @partitioncount &lt;span style="COLOR: gray"&gt;&amp;gt;&lt;/span&gt; 1 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;SET&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;=&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; N&lt;span style="COLOR: red"&gt;' PARTITION='&lt;/span&gt; &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;CAST&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;@partitionnum &lt;span style="COLOR: blue"&gt;AS&lt;/span&gt; &lt;span style="COLOR: blue"&gt;nvarchar&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;10&lt;span style="COLOR: gray"&gt;)); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;PRINT&lt;/span&gt; N&lt;span style="COLOR: red"&gt;'Executing: '&lt;/span&gt; &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; @command &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; &lt;span style="COLOR: red"&gt;' Has Blob = '&lt;/span&gt; &lt;span style="COLOR: gray"&gt;+&lt;/span&gt; &lt;span style="COLOR: fuchsia"&gt;convert&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;&lt;span style="COLOR: blue"&gt;nvarchar&lt;/span&gt;&lt;span style="COLOR: gray"&gt;(&lt;/span&gt;2&lt;span style="COLOR: gray"&gt;),&lt;/span&gt;@HasBlobColumn&lt;span style="COLOR: gray"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;        &lt;span style="COLOR: blue"&gt;EXEC&lt;/span&gt; &lt;span style="COLOR: gray"&gt;(&lt;/span&gt;@command&lt;span style="COLOR: gray"&gt;) &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- PRINT N'Executing: ' + @command; &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;END&lt;/span&gt;&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Close and deallocate the cursor. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;CLOSE&lt;/span&gt; partitions&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DEALLOCATE&lt;/span&gt; partitions&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: green; FONT-FAMILY: Courier New"&gt;-- Drop the temporary table. &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;&lt;span style="COLOR: blue"&gt;DROP&lt;/span&gt; &lt;span style="COLOR: blue"&gt;TABLE&lt;/span&gt; #work_to_do&lt;span style="COLOR: gray"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="FONT-SIZE: 10pt; FONT-FAMILY: Courier New"&gt;GO&lt;/span&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/geoffh/aggbug/60389.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Geoff N. Hiten</dc:creator>
            <guid>http://weblogs.sqlteam.com/geoffh/archive/2007/11/01/Online-Reindex--ON.aspx</guid>
            <pubDate>Thu, 01 Nov 2007 13:35:00 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/geoffh/archive/2007/11/01/Online-Reindex--ON.aspx#feedback</comments>
            <slash:comments>1</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/geoffh/comments/commentRss/60389.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/geoffh/services/trackbacks/60389.aspx</trackback:ping>
        </item>
        <item>
            <title>BEGIN TRY</title>
            <link>http://weblogs.sqlteam.com/geoffh/archive/2007/09/25/BEGIN-TRY.aspx</link>
            <description>&lt;p&gt;Hopefully, I won't need a CATCH Block. &lt;/p&gt;
&lt;p&gt; In case that opening sentence didn't give you a hint, I am a bit of a tech geek.  &lt;a href="http://weblogs.sqlteam.com/billg/"&gt;Bill Graziano&lt;/a&gt; talked me into joining this merry band while at the PASS summit last week.  While I enjoy answering questions on newsgroups, this will give me a way to initiate conversations.  I looked around and decided SQLTeam would be a good place to stand and pontificate.&lt;/p&gt;
&lt;p&gt;And now for some real SQL content. Sort of.  &lt;/p&gt;
&lt;p&gt;Based on a lot of presentations by Microsoft on proposed features and bug fixes, I have to conclude that Connect really matters.  &lt;a href="https://connect.microsoft.com/"&gt;Connect&lt;/a&gt; is Microsoft's feedback center.  While the list of complaints about Connect is quite long, it has one overwhelming benefit.  The Microsoft SQL Development team actually pays attention to it.  Not only that, but Microsoft is allocating resources based on feedback gathered from Connect.  So get over the fact Connect seems modeled after a particularly clumsy session of "Messenger" at a Jr. High School party and use it.  Post bugs.  Post Suggestions.  Vote early and often.  You want to influence the product and you don't happen to have &lt;a href="http://www.microsoft.com/presspass/exec/kummert/default.mspx"&gt;Ted Kummert's&lt;/a&gt; digits on the speed dial.  Here is your chance.&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;&lt;img src="http://weblogs.sqlteam.com/geoffh/aggbug/60341.aspx" width="1" height="1" /&gt;</description>
            <dc:creator>Geoff N. Hiten</dc:creator>
            <guid>http://weblogs.sqlteam.com/geoffh/archive/2007/09/25/BEGIN-TRY.aspx</guid>
            <pubDate>Tue, 25 Sep 2007 18:40:06 GMT</pubDate>
            <comments>http://weblogs.sqlteam.com/geoffh/archive/2007/09/25/BEGIN-TRY.aspx#feedback</comments>
            <slash:comments>3</slash:comments>
            <wfw:commentRss>http://weblogs.sqlteam.com/geoffh/comments/commentRss/60341.aspx</wfw:commentRss>
            <trackback:ping>http://weblogs.sqlteam.com/geoffh/services/trackbacks/60341.aspx</trackback:ping>
        </item>
    </channel>
</rss>