<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://sqlblog.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Search results matching tags 'denali', 'SQL Server 2011', and 'CTP1'</title><link>http://sqlblog.com/search/SearchResults.aspx?o=DateDescending&amp;tag=denali,SQL+Server+2011,CTP1&amp;orTags=0</link><description>Search results matching tags 'denali', 'SQL Server 2011', and 'CTP1'</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP2 (Build: 61129.1)</generator><item><title>SQL Server v.Next (&amp;quot;Denali&amp;quot;) : How a columnstore index is not like a normal index</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2011/02/28/sql-server-v-next-denali-how-a-columnstore-index-is-not-like-a-normal-index.aspx</link><pubDate>Mon, 28 Feb 2011 17:34:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:33810</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;At the end of my Denali presentation at &lt;a href="http://sqlsaturday.com/65/eventhome.aspx" title="http://sqlsaturday.com/65/eventhome.aspx" target="_blank"&gt;SQL Saturday #65&lt;/a&gt; in Vancouver, a member of the audience asked, "What makes a columnstore index different from a regular nonclustered index?" At the end of a busy day, I was at a loss for an answer, and I'll explain why.&lt;/p&gt;&lt;p&gt;First, I'll briefly explain the basic, core, high-level functionality of a columnstore index (you can read a lot more details in &lt;a href="http://bit.ly/AB_Denali_ColumnWP" title="http://bit.ly/AB_Denali_ColumnWP" target="_blank"&gt;this white paper&lt;/a&gt;). Basically, instead of storing index data together on a page, it divvies up the data from each column into its own set of pages. If you are after the data from only one column, this doesn't provide a great advantage over a traditional index, since you're not going to be able to store that many more rows on a page.&lt;br&gt;&lt;/p&gt;&lt;p&gt;The reason I was having a hard time articulating the benefit is because I was thinking about a simple non-clustered index with one column, and comparing it to a columnstore index with only one column defined. The benefit of the columnstore index is that you can basically declare it against most or all of the columns in a table, effectively similar to creating an index on each column - and this is where column store indexes provide the largest benefit. The differences between a column store index and a handful of indexes for each column are (1) size due to the structure of the index and the fact that compression will likely work much better when you can fit more like values on a page, and (2) you only pay for the index maintenance on a columnstore index once, because of what I'll describe next.&lt;br&gt;&lt;/p&gt;&lt;p&gt;The columnstore index has limitations that definitely make you feel like the grass is greener on the other side. Most importantly, in Denali, due to the cost of maintenance, a columnstore index will be read only... essentially, you will need to rebuild the index when data changes. Some other limitations: only one columnstore index per table, the index must be partition-aligned, can't be filtered, and the base object must be a table (so, no indexed views).&lt;br&gt;&lt;/p&gt;&lt;p&gt;This feature is definitely geared to data warehouse scenarios, or where you are free to rebuild indexes nightly or on some other interval. I can't give you a good idea about the cost of maintaining this index manually compared to multiple traditional indexes, since the feature did not make the cut for the &lt;a href="http://bit.ly/AB_Denali_Download" title="http://bit.ly/AB_Denali_Download" target="_blank"&gt;publicly available CTP1&lt;/a&gt;. But I hope to publish some blog posts with real numbers on both the read and write sides when the next public CTP is made available. I am fairly certain I will be able to demonstrate cases where this type of index will drastically increase read performance (without losing substantial write performance), provided that you are in a scenario where you can update the data on an infrequent schedule, such as nightly.&lt;/p&gt;&lt;p&gt;If you want some detailed background on this technology, please check out Dr. David DeWitt's &lt;a href="http://bit.ly/eYzuYD" title="http://bit.ly/eYzuYD" target="_blank"&gt;PASS Summit 2009 keynote slide deck&lt;/a&gt;. And if you’re a PASS member, you can access the video at &lt;a href="http://www.sqlpass.org/LearningCenter/SessionRecordings/Summit2009/Day3KeynoteDavidDeWitt.aspx" title="http://www.sqlpass.org/LearningCenter/SessionRecordings/Summit2009/Day3KeynoteDavidDeWitt.aspx" target="_blank"&gt;sqlpass.org&lt;/a&gt; (login required). &lt;br&gt;&lt;/p&gt;&lt;p&gt;[I am currently at the MVP Summit, and I just want to clarify (in case anyone was wondering), none of the material I discuss above is in violation of NDA.] &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item><item><title>SQL Server v.Next (Denali) : Exploring THROW</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2010/11/22/sql-server-v-next-denali-using-throw-instead-of-raiserror.aspx</link><pubDate>Mon, 22 Nov 2010 17:20:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30385</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;Sadly, THROW is not mentioned on the &lt;a href="http://msdn.microsoft.com/en-us/library/cc645577%28v=SQL.110%29.aspx" title="http://msdn.microsoft.com/en-us/library/cc645577(v=SQL.110).aspx" target="_blank"&gt;Programmability Enhancements (Database Engine) topic&lt;/a&gt; of Denali's "What's New" section.&amp;nbsp; So, unless you were at PASS or have been reading the various blogs from the keynotes and other Denali sessions, the presence of this keyword may be news to you.&amp;nbsp; I wanted to touch briefly on what THROW can do and, more importantly, what it can't do - before you start thinking about abandoning all usage of RAISERROR (or "RAISE ROAR" as Tobias calls it).&lt;br&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;&lt;font size="4"&gt;How THROW and RAISERROR differ&lt;/font&gt;&lt;/p&gt;

&lt;p&gt;THROW outside of a CATCH block acts similar to RAISERROR, with a few notable exceptions:&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The message_id parameter does not need to be defined in sys.messages:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;THROW&lt;/font&gt; 66666, &lt;font color="red"&gt;'Hi'&lt;/font&gt;, 1;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 66666, Level 16, State 16, Line 1&lt;br&gt;Hi&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

With RAISERROR, you can use a string for the first parameter, but if you use a number that is not represented in sys.messages:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;RAISERROR&lt;/font&gt;(54321, 16, 1);&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 18054, Level 16, State 1, Line 1
&lt;br&gt;Error 54321, severity 16, state 1 was raised, but no message with that error number was found in sys.messages. If error is larger than 50000, make sure the user-defined message is added using sp_addmessage.&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Why should you care?  Well, if you have applications that rely on certain error message numbers coming out of SQL Server (and ignore the text of the error message), converting to THROW will allow you to migrate to new servers without having to set up all of the messages in sys.messages.
&lt;br&gt;&lt;br&gt;&amp;nbsp;&lt;br&gt;&lt;/li&gt;


&lt;li&gt;The message_id parameter must be an INT (not a BIGINT) &amp;gt;= 50000.&amp;nbsp; If you try to THROW a system message, you will get an error message instead of the error you wanted:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;RAISERROR&lt;/font&gt;(14088, 16, 1, &lt;font color="red"&gt;N'foo'&lt;/font&gt;);&lt;br&gt;&lt;font color="blue"&gt;GO&lt;br&gt;THROW&lt;/font&gt; 14088, &lt;font color="red"&gt;N'foo'&lt;/font&gt;, 1;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
 
Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 14088, Level 16, State 1, Line 1&lt;br&gt;The table 'foo' must have a primary key to be published using the transaction-based method.&lt;br&gt;Msg 35100, Level 16, State 10, Line 1&lt;br&gt;Error number 14088 in the THROW statement is outside the valid range. Specify an error number in the valid range of 50000 to 2147483647.&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;br&gt;&amp;nbsp;
&lt;/li&gt;


&lt;li&gt;There is no token substitution within the command itself, so printf formatting is ignored.&amp;nbsp; Let's say we've added this message to sys.messages:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;EXEC&lt;/font&gt; &lt;font color="#aa0000"&gt;sys&lt;/font&gt;.&lt;font color="#aa0000"&gt;sp_addmessage&lt;/font&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @msgnum   = 66667,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @severity = 16,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @msgtext  = &lt;font color="red"&gt;N'There is already a %s named %s.'&lt;/font&gt;;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

With RAISERROR we can simply say:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;RAISERROR&lt;/font&gt;(66667, 16, 1, &lt;font color="red"&gt;N'foo'&lt;/font&gt;, &lt;font color="red"&gt;N'bar'&lt;/font&gt;);&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 66667, Level 16, State 1, Line 1&lt;br&gt;There is already a foo named bar.
&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

However, THROW does not accept any parameters for substitution.&amp;nbsp; If you try:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;THROW&lt;/font&gt; 66667, &lt;font color="red"&gt;N'There is already a %s named %s.'&lt;/font&gt;, 1, &lt;font color="red"&gt;N'foo'&lt;/font&gt;, &lt;font color="red"&gt;N'bar'&lt;/font&gt;;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 102, Level 15, State 1, Line 1&lt;br&gt;Incorrect syntax near ','.
&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Since repeating the text defeats the purpose of saving the error message in sys.messages in the first place, you can get around this using FORMATMESSAGE():

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;DECLARE&lt;/font&gt; @msg &lt;font color="blue"&gt;NVARCHAR&lt;/font&gt;(2048) = &lt;font color="magenta"&gt;FORMATMESSAGE&lt;/font&gt;(66667, &lt;font color="red"&gt;N'foo'&lt;/font&gt;, &lt;font color="red"&gt;N'bar'&lt;/font&gt;);&lt;br&gt;&lt;font color="blue"&gt;THROW&lt;/font&gt; 66667, @msg, 1;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 66667, Level 16, State 1, Line 2&lt;br&gt;There is already a foo named bar.&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Cumbersome, but it works.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;The severity level for THROW is always 16 (unless it is a re-throw inside CATCH), and there is no way to force the breaking of the connection like we can with RAISERROR.&amp;nbsp; Assume we have added this error message:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;EXEC&lt;/font&gt; &lt;font color="#aa0000"&gt;sys&lt;/font&gt;.&lt;font color="#aa0000"&gt;sp_addmessage&lt;/font&gt; &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @msgnum&amp;nbsp;&amp;nbsp; = 66668,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @severity = 24,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; @msgtext&amp;nbsp; = &lt;font color="red"&gt;N'This is really bad.'&lt;/font&gt;;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

If we use RAISERROR, we can obey the severity level by re-specifying and using WITH LOG:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;RAISERROR&lt;/font&gt;(66668, 24, 1) &lt;font color="blue"&gt;WITH LOG&lt;/font&gt;;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 2745, Level 16, State 2, Line 1&lt;br&gt;Process ID 55 has raised user error 66668, severity 24. SQL Server is terminating this process.&lt;br&gt;Msg 2745, Level 16, State 2, Line 1&lt;br&gt;Process ID 55 has raised user error 66668, severity 24. SQL Server is terminating this process.&lt;br&gt;Msg 66668, Level 24, State 1, Line 1&lt;br&gt;This is really bad.&lt;br&gt;Msg 0, Level 20, State 0, Line 0&lt;br&gt;A severe error occurred on the current command.&amp;nbsp; The results, if any, should be discarded.&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

There is no way to do that with THROW:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;THROW&lt;/font&gt; 66668, &lt;font color="red"&gt;N'This is really bad.'&lt;/font&gt;, 1;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

Result:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="red"&gt;Msg 66668, &lt;b&gt;Level 16&lt;/b&gt;, State 1, Line 1&lt;br&gt;This is really bad.&lt;/font&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;br&gt;&amp;nbsp;
&lt;/li&gt;

&lt;li&gt;There is no THROW equivalent to WITH NOWAIT for immediate buffer output.&amp;nbsp; With RAISERROR we can do this:

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;RAISERROR&lt;/font&gt;(&lt;font color="red"&gt;N'Printing status...'&lt;/font&gt;, 0, 1) &lt;font color="blue"&gt;WITH NOWAIT&lt;/font&gt;;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

This can be quite useful in place of PRINT when monitoring a query with multiple steps, as it prevents waiting for the buffer to fill up before seeing real-time messages in the results pane of Management Studio.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Unlike RAISERROR, THROW honors XACT_ABORT (see &lt;a href="http://www.nielsberglund.com/sql/more-t-sql-error-functionality-in-denali-sql-11/" title="http://www.nielsberglund.com/sql/more-t-sql-error-functionality-in-denali-sql-11/" target="_blank"&gt;Neils Berglund's post&lt;/a&gt; for more information).&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;There is no way to use WITH LOG in combination with THROW, or to "THROW" a non-severe error (e.g. one that prints in black in Management Studio instead of red, like the above example with severity level 0).&lt;br&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;font size="4"&gt;THROW inside CATCH&lt;br&gt;&lt;/font&gt;
&lt;p&gt;THROW inside a CATCH block acts like RETHROW - it will re-raise the exception that transferred to the CATCH block in the first place.&amp;nbsp; An example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;BEGIN TRY&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RAISERROR&lt;/font&gt;(&lt;font color="red"&gt;N'Hi from try.'&lt;/font&gt;, 16, 1);&lt;br&gt;&lt;font color="blue"&gt;END TRY&lt;br&gt;BEGIN CATCH&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PRINT&lt;/font&gt; &lt;font color="red"&gt;N'Hi from inside CATCH.'&lt;/font&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;THROW&lt;/font&gt;;&lt;br&gt;&lt;font color="blue"&gt;END CATCH&lt;/font&gt;
&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

This will allow you to perform other tasks, such as rollbacks, notifications, etc. before eventually throwing the same errors back to the caller - without having to understand and re-code all of the possible outcomes from within the TRY block.&amp;nbsp; Note that THROW inside CATCH can re-throw multiple errors, not just the most recent one (which is all you have access to from ERROR_MESSAGE() and its cousins).&amp;nbsp; And this is the only place where THROW by itself is valid syntax.&lt;br&gt;

&lt;p&gt;I am not going to pretend to be an expert in error handling, so I will leave it up to Erland to give you a great primer:&lt;/p&gt;

&lt;blockquote&gt;&lt;a href="http://www.sommarskog.se/error_handling_2005.html" title="http://www.sommarskog.se/error_handling_2005.html" target="_blank"&gt;Error Handling in SQL 2005 and Later&lt;/a&gt;&lt;br&gt;&lt;/blockquote&gt;

&lt;p&gt;&lt;br&gt;&lt;font size="4"&gt;A few more items to consider&lt;/font&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;Note that THROW() is one more case where the preceding statement needs to end with a proper statement terminator.&amp;nbsp; So just as a gentle reminder, &lt;a href="http://sqlblog.com/blogs/aaron_bertrand/archive/2009/09/03/ladies-and-gentlemen-start-your-semi-colons.aspx" title="http://sqlblog.com/blogs/aaron_bertrand/archive/2009/09/03/ladies-and-gentlemen-start-your-semi-colons.aspx" target="_blank"&gt;start using those semi-colons&lt;/a&gt;! &lt;/p&gt;

&lt;p&gt;Also note that there is still a very noticeable omission in the TRY/CATCH error handling model: FINALLY. &lt;br&gt;&lt;/p&gt;

&lt;p&gt;&lt;br&gt;&lt;font size="4"&gt;And finally (no pun intended), some housekeeping&lt;/font&gt; &lt;br&gt;&lt;/p&gt;

&lt;p&gt;The current version of Denali's Books Online indicates that RAISERROR is deprecated.&amp;nbsp; From the RAISERROR (Transact-SQL) topic (&lt;a href="http://msdn.microsoft.com/en-us/library/ms178592%28SQL.110%29.aspx" title="http://msdn.microsoft.com/en-us/library/ms178592(SQL.110).aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/library/ms178592(SQL.110).aspx&lt;/a&gt;):&amp;nbsp; &lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;div style="padding:10px 20px;font-size:12px;font-family:georgia,times new roman;-moz-background-inline-policy:continuous;"&gt;&lt;i&gt;
This feature will be removed in a future version of Microsoft SQL 
Server. Avoid using this feature in new development work, and plan to 
modify applications that currently use this feature. New applications 
should use &lt;a href="http://msdn.microsoft.com/en-us/library/ee677615%28v=SQL.110%29.aspx"&gt;THROW&lt;/a&gt; instead.&lt;/i&gt;&lt;/div&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;Books Online is currently incorrect, and should be updated soon.&amp;nbsp; There is currently no publicized plan to remove RAISERROR; what the topic should state is that only the old-style RAISERROR is deprecated, e.g.:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;RAISERROR&lt;/font&gt; 54321 &lt;font color="red"&gt;N'This is an old-style RAISERROR.'&lt;/font&gt;;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;

&lt;p&gt;Of course you can still use this syntax today, but it has been on the deprecation path for some time.  If you run the above code on Denali, SQL Server 2008 R2 or even SQL Server 2008, you will see this performance counter increase:&lt;/p&gt;

&lt;blockquote&gt;
&lt;table bgcolor="#eeeeee" cellpadding="0" cellspacing="0"&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;pre style="padding:10px 20px;font-size:12px;font-family:consolas,lucida console,courier new,courier;-moz-background-inline-policy:continuous;"&gt;&lt;font color="blue"&gt;SELECT&lt;/font&gt; [object_name], instance_name, cntr_value&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;FROM&lt;/font&gt; &lt;font color="green"&gt;sys&lt;/font&gt;.&lt;font color="green"&gt;dm_os_performance_counters&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="blue"&gt;WHERE&lt;/font&gt; [object_name] &lt;font color="grey"&gt;LIKE&lt;/font&gt; &lt;font color="red"&gt;N'%:Deprecated Features%'&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="grey"&gt;AND&lt;/font&gt; instance_name = &lt;font color="red"&gt;N'Oldstyle RAISERROR'&lt;/font&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="grey"&gt;AND&lt;/font&gt; cntr_value &amp;gt; 0;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/blockquote&gt;
&lt;br&gt;&amp;nbsp;
</description></item><item><title>SQL Server v.Next (Denali) : Books Online</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2010/11/13/sql-server-v-next-denali-books-online.aspx</link><pubDate>Sun, 14 Nov 2010 03:17:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30532</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;There are posts elsewhere that go through the whole rigamarole (for example, &lt;a href="http://livingwithgills.com/SQLNoob/post/How-to-download-and-install-Denali-CTP1-BOL.aspx" title="http://livingwithgills.com/SQLNoob/post/How-to-download-and-install-Denali-CTP1-BOL.aspx" target="_blank"&gt;this post from Don Gill&lt;/a&gt;, SQL Server's Group Content Publishing Manager).&amp;nbsp; I just wanted to highlight the key bullet points:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;if you want to use Books Online locally, you will need to:&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;ol&gt;
&lt;li&gt;install Books Online from Denali setup. Note that Management Studio is now a requirement, so select both if you haven't already.&amp;nbsp; See below for a potential bug here if you've installed Denali but initially did *not* choose Books Online.&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;if you performed 1. before Thursday afternoon (or weren't connected to the Internet during installation), you'll need to go to the Manage Help Settings option under Start / All Programs / Microsoft SQL Server Denali CTP1 / Help &amp;amp; Community, and choose Update under Check for Updates Online.&amp;nbsp; There should be about 10 items (~300MB) to download and/or install... let them do their thing.&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;Now launching Books Online from the Start Menu option will work correctly.&amp;nbsp; If you get a 404 with the local URL, launch the Manage Help Settings app again, and choose "Install Content from Online." There should be 169 books available; scroll down to SQL Server and click Add.&amp;nbsp; If Add is not available and Local is displayed, but you are still getting a 404 for the content, &lt;a href="http://connect.microsoft.com/sql" title="http://connect.microsoft.com/sql" target="_blank"&gt;file a bug on Connect&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;li&gt;if you want to use Books Online remotely, bookmark this URL:&lt;br&gt;
&lt;blockquote&gt;&lt;a href="http://tinyurl.com/Denali-CTP1-BOL" title="http://tinyurl.com/Denali-CTP1-BOL" target="_blank"&gt;http://tinyurl.com/Denali-CTP1-BOL&lt;br&gt;&lt;/a&gt;&lt;/blockquote&gt;
Note that you can still choose whether to use local or online help (see the following dialog, also available from the Manage Help Settings tool referenced above):&lt;br&gt;&lt;br&gt;&lt;img src="http://sqlblog.com/files/folders/30531/download.aspx" width="571" height="388"&gt;&lt;br&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;&lt;p&gt;As a side note, keep in mind that "local" now really means web-based (but not Internet-based). When you launch Books Online and your preference is set to local, you will go to a URL on localhost (127.0.0.1) on an arbitrary port number (kind of like how the development web server in Visual Studio works).&amp;nbsp; Don't worry, you don't need to install IIS or the web server role in order for this feature to work.&lt;/p&gt;&lt;/blockquote&gt;

&lt;p&gt;If Books Online is still not working for you, I'd love to hear about it, and hope I can help you resolve the issue!&lt;/p&gt;

&lt;p&gt;&lt;b&gt;EDIT&lt;/b&gt;: two bugs you should be aware of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;a href="http://connect.microsoft.com/SQLServer/feedback/details/622180/sql-server-denali-installing-bol-to-additional-nodes" title="http://connect.microsoft.com/SQLServer/feedback/details/622180/sql-server-denali-installing-bol-to-additional-nodes" target="_blank"&gt;Connect #622180 : SQL Server Denali - installing BOL to additional nodes &lt;/a&gt;&lt;br&gt;&lt;br&gt;The moral here: don't install SQL Server Books Online on a cluster that isn't going to stay the way it is. BOL doesn't currently have the ability to adapt to new nodes that are added after the feature is installed, so depending on the active node, you may or may not be able to access local help. My suggestion is to not bother installing Books Online on a cluster in the first place - put it on your workstations, test machines, etc.&lt;br&gt;&lt;br&gt;&lt;/li&gt;

&lt;li&gt;&lt;a href="http://connect.microsoft.com/SQLServer/feedback/details/622099/denali-setup-helplibmanager-not-found-if-installed-later" title="http://connect.microsoft.com/SQLServer/feedback/details/622099/denali-setup-helplibmanager-not-found-if-installed-later" target="_blank"&gt;Connect #622099 : [Denali Setup] : HelpLibManager not found if installed later&lt;/a&gt;
&lt;br&gt;&lt;br&gt;There is an issue that occurs if you don't install Books Online when first installing Denali, but then decide to install it later. On one machine so far, this has left Books Online completely crippled.&amp;nbsp; So if you haven't installed Denali yet and you think there is any chance you may want BOL later (unless you are on a cluster), make sure to check the box.&lt;br&gt;&lt;br&gt;This second problem was fixed with a repair.&amp;nbsp; Launch Denali setup, and on the Maintenance tab, choose Repair.&amp;nbsp; When you get to the Select Instance screen, choose &amp;lt;&amp;lt;Repair shared features only&amp;gt;&amp;gt; from the dropdown:&lt;br&gt;&lt;br&gt;&lt;img src="http://sqlblog.com/files/folders/30641/download.aspx" width="573" border="1" height="241"&gt;&lt;br&gt;&lt;br&gt;Note that the dialog you get when you launch Books Online for the first time is not worded very well.&amp;nbsp; Does "Yes" mean I am choosing to view content online, or does "Yes" mean I am going to launch a tool that is going to allow me to choose between online and local, or something else?&lt;br&gt;&lt;br&gt;&lt;img src="http://sqlblog.com/files/folders/30640/download.aspx" width="496" height="274"&gt;&lt;br&gt;&lt;br&gt;It turns out this is setting the preference to view content online.&amp;nbsp; You can change it later by going to Manage Help Settings as illustrated above.&amp;nbsp; If you use local help, even after all of this, you may still end up with a 404 error ("The requested topic cannot be found in the local Help content.")&amp;nbsp; I hope that these issues will be sorted out by the time the next CTP rolls around; in the meantime, just use the online version of Books Online.&lt;br&gt;&lt;/li&gt;
&lt;/ol&gt;&amp;nbsp;&lt;br&gt;</description></item><item><title>SQL Server v.Next (Denali) : The instance is down; what happened?</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2010/11/12/sql-server-v-next-denali-the-instance-is-down-what-happened.aspx</link><pubDate>Fri, 12 Nov 2010 22:36:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30496</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;If you come across a SQL Server that is not running, it can be troublesome to determine what happened and when.&amp;nbsp; You can run through the Windows event viewer, but this can be a real needle in a haystack problem on busy servers, especially if there are a lot of instances.&amp;nbsp; Wouldn't it be great to be able to easily read the SQL Server error log, even though the server is down?&amp;nbsp; Currently you would typically do this through xp_read_errorlog - which requires the server to be up.&amp;nbsp; So we've already talked about a needle in a haystack problem, now we also have a chicken and egg problem.&lt;/p&gt;&lt;p&gt;In Management Studio in Denali, you may notice a slightly different context menu when you right-click an instance in Registered Servers:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;img src="http://sqlblog.com/files/folders/30491/download.aspx" border="1" height="380" width="428"&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Notice the highlighted menu option "View SQL Server Log" - enabled even for a server that Management Studio is not online.&amp;nbsp; But don't press it yet, unless you have started SSMS as administrator, by selecting the following option from the right-click context menu:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;img src="http://sqlblog.com/files/folders/30493/download.aspx" height="214" width="244"&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;If you haven't launched SSMS as administrator, you will get the following error message (Attempted to perform an unauthorized operation. (SqlManagerUI)):&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;img src="http://sqlblog.com/files/folders/30494/download.aspx" height="134" width="620"&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;[This is because the error log is read via WMI.&amp;nbsp; One limitation of this minor implementation detail is that you won't be able to use this feature if you launch SSMS from a regular shortcut that has been pinned to the taskbar in Windows 7 - right-clicking does not provide an option to Run as administrator.&amp;nbsp; I hope the manageability team makes it more obvious that run as administrator is required - I guess a better error message will do.]&lt;/p&gt;&lt;p&gt;When the stars align, you will get the following (click to embiggen):&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;a href="http://sqlblog.com/files/folders/30495/download.aspx" title="http://sqlblog.com/files/folders/30495/download.aspx" target="_blank"&gt;&lt;img src="http://sqlblog.com/files/folders/30495/download.aspx" border="1" height="219" width="366"&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;So you can review the last instance of the error log even though the service is currently offline; you can also go back and review any log file that hasn't been cycled.&amp;nbsp; Cool, right?&amp;nbsp; Of course, it requires that the Windows server hosting the instance of SQL Server is running.&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;br&gt;&lt;/p&gt;</description></item><item><title>Blogging from the PASS keynote : 2010-11-10</title><link>http://sqlblog.com/blogs/aaron_bertrand/archive/2010/11/10/blogging-from-the-pass-keynote-2010-11-10.aspx</link><pubDate>Wed, 10 Nov 2010 16:54:00 GMT</pubDate><guid isPermaLink="false">21093a07-8b3d-42db-8cbf-3350fcbf5496:30356</guid><dc:creator>AaronBertrand</dc:creator><description>&lt;p&gt;It is the second day of keynotes at PASS, and we're gearing up for Quentin Clark's presentation.&amp;nbsp; There are not as many kilts around as I would have expected, and I'm only noticing because this year &lt;a href="http://yfrog.com/3d2bvvj" title="http://yfrog.com/3d2bvvj" target="_blank"&gt;I'm wearing one too&lt;/a&gt;.&amp;nbsp; Actually, at the bloggers' table, there is a pretty good kilt contingent, and I think we've all been a little surprised by the temperature of the metal portions of our chairs.&lt;br&gt;&lt;/p&gt;&lt;p&gt;Bill Graziano steps onto the stage, sans kilt, and asks if he should wear a kilt next year.&amp;nbsp; The crowd responds with a resounding yes. He announces that the 2010 Outstanding PASS Volunteer is &lt;a href="http://twitter.com/loriedwards" title="http://twitter.com/loriedwards" target="_blank"&gt;Lori Edwards&lt;/a&gt;, and that the PASSion Award goes to &lt;a href="http://twitter.com/wendy_dance" title="http://twitter.com/wendy_dance" target="_blank"&gt;Wendy Pastrick&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Then the exciting part: governance and financials. Bill reminds us that PASS is completely self-funded through sponsorships and attendance fees.&amp;nbsp; Bill welcomes everyone to talk about the financials at PASS, and you can also log into &lt;a href="http://www.sqlpass.org/governance" title="http://www.sqlpass.org/governance" target="_blank"&gt;http://www.sqlpass.org/governance&lt;/a&gt; to get as much detail as you want.&lt;/p&gt;&lt;p&gt;Next Bill draws the winner for the Wheel of SQL contest, Denis Paritz, who gets an XBox Kinect. Then he reminds us that the PASS appreciation party is at 7:00 PM at GameWorks.&lt;/p&gt;&lt;p&gt;Quentin Clark takes the stage to talk about SQL Server Codename "Denali."&amp;nbsp; He talks about how they've been dedicated to raising the "Mission Critical" bar in every release since SQL Server 2000, while also focusing on manageability and TCO. His bullet points for how Denali meets their three major focus pillars:&lt;/p&gt;&lt;p style="font-weight:bold;"&gt;&lt;br&gt;&lt;font size="4"&gt;Mission Critical&lt;/font&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Enhanced High Availability&lt;/li&gt;&lt;li&gt;Up to 15K partitions for VLDB&lt;/li&gt;&lt;li&gt;HADR for Beyond Relational&lt;/li&gt;&lt;li&gt;Performance for FTS &amp;amp; FILESTREAM&lt;/li&gt;&lt;li&gt;Columnar Index - potential 10x performance with better predictability&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-left:40px;"&gt;(While he's talking about this, twitter is flooded with "move on to the demo already" comments.) &lt;/p&gt;&lt;p style="margin-left:40px;"&gt;&lt;span style="font-weight:bold;"&gt;SQL Server AlwaysOn:&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;ul&gt;&lt;ul&gt;&lt;li&gt;faster failover&lt;/li&gt;&lt;li&gt;multi-db failover&lt;/li&gt;&lt;li&gt;multiple secondaries&lt;/li&gt;&lt;li&gt;active secondaries&lt;/li&gt;&lt;li&gt;faster client connection redirection&lt;/li&gt;&lt;li&gt;multi-site clustering&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;p style="margin-left:40px;"&gt;Gopal Ashok comes on to demonstrate AlwaysOn.&amp;nbsp; He shows the Availability Group wizard in Management Studio, which allows you to group databases together for failover purposes, set automatic failover for the group to other instances of SQL Server, and allow some of those servers to be readable while in secondary mode (read: no more snapshots!). This was a pretty cool demo, but please be aware that this functionality is not available in the CTP that we were given access to yesterday.&lt;br&gt;&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;font size="4"&gt;&lt;span style="font-weight:bold;"&gt;Productivity&lt;/span&gt;&lt;/font&gt;&lt;/p&gt;&lt;p style="margin-left:40px;"&gt;&lt;span style="font-weight:bold;"&gt;IT Pro&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;ul style="margin-left:40px;"&gt;&lt;li&gt;AlwaysOn&lt;/li&gt;&lt;li&gt;Flexible server roles&lt;/li&gt;&lt;li&gt;Default schemas for groups&lt;/li&gt;&lt;li&gt;Enhanced audit and extended events&lt;/li&gt;&lt;li&gt;Improved troubleshooting &amp;amp; performance analysis&lt;/li&gt;&lt;li&gt;Distributed replay for app testing &amp;amp; upgrades&lt;/li&gt;&lt;li&gt;Contained database (logins and jobs)&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-left:40px;"&gt;&lt;span style="font-weight:bold;"&gt;Developer&lt;/span&gt;&lt;br&gt;&lt;/p&gt;&lt;ul style="margin-left:40px;"&gt;&lt;li&gt;Unlock semantics for search in unstructured data (e.g. XML)&lt;/li&gt;&lt;li&gt;Advanced 2D spatial, aggregates, faster queries&lt;/li&gt;&lt;li&gt;T-SQL enhancements (SEQUENCE, OFFSET, THROW)&lt;/li&gt;&lt;li&gt;Interoperability with PHP and Java&lt;/li&gt;&lt;li&gt;FileTable&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-left:40px;"&gt;&lt;/p&gt;&lt;p style="margin-left:40px;"&gt;Rohan Kumar comes on to demonstrate FileTable.&amp;nbsp; This looks and smells like a combination of FILESTREAM and SharePoint. This feature actually makes me very nervous.&amp;nbsp; And he didn't answer an important quetion: what happens if you backup this database and restore it somewhere else?&lt;/p&gt;&lt;p style="margin-left:40px;"&gt;Don Box comes on to demonstrate Codename Juneau - the new BIDS.&amp;nbsp; It is a unified development tool that works with SQL Server &amp;amp; Visual Studio, and provides SQL Server Edition-specific development and deployment.&amp;nbsp; There's a new Table Designer with two panes - the junk you see in today's designer, and a lower pane with the actual T-SQL for the CREATE.&amp;nbsp; You can generate an ALTER for the diffs, but somehow I don't think they're going to put Red Gate out of business just yet. He demonstrates enhanced refactoring and Go To Definition.&amp;nbsp; On twitter, the reaction to these features is mixed, leaning toward sad trombones (as @Kendra_Little put it).&lt;br&gt;&lt;/p&gt;&lt;br&gt;&lt;font size="4"&gt;&lt;span style="font-weight:bold;"&gt;Pervasive Insight &lt;/span&gt;&lt;/font&gt;&lt;br&gt;&lt;ul&gt;&lt;li&gt;Project "Crescent"&lt;/li&gt;&lt;li&gt;Breakthrough in-memory PowerPivot perf&lt;/li&gt;&lt;li&gt;Enterprise data integration tools&lt;/li&gt;&lt;li&gt;Highly interactive web-based visualization&lt;/li&gt;&lt;li&gt;One semantic model for reporting &amp;amp; analysis&lt;/li&gt;&lt;li&gt;In-memory tech in SSAS&lt;/li&gt;&lt;li&gt;PowerPivot Model Support in BIDS &lt;br&gt;&lt;/li&gt;&lt;li&gt;MDS, IAL, DQS (data quality services) for data cleansing&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Jeff Bernhardt comes on to demonstrate Enterprise Data Integration and Management. He shows Data Quality Services using Master Data Services, but the only applause comes from Undo (Ctrl+Z) in SSIS' package designer.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;font size="4"&gt;&lt;span style="font-weight:bold;"&gt;And on a closing note...&lt;/span&gt;&lt;/font&gt; &lt;/p&gt;&lt;p&gt;On the way out, all attendees get DVDs containing CTP1.&amp;nbsp; So those unable to get decent bandwidth in the convention center (that is pretty much all of us), you can install it right away without waiting for the download. &lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description></item></channel></rss>