This document summarizes a session on SQL Server 2008 for developers. The session will cover Management Studio enhancements, T-SQL features like filtered indexes and table-valued parameters, new date/time data types, the MERGE statement, policy-based management, and change data capture. Demo portions of the session will showcase features like the debugger, filtered indexes, table-valued parameters, and change data capture. The presenter is a SQL Server developer and DBA from Wheeling, WV who writes about SQL Server.
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
SQL Server 2008 For Developers
1. SQL Server 2008 for
Developers
http://johnsterrett.com/
John Sterrett, @JohnSterrett
2. About Me!
• Working with SQL Server
since 2006
• Production DBA for 2
Years
• Responsible for 50
• Reside in Wheeling, Production instances with
WV (Pittsburgh, PA) 1250 Databases
• Syndicated Blogger • .NET Developer for 3
on SQLServerPedia Years
• Writer for
• Built a few Data Marts
MSSQLTIPS.com
Session Code • Session Title
3. Topics to Cover…..
• Management Studio (SSMS) Enhancements
• T-SQL Delighters
• Filtered Indexes
• New Date and Time Data Types
• Table-Valued Parameters
• MERGE statement
• Policy Based Management
• Change Data Capture
Session Code • Session Title
4. Management Studio Enhancements
• IntelliSense
• Debugging
• Error List
• Object Explorer Details Viewer
• Template Explorer
• Activity Monitor
Session Code • Session Title
5. Transact-SQL Delighters
• Declare and Initialize Variables
• Compound assignment Operators
• Table Value Constructor Support through the
VALUES Clause
Session Code • Session Title
6. DEMO!!!
Demo covering The following topics
• IntelliSense
• Debugging
• Error Lists
• Object Explorer Details
• Template Explorer
• Activity Monitor
Session Code • Session Title
7. Filtered Indexes!
Have you ever wanted to create an index that filters
between a static search criteria?
CREATE INDEX idxName ON Schema.Table
(Column) WHERE ……
Session Code • Session Title
8. Filtered Indexes!
• Improved query performance and plan quality if
used correctly!
• Reduced index maintenance costs
• Reduced index storage costs
Session Code • Session Title
10. New Date & Time Types
• SQL Server 2008 extends date/time support
• Larger Value Space
– Current DATETIME - 1753-9999 Years
– Current DATETIME - 0.00333 Second Accuracy
– New Date Types - 0001-9999 Years
– New Date/Time Types - Precisions to 100
nanoseconds
• Variable Precision Saves Space
• Separate Date and Time Saves Space
• ANSI Compatible
Session Code • Session Title
11. Date and Time
DATE Data Type
• Date Only
• 01-01-0001 to 31-12-9999 Gregorian Calendar
TIME Data Type
• Time Only
• Variable Precision - 0 to 7 decimal places for seconds
• To 100 nanoseconds
Session Code • Session Title
12. DATETIME2 & DATETIMEOFFSET
DATETIME2 Data Type
• 01-01-0001 to 31-12-9999 Gregorian Calendar
• Variable Precision - to 100 nanoseconds
DATETIMEOFFSET
• 01-01-0001 to 31-12-9999 Gregorian Calendar
• Variable Precision - to 100 nanoseconds
• Time Zone Offset (From UTCTime) Preserved
• Not Time Zone Aware - No Daylight Saving Time Support
Session Code • Session Title
13. DATETIMEOFFSET
• SWITCHOFFSET (DATETIMEOFFSET,
time_zone)
• Allows you to change time zones
• SqlDbType.DateTimeOffset
Session Code • Session Title
14. Demo!!
T-SQL Date and Time
DATETIMEOFFSET with .NET
Session Code • Session Title
15. Table-Value Parameters
Have you wished that you could send a table into a
stored procedure?
Do you wish you could send all parent-child
relationship data in one round-trip?
Session Code • Session Title
16. Table Types
SQL Server has table variables
• DECLARE @t TABLE (id int);
SQL Server 2008 adds strongly typed table
variables
• CREATE TYPE mytab AS TABLE (id int);
DECLARE @t mytab;
Table-Value Parameters must use strongly typed
table variables
Session Code • Session Title
17. Things to know about TVP
ADO.NET 3.5 Supports Table Value Parameters
You can populate TVP from the following .NET
objects
• DataTable
• DbDataReader
• System.Collections.Generic.IList <SQLDataRecord>
Recommended for 1000 or less records
Session Code • Session Title
18. TVP with .NET
SqlParameter tvpParam = new SqlParameter();
tvpParam.ParameterName = "@TVP";
tvpParam.Value = dtList; //DataTable in this example
tvpParam.SqlDbType = SqlDbType.Structured; // This data type allows us
to pass a table into DB Objects
tvpParam.TypeName = "TVPComponentType"; // Name of strong typed
(table type)
Session Code • Session Title
20. MERGE!!!
TRUNCATE TABLE db1.dbo.fool
INSERT INTO db1.dbo.fool
SELECT * FROM db2.dbo.fool
Session Code • Session Title
21. Merge Statement
Multiple set operations in a single SQL statement
Uses multiple sets as input
• MERGE target USING source ON ...
Operations can be INSERT, UPDATE, DELETE
Operations based on
• WHEN MATCHED
• WHEN [TARGET] NOT MATCHED
• WHEN SOURCE NOT MATCHED
ANSI SQL 2006 compliant - with extensions
Session Code • Session Title
22. More on MERGE
Multiple WHEN clauses possible
• For MATCHED and SOURCE NOT MATCHED
• Only one WHEN clause for TARGET NOT MATCHED
MERGE can be used with any table source
A MERGE statement causes triggers to be fired
once
Rows affected includes total rows affected by all
clauses
Session Code • Session Title
23. MERGE Performance
MERGE statement is transactional
• No explicit transaction required
One Pass Through Tables
• At most a full outer join
• Matching rows = when matched
• Left-outer join rows = when target not matched
• Right-outer join rows = when source not matched
Session Code • Session Title
25. Central Management System (CMS) &
Policy Based Management
Have you ever wanted to run a script against all
production databases?
Have you ever wanted to enforce naming
conventions in SQL Programming?
Session Code • Session Title
26. CMS and PBM
• Central Management System
• Needs only 1 instance of SQL 2008
• Reactive not proactive
• great tool for updating objects on multiple servers
• Policy Based Management
• proactive tool prevents stuff from happening
• great tool to enforce compliance on SQL 2008+ servers
Session Code • Session Title
28. DEMO!
Demo monitoring and enforcing naming standards
with Policy Based Management
Session Code • Session Title
29. Change Data Capture
Have you ever wanted to get row deltas on a table
without using triggers on the source table?
Session Code • Session Title
30. Enable Change Data Capture
• Must have Enterprise Edition
• Uses transaction log to pull deltas
• Enable on database (req sysadmin)
• sys.sp_cdc_enable_db_change_data_capture
• creates cdc schema
• creates cdc user
• creates system tables with cdc schema
• Enable on table(s) (req db_owner)
• sys.sp_cdc_enable_table
• creates sql agent jobs
• creates table cdc.schema_tablename_CT
Session Code • Session Title
31. Change Data Capture data
• Changes stored in cdc.schema_tablename_CT
• _$operation column specifies change type
• 1 = DELETE
• 2 = INSERT
• 3 = BEFORE UPDATE
• 4 = AFTER UPDATE
Session Code • Session Title
32. Querying Change data
• cdc.fn_cdc_get_all_changes<capture_instance>
• gets all changes during specific range
• cdc.fn_cdc_get_net_changes<capture_instance>
• returns final (net change) for each row in the specific
range
Session Code • Session Title
34. DEMO!
Enable and use Change Data Capture
Session Code • Session Title
35. How do you get started?
Using the Transact-SQL Debugger
SQL 2008 JumpStart
MSDN – SQL 2008 Virtual Labs
Developer Fundamentals Part 1: Uncovering T-SQL
on SQL Server 2008
Session Code • Session Title
Datetime2 is the ansi compatible version as it has the correct accuracy and rangeDatetimeoffset stores datetime and an offset. It doesn’t store the actual timezone or anything about daylight saving time.The client session includes an app that stores the timezone.Both are variable precision, save space and increase performance by specifying the correct size.