<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.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>SQL Server Engine Tips</title><link>http://blogs.msdn.com/sqltips/default.aspx</link><description>Guidelines, Best Practices, TSQL and SQL Programming Tips &amp; Tricks.</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Converting from hex string to varbinary and vice versa</title><link>http://blogs.msdn.com/sqltips/archive/2008/07/02/converting-from-hex-string-to-varbinary-and-vice-versa.aspx</link><pubDate>Thu, 03 Jul 2008 01:26:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8669466</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/8669466.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=8669466</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=8669466</wfw:comment><description>&lt;p&gt;Converting hexadecimal values to varbinary and vice versa is now easier using the XQuery functionality available from SQL Server 2005. The code samples below show how to perform the conversion(s):&lt;/p&gt;  &lt;p&gt;-- Convert hexstring value in a variable to varbinary: &lt;/p&gt;  &lt;p&gt;declare @hexstring varchar(max);&lt;/p&gt;  &lt;p&gt;set @hexstring = 'abcedf012439';&lt;/p&gt;  &lt;p&gt;select cast('' as xml).value('xs:hexBinary( substring(sql:variable(&amp;quot;@hexstring&amp;quot;), sql:column(&amp;quot;t.pos&amp;quot;)) )', 'varbinary(max)')&lt;/p&gt;  &lt;p&gt;from (select case substring(@hexstring, 1, 2) when '0x' then 3 else 0 end) as t(pos)&lt;/p&gt;  &lt;p&gt;go&lt;/p&gt;  &lt;p&gt;-- Convert binary value in a variable to hexstring: &lt;/p&gt;  &lt;p&gt;declare @hexbin varbinary(max); &lt;/p&gt;  &lt;p&gt;set @hexbin = 0xabcedf012439; &lt;/p&gt;  &lt;p&gt;select '0x' + cast('' as xml).value('xs:hexBinary(sql:variable(&amp;quot;@hexbin&amp;quot;) )', 'varchar(max)'); &lt;/p&gt;  &lt;p&gt;go&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For more details on XQuery see link below:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms189075(SQL.100).aspx" href="http://msdn.microsoft.com/en-us/library/ms189075(SQL.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189075(SQL.100).aspx&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In SQL Server 2008, these conversions are even more easier since we added support directly in the CONVERT built-in function. The code samples below show how to perform the conversion(s):&lt;/p&gt;  &lt;p&gt;declare @hexstring varchar(max);&lt;/p&gt;  &lt;p&gt;set @hexstring = '0xabcedf012439';&lt;/p&gt;  &lt;p&gt;select CONVERT(varbinary(max), @hexstring, 1);&lt;/p&gt;  &lt;p&gt;set @hexstring = 'abcedf012439';&lt;/p&gt;  &lt;p&gt;select CONVERT(varbinary(max), @hexstring, 2);&lt;/p&gt;  &lt;p&gt;go&lt;/p&gt;  &lt;p&gt;declare @hexbin varbinary(max);&lt;/p&gt;  &lt;p&gt;set @hexbin = 0xabcedf012439;&lt;/p&gt;  &lt;p&gt;select CONVERT(varchar(max), @hexbin, 1), CONVERT(varchar(max), @hexbin, 2);&lt;/p&gt;  &lt;p&gt;go&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For more details on the new CONVERT binary styles see link below:&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms187928(SQL.100).aspx" href="http://msdn.microsoft.com/en-us/library/ms187928(SQL.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms187928(SQL.100).aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8669466" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/Programming/default.aspx">Programming</category></item><item><title>Converting from Base64 to varbinary and vice versa</title><link>http://blogs.msdn.com/sqltips/archive/2008/06/30/converting-from-base64-to-varbinary-and-vice-versa.aspx</link><pubDate>Tue, 01 Jul 2008 01:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8669430</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/8669430.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=8669430</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=8669430</wfw:comment><description>&lt;p&gt;Converting Base64 values to varbinary and vice versa is now easier using the XQuery functionality available from SQL Server 2005 onwards. The code samples below show how to perform the conversion:&lt;/p&gt;  &lt;p&gt;-- Convert Base64 value in a variable to varbinary:&lt;/p&gt;  &lt;p&gt;declare @str varchar(20);&lt;/p&gt;  &lt;p&gt;set @str = '3qAAAA==';&lt;/p&gt;  &lt;p&gt;select cast(N'' as xml).value('xs:base64Binary(sql:variable(&amp;quot;@str&amp;quot;))', 'varbinary(20)');&lt;/p&gt;  &lt;p&gt;-- Convert binary value in a variable to Base64:&lt;/p&gt;  &lt;p&gt;declare @bin varbinary(20);&lt;/p&gt;  &lt;p&gt;set @bin = 0xDEA00000;&lt;/p&gt;  &lt;p&gt;select cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable(&amp;quot;@bin&amp;quot;)))', 'varchar(20)');&lt;/p&gt;  &lt;p&gt;-- Convert varbinary value in a column to Base64:&lt;/p&gt;  &lt;p&gt;select top (10) cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:column(&amp;quot;qs.sql_handle&amp;quot;)))', 'varchar(512)') as sql_handle_base64&lt;/p&gt;  &lt;p&gt;into #t&lt;/p&gt;  &lt;p&gt;from sys.dm_exec_query_stats as qs;&lt;/p&gt;  &lt;p&gt;-- Convert Base64 value in a column to varbinary:&lt;/p&gt;  &lt;p&gt;select cast(N'' as xml).value('xs:base64Binary(sql:column(&amp;quot;t.sql_handle_base64&amp;quot;))', 'varbinary(20)') as sql_handle&lt;/p&gt;  &lt;p&gt;from #t as t;&lt;/p&gt;  &lt;p&gt;drop table #t;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;For more details on XQuery see link below:&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a title="http://msdn.microsoft.com/en-us/library/ms189075(SQL.100).aspx" href="http://msdn.microsoft.com/en-us/library/ms189075(SQL.100).aspx"&gt;http://msdn.microsoft.com/en-us/library/ms189075(SQL.100).aspx&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8669430" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/SQL+Server+2008/default.aspx">SQL Server 2008</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/Programming/default.aspx">Programming</category></item><item><title>Differences between ISNULL and COALESCE</title><link>http://blogs.msdn.com/sqltips/archive/2008/06/26/differences-between-isnull-and-coalesce.aspx</link><pubDate>Fri, 27 Jun 2008 03:55:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8659795</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/8659795.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=8659795</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=8659795</wfw:comment><description>&lt;P&gt;I came across a question in the SQL Server MVP newsgroup recently about ISNULL and COALESCE usage. COALESCE basically translates to CASE expression and ISNULL is a built-in implemented in the database engine. Both ISNULL and COALESCE can be used to get the same results but there are some differences.&lt;/P&gt;
&lt;P&gt;1. Data type determination of the resulting expression - ISNULL uses the first parameter type, COALESCE follows the CASE expression rules and returns type of value with highest precedence&lt;/P&gt;
&lt;P&gt;2. The NULLability of result expression is different for ISNULL and COALESCE. ISNULL return value is always considered NOT NULLable (assuming the return value is a non-nullable one) whereas COALESCE is not. So the expressions ISNULL(NULL, 1) and COALESCE(NULL, 1) although equivalent have different NULLability values. This makes a difference if you are using these expressions in computed columns and creating key constraints or making return value of a scalar UDF deterministic so that it can be indexed.&lt;/P&gt;
&lt;P&gt;Please note that I am referring to expressions that will alwahys return a non-NULLable value here. Otherwise, you can have ISNULL or COALESCE return NULL value just fine.&lt;/P&gt;
&lt;P&gt;3. Validations for ISNULL and COALESCE is also different. For example, NULL value for ISNULL is converted to int whereas for COAELSCE you have to provide a type. Ex:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;ISNULL(NULL, NULL) -- is int&lt;/P&gt;
&lt;P&gt;COALESCE(NULL, NULL) -- Will throw an error&lt;/P&gt;
&lt;P&gt;COALESCE(CAST(NULL as int), NULL) -- it valid and returns int&lt;/P&gt;
&lt;P&gt;4. ISNULL takes only 2 parameters whereas COALESCE takes variable number of parameters&lt;/P&gt;
&lt;P&gt;5. COALESCE&amp;nbsp;is based on the ANSI&amp;nbsp;SQL standard whereas ISNULL is a proprietary TSQL function&amp;nbsp;&lt;/P&gt;
&lt;P&gt;6.&amp;nbsp; You could get different plans for queries using ISNULL &amp;amp; COALESCE if the expressions involve scalar sub-queries. This will make a performance difference and queries with COALESCE often fare worse here. See below repro script:&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;use tempdb&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;create table t1 ( i int );&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;create table t2 ( i int );&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;create table t3 ( i int );&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;set showplan_text on;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;select isnull((select i from t1 where t1.i = t2.i), (select max(i) from t3))&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;from t2;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;select coalesce((select i from t1 where t1.i = t2.i), (select max(i) from &lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;t3))&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;from t2;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;set showplan_text off;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;go&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;drop table t1, t2;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Courier New" size=2&gt;go&lt;/FONT&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8659795" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/General/default.aspx">General</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/Best+Practices/default.aspx">Best Practices</category></item><item><title>Spool operators in query plan...</title><link>http://blogs.msdn.com/sqltips/archive/2007/08/30/spool-operators-in-query-plan.aspx</link><pubDate>Thu, 30 Aug 2007 19:38:11 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4653190</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/4653190.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=4653190</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=4653190</wfw:comment><description>&lt;p&gt;I came across a question in the relationalserver.performance newsgroup where a customer was wondering about the spools seen in a recursive query execution plan. The query is shown below:&lt;/p&gt; &lt;p&gt;USE Northwind;&lt;br&gt;Go&lt;/p&gt; &lt;p&gt;WITH EmpChart AS&lt;br&gt;(&lt;br&gt;SELECT EmployeeId, ReportsTo, 1 AS treelevel&lt;br&gt;FROM Employees&lt;br&gt;WHERE (Employees.ReportsTo = 2)&lt;br&gt;UNION ALL&lt;br&gt;SELECT e.EmployeeId, e.ReportsTo, treelevel +1&lt;br&gt;FROM Employees e&lt;br&gt;JOIN EmpChart ec&lt;br&gt;ON e.ReportsTo=ec.EmployeeID&lt;br&gt;)&lt;br&gt;SELECT * FROM EmpChart;  &lt;p&gt;The plan for the above query shows an index spool and a table spool. They are one and the same. The plan is shown below: &lt;p&gt;|--Index Spool(WITH STACK)&lt;br&gt;|--Concatenation&lt;br&gt;|--Compute Scalar(DEFINE:([Expr1013]=(0)))&lt;br&gt;| |--Compute Scalar(DEFINE:([Expr1003]=(1)))&lt;br&gt;| |--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Employees].[PK_Employees]), WHERE:([Northwind].[dbo].[Employees].[ReportsTo]=(2)))&lt;br&gt;|--Assert(WHERE:(CASE WHEN [Expr1015]&amp;gt;(100) THEN (0) ELSE NULL END))&lt;br&gt;|--Nested Loops(Inner Join, OUTER REFERENCES:([Expr1015], [Recr1006], [Recr1007], [Recr1008]))&lt;br&gt;|--Compute Scalar(DEFINE:([Expr1015]=[Expr1014]+(1)))&lt;br&gt;| |--Table Spool(WITH STACK)&lt;br&gt;|--Compute Scalar(DEFINE:([Expr1009]=[Recr1008]+(1)))&lt;br&gt;|--Clustered Index Scan(OBJECT:([Northwind].[dbo].[Employees].[PK_Employees] AS [e]), WHERE:([Northwind].[dbo].[Employees].[ReportsTo] as [e].[ReportsTo]=[Recr1006])) &lt;p&gt;The index spool is also a lazy spool here meaning rows&amp;nbsp;get inserted into the spool during execution of the recursive part also. Additionally, the rows from the index spool is read using a stack-like mechanism otherwise the recursive part may visit the same rows again. Here is how to read the plan with the recursive query:  &lt;p&gt;1. Start with the anchor / top-most part  &lt;p&gt;|--Index Spool(WITH STACK)&lt;br&gt;|--Concatenation&lt;br&gt;|--Compute Scalar(DEFINE:([Expr1013]=(0)))&lt;br&gt;| |--Compute Scalar(DEFINE:([Expr1003]=(1)))&lt;br&gt;| |--Clustered Index &lt;br&gt;Scan(OBJECT:([Northwind].[dbo].[Employees].[PK_Employees]), &lt;br&gt;WHERE:([Northwind].[dbo].[Employees].[ReportsTo]=(2)))  &lt;p&gt;The anchor part of the recursive CTE first gets executed and the spool is created with index. Note the stack option also in the spool. This indicates that rows are read in a&amp;nbsp;FIFO manner.  &lt;p&gt;2. Next the recursive part of the query  &lt;p&gt;|--Nested Loops(Inner Join, OUTER &lt;br&gt;REFERENCES:([Expr1015], [Recr1006], [Recr1007], [Recr1008]))&lt;br&gt;|--Compute &lt;br&gt;Scalar(DEFINE:([Expr1015]=[Expr1014]+(1)))&lt;br&gt;| |--Table Spool(WITH STACK)&lt;br&gt;|--Compute &lt;br&gt;Scalar(DEFINE:([Expr1009]=[Recr1008]+(1)))&lt;br&gt;|--Clustered Index &lt;br&gt;Scan(OBJECT:([Northwind].[dbo].[Employees].[PK_Employees] AS [e]), &lt;br&gt;WHERE:([Northwind].[dbo].[Employees].[ReportsTo] as &lt;br&gt;[e].[ReportsTo]=[Recr1006]))  &lt;p&gt;This is the nested loop join between the spool (created in step #1 for the anchor query) and the recursive part of the query. Since this is eager spool, rows will be populated into the spool also until the recursion is completed or the maximum level is reached. The maximum level check is done using the assert operator above the nested loop join:&lt;/p&gt; &lt;p&gt;&lt;br&gt;|--Assert(WHERE:(CASE WHEN [Expr1015]&amp;gt;(100) THEN (0) ELSE &lt;br&gt;NULL END)) &lt;/p&gt; &lt;p&gt;3. Now, the way to tell which spools are related or the same is to look at the properties of the spool operator in the query plan output. The index spool has a property called NodeId which will referenced by the table spool as PrimaryNodeId property in another part of the plan.  &lt;p&gt;Lastly, SQL Server can also create a plan with an eager spool which can be seen below for the query. In case of eager spool, query execution can continue only after the eager spool has been fully created. This is different from the lazy spool.  &lt;p&gt;select count(distinct ShipVia), count(distinct ShipCountry)&lt;br&gt;from Orders as o, Customers as c&lt;br&gt;where o.CustomerID = c.CustomerID;  &lt;p&gt;1. To read, the plan we will start again from the top part which contains the eager spool population.  &lt;p&gt;| |--Table Spool&lt;br&gt;| |--Hash Match(Inner Join, &lt;br&gt;HASH:([c].[CustomerID])=([o].[CustomerID]), &lt;br&gt;RESIDUAL:([Northwind].[dbo].[Customers].[CustomerID] as &lt;br&gt;[c].[CustomerID]=[Northwind].[dbo].[Orders].[CustomerID] as &lt;br&gt;[o].[CustomerID]))&lt;br&gt;| |--Index &lt;br&gt;Scan(OBJECT:([Northwind].[dbo].[Customers].[Region] AS [c]))&lt;br&gt;| |--Clustered Index &lt;br&gt;Scan(OBJECT:([Northwind].[dbo].[Orders].[PK_Orders] AS [o]))  &lt;p&gt;Here you can see the hash join between customers and orders table that populates the eager spool table.  &lt;p&gt;2. The ShipVia distinct count is computed as follows by reading from the spool.  &lt;p&gt;|--Compute &lt;br&gt;Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1010],0)))&lt;br&gt;| |--Stream &lt;br&gt;Aggregate(DEFINE:([Expr1010]=COUNT([Northwind].[dbo].[Orders].[ShipVia] as &lt;br&gt;[o].[ShipVia])))&lt;br&gt;| |--Hash Match(Aggregate, HASH:([o].[ShipVia]), &lt;br&gt;RESIDUAL:([Northwind].[dbo].[Orders].[ShipVia] as [o].[ShipVia] = &lt;br&gt;[Northwind].[dbo].[Orders].[ShipVia] as [o].[ShipVia]))&lt;br&gt;| |--Table Spool  &lt;p&gt;3. Similarly, the ShipCountry distinct count is computed using the same spool. You can see this by looking at the NodeId and PrimaryNodeId properties of the spool operators in the query plan or showplan xml.  &lt;p&gt;|--Compute &lt;br&gt;Scalar(DEFINE:([Expr1005]=CONVERT_IMPLICIT(int,[Expr1011],0)))&lt;br&gt;|--Stream &lt;br&gt;Aggregate(DEFINE:([Expr1011]=COUNT([Northwind].[dbo].[Orders].[ShipCountry] &lt;br&gt;as [o].[ShipCountry])))&lt;br&gt;|--Hash Match(Aggregate, HASH:([o].[ShipCountry]), &lt;br&gt;RESIDUAL:([Northwind].[dbo].[Orders].[ShipCountry] as [o].[ShipCountry] = &lt;br&gt;[Northwind].[dbo].[Orders].[ShipCountry] as [o].[ShipCountry]))&lt;br&gt;|--Table Spool  &lt;p&gt;4. Finally, since COUNT() aggregate always returns one row, we just do a nested loop join between the two parts of the tree above to return a row.&lt;/p&gt; &lt;p&gt;|--Nested Loops(Inner Join)&lt;br&gt;|--Compute &lt;br&gt;Scalar(DEFINE:([Expr1004]=CONVERT_IMPLICIT(int,[Expr1010],0)))&lt;br&gt;....&lt;br&gt;|--Compute &lt;br&gt;Scalar(DEFINE:([Expr1005]=CONVERT_IMPLICIT(int,[Expr1011],0))) &lt;/p&gt; &lt;p&gt;Hope this helps you read execution plans that contain the various spool operators.&lt;/p&gt; &lt;p&gt;--&lt;/p&gt; &lt;p&gt;Umachandar Jayachandran&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4653190" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Performance+-+SQL_2F00_TSQL/default.aspx">Performance - SQL/TSQL</category></item><item><title>SQL Server 2005 SP2 Re-release and post fixes</title><link>http://blogs.msdn.com/sqltips/archive/2007/04/11/sql-server-2005-sp2-re-release-and-post-fixes.aspx</link><pubDate>Wed, 11 Apr 2007 21:21:16 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:2091488</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/2091488.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=2091488</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=2091488</wfw:comment><description>&lt;p&gt;Bob Ward from PSS has a wonderful blog article that explains the details about the re-release of SQL Server 2005 SP2 and fixes posted later. This is a must read for anyone deploying SQL Server 2005 SP2 to understand the various hotfixes, GDRs and procedures. Please visit his link for more details.&lt;/p&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/psssql/archive/2007/04/06/post-sql-server-2005-service-pack-2-sp2-fixes-explained.aspx"&gt;SQL Server 2005 SP2 Re-release and post fixes&lt;/a&gt;&lt;/p&gt; &lt;p&gt;-- Umachandar&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=2091488" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item><item><title>New MSDN Books Online search functionality</title><link>http://blogs.msdn.com/sqltips/archive/2007/03/30/new-msdn-books-online-search-functionality.aspx</link><pubDate>Fri, 30 Mar 2007 18:53:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1995359</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1995359.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1995359</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1995359</wfw:comment><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;Check out the new&amp;nbsp;Books Online search functionality online. The link below provides&amp;nbsp; a&amp;nbsp;scoped search of Books Online that returns a more precise and targeted result set. You can use it to search Books Online content quickly.  &lt;p&gt;&lt;a href="http://search.live.com/macros/sql_server_user_education/booksonline"&gt;http://search.live.com/macros/sql_server_user_education/booksonline&lt;/a&gt;  &lt;p&gt;Please direct your feedback to &lt;a href="mailto:SQLServerUE@hotmail.com"&gt;SQLServerUE@hotmail.com&lt;/a&gt;.  &lt;p&gt;-- Umachandar&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1995359" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item><item><title>SQL Server 2005 Performance Dashboard Reports</title><link>http://blogs.msdn.com/sqltips/archive/2007/03/29/sql-server-2005-performance-dashboard-reports.aspx</link><pubDate>Thu, 29 Mar 2007 19:22:43 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1990192</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1990192.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1990192</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1990192</wfw:comment><description>&lt;p&gt;&lt;/p&gt; &lt;p&gt;The SQL Server 2005 Performance Dashboard Reports are Reporting Services report files designed to be used with the Custom Reports feature introduced in the SQL Server 2005 SP2 release of SQL Server Management Studio. The reports allow a database administrator to quickly identify whether there is a current bottleneck on their system, and if a bottleneck is present, capture additional diagnostic data that may be necessary to resolve the problem. For example, if the system is experiencing waits for disk IO the dashboard allows the user to quickly see which sessions are performing the most IO, what query is running on each session and the query plan for each statement.  &lt;p&gt;Common performance problems that the dashboard reports may help to resolve include:&lt;br&gt;- CPU bottlenecks (and what queries are consuming the most CPU)&lt;br&gt;- IO bottlenecks (and what queries are performing the most IO).&lt;br&gt;- Index recommendations generated by the query optimizer (missing indexes)&lt;br&gt;- Blocking&lt;br&gt;- Latch contention  &lt;p&gt;The information captured in the reports is retrieved from SQL Server's dynamic management views. There is no additional tracing or data capture required, which means the information is always available and this is a very inexpensive means of monitoring your server.  &lt;p&gt;Reporting Services is not required to be installed to use the Performance Dashboard Reports.  &lt;p&gt;Check out these reports and experiment with them to troubleshoot your performance problems. You can find the reports at:  &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=1d3a4a0d-7e0c-4730-8204-e419218c1efc&amp;amp;DisplayLang=en"&gt;SQL Server 2005 Performance Dashboard Reports&lt;/a&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;--  &lt;p&gt;Umachandar&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1990192" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/Performance+-+Engine/default.aspx">Performance - Engine</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item><item><title>OBJECT_NAME enhancement and OBJECT_SCHEMA_NAME addition in SQL Server 2005 SP2</title><link>http://blogs.msdn.com/sqltips/archive/2007/03/23/object-name-enhancement-and-object-schema-name-addition-in-sql-server-2005-sp2.aspx</link><pubDate>Fri, 23 Mar 2007 23:24:46 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1939683</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1939683.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1939683</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1939683</wfw:comment><description>&lt;p&gt;SQL Server 2005 SP2 has an important enhancement to OBJECT_NAME metadata function and a new OBJECT_SCHEMA_NAME metadata function. I will first describe the old functionality to give some context and demonstrate how the new features help a lot.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;Please note that the examples uses DMVs that looks at metadata in each database or plan cache&amp;nbsp;so performance of the queries depends on your environment, number of objects in the database, auto open/auto close setting of database, size of buffer pool or plan cache&amp;nbsp;etc. So exercise caution if you run the query on a production database and it might be prudent just to restrict it to a specific database to see the results.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;The OBJECT_NAME function is typically used to get the name of an object by specifying the object identifier (object_id value). For example, the query below returns the usage stats of indexes in the AdventureWorks database:&lt;/p&gt; &lt;p&gt;select OBJECT_NAME(i.object_id) as object_name, *&lt;br&gt;from sys.dm_db_index_usage_stats as i&lt;br&gt;where i.database_id = db_id('AdventureWorks'); &lt;/p&gt; &lt;p&gt;Now, the above query will return the correct object name only if the query was run in the AdventureWorks database. This is because the metadata function OBJECT_NAME&amp;nbsp;is database specific and uses information from the catalog tables in the current database. If you run the query in a different database (say master) then the names will either be wrong (because object_id may match a different object in master database) or NULL. So in order to get the correct object name, the query has to be executed in the context of the database you are interested (AdventureWorks in our example).&lt;/p&gt; &lt;p&gt;This DMV also returns information from multiple databases on the server. Let us now consider a scenario where you want to write a single query that returns say the top 5 entries from each database based on the number of user seeks that were performed on the index. The query will look like below:&lt;/p&gt; &lt;p&gt;select *&lt;br&gt;from (&lt;br&gt;&amp;nbsp;select *, DENSE_RANK() OVER(PARTITION by database_id ORDER BY user_seeks DESC) as rnk&lt;br&gt;&amp;nbsp;from sys.dm_db_index_usage_stats&lt;br&gt;) as i&lt;br&gt;where i.rnk &amp;lt;= 5;&lt;/p&gt; &lt;p&gt;To modify the query to return the user friendly object names instead of the identifiers, you will have to use dynamic SQL in older versions of SQL Server. This is because the OBJECT_NAME function always worked within the context of the current database. SQL Server 2005 SP2 removes this restriction and we now have an additional optional parameter that specifies the database id. This allows us to write a single query that can retrieve the OBJECT_NAME given the object identifier and database identifier of object in any database in a server. The modified query that lists the entries along with the object names is shown below:&lt;/p&gt; &lt;p&gt;select OBJECT_NAME(i.object_id, i.database_id) as objname, *&lt;br&gt;from (&lt;br&gt;&amp;nbsp;select *, DENSE_RANK() OVER(PARTITION by database_id ORDER BY user_seeks DESC) as rnk&lt;br&gt;&amp;nbsp;from sys.dm_db_index_usage_stats&lt;br&gt;) as i&lt;br&gt;where i.rnk &amp;lt;= 5;&lt;/p&gt; &lt;p&gt;Can you see how simple it is now to write queries that involve looking at object metadata in multiple databases? The enhancement to OBJECT_NAME now allows you to write complex queries that look at metadata in different databases without using dynamic SQL.&lt;/p&gt; &lt;p&gt;Lastly to round off the post, SQL Server 2005 has user schema separation and supports the ANSI SQL model of schemas. So it is always better to return object names along with their schema names. The OBJECT_SCHEMA_NAME metadata function can be used to return the schema name of a schema-scoped object like table or view by specifying the object identifier and optionally database identifier. The modified query below shows how to list the schema name also:&lt;/p&gt; &lt;p&gt;select OBJECT_SCHEMA_NAME(i.object_id, i.database_id) as schname&lt;br&gt;, OBJECT_NAME(i.object_id, i.database_id) as objname&lt;br&gt;, *&lt;br&gt;from (&lt;br&gt;&amp;nbsp;select *, DENSE_RANK() OVER(PARTITION by database_id ORDER BY user_seeks DESC) as rnk&lt;br&gt;&amp;nbsp;from sys.dm_db_index_usage_stats&lt;br&gt;) as i&lt;br&gt;where i.rnk &amp;lt;= 5;&lt;/p&gt; &lt;p&gt;The final query that shows the full object names along with the database in quoted format is shown below. The query lists the top 5 indexes in each database that had the most number of user_seeks performed.&lt;/p&gt; &lt;p&gt;select QUOTENAME(DB_NAME(i.database_id), '"')&lt;br&gt;+ N'.'&lt;br&gt;+ QUOTENAME(OBJECT_SCHEMA_NAME(i.object_id, i.database_id), '"')&lt;br&gt;+ N'.'&lt;br&gt;+ QUOTENAME(OBJECT_NAME(i.object_id, i.database_id), '"') as full_obj_name, *&lt;br&gt;from (&lt;br&gt;&amp;nbsp;select *, DENSE_RANK() OVER(PARTITION by database_id ORDER BY user_seeks DESC) as rnk&lt;br&gt;&amp;nbsp;from sys.dm_db_index_usage_stats&lt;br&gt;) as i&lt;br&gt;where i.rnk &amp;lt;= 5&lt;br&gt;order by i.database_id, i.rnk;&lt;/p&gt; &lt;p&gt;Below are some more examples on how to use the new functions.&lt;/p&gt; &lt;p&gt;-- Returns top 5 fragmented indexes in each database:&lt;/p&gt; &lt;p&gt;select QUOTENAME(DB_NAME(i.database_id), '"')&lt;br&gt;+ N'.'&lt;br&gt;+ QUOTENAME(OBJECT_SCHEMA_NAME(i.object_id, i.database_id), '"')&lt;br&gt;+ N'.'&lt;br&gt;+ QUOTENAME(OBJECT_NAME(i.object_id, i.database_id), '"') as full_obj_name&lt;br&gt;, *&lt;br&gt;from (&lt;br&gt;&amp;nbsp;select *, DENSE_RANK() OVER(PARTITION by database_id ORDER BY avg_fragmentation_in_percent DESC) as rnk&lt;br&gt;&amp;nbsp;from sys.dm_db_index_physical_stats(default, default, default, default, default)&lt;br&gt;&amp;nbsp;where avg_fragmentation_in_percent &amp;gt; 0&lt;br&gt;) as i&lt;br&gt;where i.rnk &amp;lt;= 5&lt;br&gt;order by i.database_id, i.rnk;&lt;/p&gt; &lt;p&gt;-- Returns top 10 statements (in sql modules) per database that took the most elapsed time:&lt;/p&gt; &lt;p&gt;select coalesce(QUOTENAME(DB_NAME(t.dbid), '"'), '') /* NULL means resource db*/&lt;br&gt;+ N'.'&lt;br&gt;+ QUOTENAME(OBJECT_SCHEMA_NAME(t.objectid, t.dbid), '"')&lt;br&gt;+ N'.'&lt;br&gt;+ QUOTENAME(OBJECT_NAME(t.objectid, t.dbid), '"') as full_obj_name&lt;br&gt;, SUBSTRING(t.text, (t.statement_start_offset/2)+1, &lt;br&gt;((CASE t.statement_end_offset&lt;br&gt;WHEN -1 THEN DATALENGTH(t.text)&lt;br&gt;ELSE t.statement_end_offset&lt;br&gt;END - t.statement_start_offset)/2) + 1) AS statement_text&lt;br&gt;, t.*&lt;br&gt;from (&lt;br&gt;&amp;nbsp;select *, DENSE_RANK() OVER(PARTITION BY t.dbid ORDER BY qs.total_elapsed_time) as rnk&lt;br&gt;&amp;nbsp;from sys.dm_exec_query_stats as qs&lt;br&gt;&amp;nbsp;cross apply sys.dm_exec_sql_text(qs.sql_handle) as t&lt;br&gt;&amp;nbsp;where t.objectid is not null&lt;br&gt;) as t&lt;br&gt;where t.rnk &amp;lt;= 10&lt;br&gt;order by t.dbid, t.rnk;&lt;/p&gt; &lt;p&gt;Hope you find these enhancements in SQL Server 2005 SP2 useful and productive. Feel free to comment if you need more examples or more use cases.&lt;/p&gt; &lt;p&gt;--&lt;/p&gt; &lt;p&gt;Umachandar&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1939683" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/SQL+Server+2005/default.aspx">SQL Server 2005</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/Dynamic+Management+View/default.aspx">Dynamic Management View</category></item><item><title>SQL Server Performance Engineering Team Blog</title><link>http://blogs.msdn.com/sqltips/archive/2007/02/27/sql-server-performance-engineering-team-blog.aspx</link><pubDate>Wed, 28 Feb 2007 00:16:15 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1771400</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1771400.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1771400</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1771400</wfw:comment><description>&lt;p&gt;I would like to announce the blog from my team - SQL Server Performance Engineering. Feel free to visit our blog at &lt;a href="http://blogs.msdn.com/sqlperf"&gt;http://blogs.msdn.com/sqlperf&lt;/a&gt; for your performance related questions and needs. Use the email link in the home page to share your feedback on performance and topics of interest.&lt;/p&gt; &lt;p&gt;--&lt;/p&gt; &lt;p&gt;Umachandar Jayachandran&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1771400" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category><category domain="http://blogs.msdn.com/sqltips/archive/tags/Performance+Troubleshooting/default.aspx">Performance Troubleshooting</category></item><item><title>SQL Server 2005 SP2 has been released...</title><link>http://blogs.msdn.com/sqltips/archive/2007/02/19/sql-server-2005-sp2-has-been-released.aspx</link><pubDate>Mon, 19 Feb 2007 22:24:28 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1719170</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1719170.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1719170</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1719170</wfw:comment><description>&lt;p&gt;SQL Server 2005 Service Pack 2 has been released. You can find more information from the &lt;a href="http://www.microsoft.com/sql/sp2.mspx"&gt;service pack 2 page&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;This service pack extends the functionality of SQL Server in many ways. The &lt;a href="http://download.microsoft.com/download/2/b/5/2b5e5d37-9b17-423d-bc8f-b11ecd4195b4/WhatsNewSQL2005SP2.htm"&gt;What's New&lt;/a&gt; document highlights the major changes in the Database Engine, Analysis Services, Integration Services and others. The service pack also has performance and manageability enhancements that will be of interest to lot of developers and&amp;nbsp;database administrators.&lt;/p&gt; &lt;p&gt;Please download the latest service pack and test your database applications with it to see the benefits.&lt;/p&gt; &lt;p&gt;--&lt;/p&gt; &lt;p&gt;Umachandar Jayachandran&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1719170" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item><item><title>Database Applications Profile Survey in http://connect.microsoft.com/sqlserver</title><link>http://blogs.msdn.com/sqltips/archive/2007/02/04/database-applications-profile-survey-in-http-connect-microsoft-com-sqlserver.aspx</link><pubDate>Sun, 04 Feb 2007 19:16:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1598846</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1598846.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1598846</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1598846</wfw:comment><description>&lt;DIV&gt;My team (Data &amp;amp; SQL Storage Performance Team) is conducting a survey on &lt;A href="http://connect.microsoft.com/sqlserver"&gt;http://connect.microsoft.com/sqlserver&lt;/A&gt; to better understand SQL Server workloads. The connect link below will take you directly to the survey:&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;&lt;A href="https://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=2226"&gt;https://connect.microsoft.com/SQLServer/Survey/Survey.aspx?SurveyID=2226&lt;/A&gt;&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;Please consider providing your workload characteristics and hardware configuration to help us better understand the workloads that run on SQL Server. This is a detailed survey so we are hoping to determine more than what SQM or SQLH2 or other mechanisms offer today. Thanks for participating.&lt;/DIV&gt;
&lt;DIV&gt;&amp;nbsp;&lt;/DIV&gt;
&lt;DIV&gt;--&lt;BR&gt;Umachandar Jayachandran&lt;/DIV&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1598846" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item><item><title>SQL Server 2005 SP2 December CTP is available for download</title><link>http://blogs.msdn.com/sqltips/archive/2006/12/19/sql-server-2005-sp2-december-ctp-is-available-for-download.aspx</link><pubDate>Wed, 20 Dec 2006 01:37:25 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1327757</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1327757.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1327757</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1327757</wfw:comment><description>&lt;p&gt;SQL Server 2005 Service Pack 2 December CTP is available now for download. You can download it from:&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=d2da6579-d49c-4b25-8f8a-79d14145500d&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=d2da6579-d49c-4b25-8f8a-79d14145500d&amp;amp;DisplayLang=en&lt;/a&gt;&lt;/p&gt; &lt;p&gt;Note that the December CTP has been published to the same location as the November CTP so if you come from the &lt;a href="http://www.microsoft.com/sql/ctp.mspx"&gt;SQL Server 2005 CTP Home Page&lt;/a&gt; and get to December CTP don't be confused.&lt;/p&gt; &lt;p&gt;Please take this opportunity to test your applications with the new service pack and provide feedback on the new features or bugs that you encounter.&lt;/p&gt; &lt;p&gt;Next week, I will be posting series of articles that highlight some of the new features in SQL Server 2005 SP2 release.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;Thanks&lt;/p&gt; &lt;p&gt;Umachandar&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1327757" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item><item><title>Download SQL Server 2005 SP2 CTP</title><link>http://blogs.msdn.com/sqltips/archive/2006/11/08/download-sql-server-2005-sp2-ctp.aspx</link><pubDate>Wed, 08 Nov 2006 21:04:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1039931</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/1039931.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=1039931</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=1039931</wfw:comment><description>&lt;P&gt;SQL Server 2005 Service Pack 2 (SP2) CTP has been released. You can provide feedback on the CTP release via &lt;A href="http://connect.microsoft.com/sqlserver" mce_href="http://connect.microsoft.com/sqlserver"&gt;http://connect.microsoft.com/sqlserver&lt;/A&gt;. The link for the various downloads is:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.microsoft.com/sql/ctp.mspx" mce_href="http://www.microsoft.com/sql/ctp.mspx"&gt;http://www.microsoft.com/sql/ctp.mspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;SQL Server 2005 SP2 CTP contains some new features in the database engine (vardecimal data types, object_name function enhancement, logon triggers, Common Criteria Compliance, sys.dm_exec_text_query_plan DMV, plan cache improvements among others). The list of bugs fixed in the release can be found at:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b921896"&gt;http://support.microsoft.com/default.aspx?scid=kb%3ben-us%3b921896&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Please let me know if you have questions regarding the new features. For any issues with setup or bugs in the CTP release please use the connect feedback mechanism or post in the SQL Server MSDN forums.&lt;/P&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1039931" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item><item><title>Disabled anonymous comments...</title><link>http://blogs.msdn.com/sqltips/archive/2006/11/04/disabled-anonymous-comments.aspx</link><pubDate>Sat, 04 Nov 2006 18:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:960472</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/960472.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=960472</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=960472</wfw:comment><description>I have disabled anonymous comments due to the inordinate number of spam comments. And since I had email notifications for comments it was pretty bad. Hopefully this is fine.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=960472" width="1" height="1"&gt;</description></item><item><title>Top 5 relational data warehouse performance improvements you would like to see in next version of SQL Server</title><link>http://blogs.msdn.com/sqltips/archive/2006/09/20/TOP-5-DW-PERF-IMP-NEXT-SQL.aspx</link><pubDate>Wed, 20 Sep 2006 23:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:763985</guid><dc:creator>SQL Server Engine Team</dc:creator><slash:comments>13</slash:comments><comments>http://blogs.msdn.com/sqltips/comments/763985.aspx</comments><wfw:commentRss>http://blogs.msdn.com/sqltips/commentrss.aspx?PostID=763985</wfw:commentRss><wfw:comment>http://blogs.msdn.com/sqltips/rsscomments.aspx?PostID=763985</wfw:comment><description>&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Hello Everyone, 
&lt;P&gt;We are currently looking at top performance issues for various workloads and how we can improve those in next version of SQL Server. We are collecting feedback from various customer sources. I would like to extend an invitation to readers here for feedback on top 5&amp;nbsp;relational data warehouse&amp;nbsp;performance improvements you would like to see in SQL Server. 
&lt;P&gt;Please bear the following in mind: 
&lt;P&gt;1. Briefly describe the relational data warehouse workload or scenario or application. More details you can provide for us the better. 
&lt;P&gt;2. Prioritize the list of performance improvements in order of importance or impact to your workload. You can also just highlight the top 5 performance problems with running your relational data warehouse workload in SQL Server 
&lt;P&gt;3. Feel free to suggest any feature(s) that will help in improving the performance of the particular&amp;nbsp;data warehouse&amp;nbsp;workload or scenario 
&lt;P&gt;I will consolidate the feedback and post summary version of it as a link in this post. 
&lt;P&gt;Thanks&lt;BR&gt;Umachandar &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=763985" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/sqltips/archive/tags/Announcements/default.aspx">Announcements</category></item></channel></rss>