SQL Server 2008 T-SQL Improvements

Here are some notes on "SQL Server 2008 T-SQL Improvements" I took while attending an advanced class on SQL Server taught by Paul Nielsen (from https://www.sqlserverbible.com/).

Please note that, although these notes were taken during the class, I might have added some of my own (mis)interpretation :-). Always check your facts on Books Online (I try to provide links when applicable). As with anything else you get from a blog, never use any of this in production before you thoroughly validate it a test environment. Please keep in mind that some of those will be hard to follow without some pre-requisite knowledge and the right context. Reading the post from top to bottom will help.


T-SQL Variables

  • Initialize when declaring : DECLARE @x INT = 1
  • Incrementing : SET  @X += 1  (also with other operators)

TVP

  • How to send 100 rows from a client to the sql server as one transaction?
  • bcp, SQLBulkCopy, XML, SQLDataAdapter.Update CSV in VARCHAR(MAX), ADO.NET transactions…
  • In the past, to use a SP, you need multiple calls
  • Need a good, clean, elegant way to pass lots of rows to a SP.
  • Table Valued Parameters are like a table variable (no statistics, not logged)
  • Used inside the receiving SP, TVPs are read only, scoped to SP
  • Demo: create type, create SP with TVP – Declare as READONLY
  • See https://msdn.microsoft.com/en-us/library/bb675163.aspx

Grouping sets

Row Constructors

  • Example: Multiple rows in a single INSERT
  • INSERT table (c1, c2) VALUES (‘a’,1), (‘b’,1), (‘c’,3), (‘d’,4);
  • Careful – This is good for demos, but does not perform as well as multiple inserts. It’s a single transaction.
  • Example: SELECT…FROM VALUES
  • SELECT * FROM (VALUES (‘a’,1), (‘b’,1), (‘c’,3), (‘d’,4)) as T1 (c1, c2)
  • See https://msdn.microsoft.com/en-us/library/bb386869.aspx

Composable SQL

  • Also known as: SQL from output, Select from DML, Insert over Output
  • Extension of SQL Server 2005 output clause
  • SQL 2000: You could only see insert/deleted inside the trigger
  • SQL 2005: Output clause to send to client, table, temp table, table variable
  • SQL 2008: MERGE output, Output can be returned as a subquery
  • Use case: Return inserted GUIDs, $action
  • Use case: Two table insert: Insert -> Output -> Insert
  • Check restrictions on DML on both input side and output side
  • See https://msdn.microsoft.com/en-us/library/ms177564.aspx

Dependency Tracking

Integrated Full Text Search (iFTS)

iFTS - Using

  • Setup with sp_fulltext_services
  • Table Scan: SELECT… WHERE column like ‘%text%’
  • iFTS: SELECT… WHERE CONTAINS (table.column, ‘text’)
  • iFTS: SELECT… WHERE FREETEXT(table.column, ‘text’)
  • Inside text: And, Near, IsAbout Weigh, Formsof Inflection
  • JOIN with ContainsTable to FreeTextTable
  • See https://msdn.microsoft.com/en-us/library/cc879300.aspx

Related information at
https://download.microsoft.com/download/7/a/b/7ab8283e-a3a0-4185-818b-ab7b1fc6300b/DAT326%20-%20T-SQL%20Enhancements%20in%20SQL%20Server%202008.ppt