DB315: New T-SQL Progammability Features in

André Henriksson & Anders Wedahl
ISV DE
DPE
Microsoft Corporation
Historik och Framtid
Data som en plattform
Nyheter; T-SQL i SQL Server 2008
Datatyper, TSQL
Ny funktionalitet i SQLServer 2008 som
berör hur vi designar våra applikationer.
ServiceBroker, CDC, Change Tracking
Credit: Euan Garden
Ny
Spelplan
Dataplattformen för företag
Services
Reporting
Integration
Analysis
Dynamisk utveckling
Query
FILE
RDBMS
OLAP
XML
Synch
Search
Mer än relationsdatabas
Mobile and
Desktop
Server
Cloud
Djup insikt
“Enabling customers of all sizes to derive value
from ALL data, birth through archival”
Object modell
__________________________________________
Konceptuell modell
__________________________________________
Fysiks datamodell
Datatyper
SQL Query Language
Procedural Language
CLR Integration
Globalisering
Mer än relationsdatabas
Annat
Separata datatyper för tid och datum
Större precision tider < 1 sekund
Större datumintervall
Tids-/datumdatatyper som hanterar
tidszoner
Date
• Endast datum
• 0001-01-01 till 9999-01-01 Gregorian
Time
• Endast tid
• Precision upp till 100 nanosekunder
DateTimeOffset
• Tidszoner sparas, UTC
• Precision upp till 100 nanosekunder
DateTime2
• Stora datumintervall
• Precision upp till 100 nanosekunder
• Hanterar inte tidszoner
SQL
ODBC
OLEDB
DATE
SQL_TYPE_DATE/SQL_DATE
DBTYPE_DBDATE
ADO.NET
DateTime
TIME
SQL_TIME/SQL_SS_TIME2
DBTYPE_DBTIME/DBTYPE
_DBTIME2
TimeSpan
DATETIMEOFFSET
SQL_SS_TIMESTAMPOFFSET
DBTYPE_DBTIMESTAMPOF
FSET
DateTimeOffset
DATETIME2
SQL_TYPE_TIMESTAMP
DBTYPE_DBTIMESTAMP
DateTime
SQL_TIMESTAMP
CREATE TABLE t1 (c1 DATE, c2 TIME(3),
c3 DATETIME2(7) NOT NULL DEFAULT GETDATE(),
c4 DATETIMEOFFSET CHECK (c4 < CAST(GETDATE() AS
DATETIMEOFFSET(0)))
);
INSERT INTO t1 VALUES ('0001-01-01', '23:59:59',
'0001-12-21 23:59:59.1234567',
'0001-10-21 23:59:59.1234567 -07:00');
INSERT INTO t1 VALUES ('9999-12-31', '23:59:59',
'9999-12-31 23:59:59.1234567',
'1111-10-21 23:59:59.1234567 -07:00');
SELECT c4, DATEPART(TZOFFSET, c4),
DATEPART(ISO_WEEK, c4),
DATEPART(MICROSECOND, c4)
FROM t1;
SQL Server™ 2005
User-Defined Types (UDTs) hanterade 8K
Räckte för många objekt men vissa tex spatiala
objekt blev för stora
SQL Server 2008
UDTs kan vara lika stora som de “inbyggda” –
konceptuellt identisk med varbinary(max)
Storleken på en UDT definieras av datatypen
Konverteras till varbinary(max) eller image för
äldre klienter
DECLARE @NewCustomer TABLE
(
[CustomerID] int NULL,
[FirstName] varchar(50) NOT NULL,
[LastName] varchar(50) NOT NULL,
[CompanyName] [nvarchar](128) NULL
)
Egendefinierade tabelldatatyper
Ny datatyp definierad av användaren
Formad i linje med definitionen på tabellvariabler
Kan användas för att definiera tabellvariabler
Kan definiera index och “constraints”
Ny vy för att se definierade typer:
Sys.table_types
Fördelar
Användarvänligt, Typmatchning
CREATE TYPE myT
AS table (a int, b varchar(100))
CREATE TYPE myTableType AS TABLE (
STOCK VARCHAR(10) PRIMARY KEY CLUSTERED,
TradeDate DATE CHECK (TradeDate < convert(date,SYSDATETIME())),
Quantity INT);
DECLARE @stockTrades myTableType;
INSERT INTO @stockTrades VALUES ('MSFT',convert(date,SYSDATETIME()),1)
INSERT INTO @stockTrades
SELECT Stock, MAX(CONVERT(DATE, TradeTime)), SUM(Quantity)
FROM DailyTrades GROUP BY Stock
SELECT * FROM @stockTrades WHERE stock = 'MSFT'
UPDATE @stockTrades SET stock = 'microsoft' WHERE stock = 'MSFT'
Datatyper
SQL Query Language
Procedural Language
CLR Integration
Globalisering
Mer än relationsdatabas
Annat
Nytt DML-uttryck som kombinerar multipla
DML-operationer
Byggsten för effektiv ETL
Uppfyller SQL-2006 standarden
Source
XXXXX XXX XXX
XXXX XXX
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
Source kan
vara en tabell
eller en fråga
Nytt DML-uttryck som kombinerar multipla
DML-operationer
Byggsten för effektiv ETL
Uppfyller SQL-2006 standarden
Source
Target
XXXXX XXX XXX
XXXX XXX
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
XXXXX X
XXXX
Target kan
vara en tabell
eller en
uppdaterbar vy
XXX XXX
Nytt DML-uttryck som kombinerar multipla
DML-operationer
Byggsten för effektiv ETL
Uppfyller SQL-2006 standarden
Source
Target
XXXXX XXX XXX
XXXX XXX
XXXXX XXX XXX
XXXX XXX
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
Om source
matchar target,
UPDATE
XXX XXX
Nytt DML-uttryck som kombinerar multipla
DML-operationer
Byggsten för effektiv ETL
Uppfyller SQL-2006 standarden
Source
Target
XXXXX XXX XXX
XXXX XXX
XXXXX XXX XXX
XXXX XXX
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
Ingen träff,
INSERT
XXX XXX
Nytt DML-uttryck som kombinerar multipla
DML-operationer
Byggsten för effektiv ETL
Uppfyller SQL-2006 standarden
Source
Target
XXXXX XXX XXX
XXXX XXX
XXXXX XXX XXX
XXXX XXX
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
Om source
INTE matchar,
DELETE
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
XXX XXX
CREATE TABLE Source (id INT, name NVARCHAR(100), qty INT);
CREATE TABLE Target (id INT, name NVARCHAR(100), qty INT);
-- Synchronize source data with target
MERGE Target AS t
USING Source AS s
ON t.id = s.id
WHEN MATCHED AND
(t.name != s.name OR t.qty!= s.qty) THEN
-- Row exists and data is different
UPDATE SET t.name = s.name, t.qty = s.qty
WHEN NOT MATCHED THEN
-- Row exists in source but not in target
INSERT VALUES (s.id, s.name, s.qty)
WHEN SOURCE NOT MATCHED THEN
-- Row exists in target but not in source
DELETE
OUTPUT $action, inserted.id, deleted.id;
Tillägg till GROUP BY
Möjligt att definiera flera grupperingar i
samma fråga
Producera ett resulatat set som är
ekvivalent med UNION ALL på rader som är
grupperade olika.
Följer SQL 2006 standarden
Mycket lättare och snabbare att skriva frågor
med aggregat som ofta är underliggande
vid rapportunderlag.
-- Use UNION ALL on dual SELECT statements
SELECT customerType,Null as TerritoryID,MAX(ModifiedDate)
FROM Sales.Customer GROUP BY customerType
UNION ALL
SELECT Null as customerType,TerritoryID,MAX(ModifiedDate)
FROM Sales.Customer GROUP BY TerritoryID
order by TerritoryID
-- Use GROUPING SETS on single SELECT statement
SELECT customerType,TerritoryID,MAX(ModifiedDate)
FROM Sales.Customer
GROUP BY GROUPING SETS ((customerType), (TerritoryID))
order by customerType
Datatyper
SQL Query Language
Procedural Language
CLR Integration
Globalisering
Mer än relationsdatabas
Annat
Använder lokala temporära tabeller
Skapar mycket disk I/O
Känsligt “Locking and Blocking”
Kräver att DU städar bort dina temporära
tabeller.
Leder ofta till omkompilering av SPar
Multiparameteranvändning
Ger många “round trips”
Multipla anrop till samma SP
Ineffektiv kod…
Parametrar av typen “Table Type”
Input parameter till SPs/Funktioner
Måste använda det nya nyckerlordet
“ReadOnly”.
/* Create a procedure to receive data for the table-valued parameter. */
CREATE PROCEDURE usp_InsertProductionLocation
@TVP LocationTableType READONLY AS
TVPs “lever” inom en SP/Funktion
Bättre på att hantera större datamängder.
Fungerar som BCP fast inne i servern…
En enklare programmeringsmodell
Starkt typad
Reducerar antalet klient/server “round trips”
Orsakar inte omkompileringar
-- Create a user TABLE type
CREATE TYPE myTableType AS TABLE (id INT,
name NVARCHAR(100), qty INT);
-- Create a stored procedure that accepts a table-variable
-- of type TABLE as a parameter
CREATE PROCEDURE myProc (@tvp myTableType READONLY)
AS
UPDATE Inventory SET qty += s.qty
FROM Inventory AS i INNER JOIN @tvp AS tvp
ON i.id = tvp.id
GO
-- Declare & populate variable of the TABLE type
DELCARE @list AS myTableType;
INSERT INTO @list VALUES (1, ‘Bicycle’, 10),
(2, ‘Roller blades’, 5), (3, ‘Soccer ball’, 25);
-- Execute the stored procedure with TVP
EXEC myProc @list;
Support för klienten
Full support i ADO.Net 3
Ny parameter typ: SqlDbType.Structured
Kan skickas som en;
DataTable
IEnumerable<SqlDataRecord> (fully streamed)
DbDataReader
Supporterad i ODBC/OLEDB
Ny parameter typ SQL_SS_Table
Bind med den familjära: SQLBindParameter
Effektiv implementation i TDS lagret
Using (MyConnection){
//Create a data table
DataTable dt = new DataTable(“TVPOrdersDataTable”);
dt.Columns.Add(“ProductType”, typeof(string));
dt.Columns.Add(“Quantity”, typeof(int));
// Add rows
dt.Rows.Add(“Canon Digital Camera”, 20);
dt.Rows.Add(“June”, 10);
dt.Rows.Add(“Xbox-360”, 8);
// Create a command and bind parameter
SqlCommand tvp_cmd = new SqlCommand(“sp_UpdataInventory”,
MyConnection);
SqlParameter tvpParam = tvp_cmd.Parameters.AddWithValue(
@OrdersTvp, dt);
//Execute command
tvp_cmd.ExecuteNonQuery();
TSQL
Upprepa dina VALUES i en enda INSERT
INSERT INTO contacts VALUES ('John Doe', '425-333-5321'),
('Jane Doe', '206-123-4567'), ('John Smith', '650-434-7869');
Använda operatorerna: +=, -=, *=, /=
UPDATE Inventory
SET quantity += s.quantity
FROM Inventory AS i INNER JOIN Sales AS s ON i.id = s.id
Initializera variablerna redan vid variabel deklarationen
DECLAER @v int = 5;
DECLARE @v1 varchar(10) = ‘xxxxx’;
Använd CONVERT funktionen att
konvertera data mellan binary och char
data:
select convert(char(4), col1_of_type_binary,1), .... from t1 ......
select ...... from t1, t2 where convert(char(4), t1.col1_of_type_binary,1) =
t2.col1_of_type_char
;
Nytt i SQLServer 2005
Nu vaknar det...
Conversation Priorities
Prioritera de meddelanden som är viktiga så att
resurserna spenderas på rätt saker vid rätt
tidpunkt.
SSB Diagnose
Hjälper till vid felsökning...
External activation
Change Tracking
CDC (Change Data Capture)
Synkron mekanism för att hålla koll
Asynkron process för att bestämma
och fånga förändringar genom att läsa
Transaktionsloggen.
Inte lämpligt för två väg synkronisering.
på förändringar. Är en del av
transaktionen; görs inom samma DML
operation. Betyder att “Change
tracking” kan användas för två vägs
sync scenarion då konflikter kan
upptäckas.
•Designad för “delta” scenarios.
•Senaste datat är det viktiga!
•Låg kostnad!
Fångar ALLA förändringar med alla
värden inte bara det senaste. Ger
möjlighet att fånga alla förändringar
inom ett tidsintervall.
•Datawarehouse bästa vän!
•Alla data förändingar.
•Overheadkostnaden ca 10% (CPU)
Mekanism för att enkelt kunna hålla koll på förändringar på
en tabell
Alla ändringar fångas asynkront från transaktionsloggen
Information om VAD som förändrats i ursprungstabellen
Table-Valued Functions (TVF) för att fråga på det fångade
datat
Enkelt att använda från Integration Services
XXXXX XXX XXX
XXXX XXX
XXXXXXXXXX
X XXX XXXX XX
XX XXXX
XXXXX XXX XX
Source
Table
XXXXX XXX XXX XXXX XXX XXXXXXXXXX X XXX XXXX XX
Transaction Log
Capture
Process
XXX
XXX
XXXXXX
XXX
CDC
Functions
Change
Table
Mekanism för att enkelt kunna hålla koll på förändringar på
en tabell
Alla ändringar fångas asynkront från transaktionsloggen
Information om VAD som förändrats i ursprungstabellen
Table-Valued Functions (TVF) för att fråga på det fångade
datat
Enkelt att använda från Integration Services
XXXXX XXX XXX
XXXX XXX
Capture
XXXXXXXXXX
Process
sys.sp_cdc_enable_db_change_data_capture
Transaction Log
X XXX XXXX XX
XXXXX XXX XXX XXXX XXX XXXXXXXXXX X XXX XXXX XX
XX XXXX
XXXXX XXX XX
sys.sp_cdc_enable_table_change_data_capture
Source
Table
cdc.fn_cdc_get_all_changes_<instance>
cdc.fn_cdc_get_net_changes_<instance>
CDC
Functions
XXX
XXX
XXXXXX
XXX
Change
Table
Datatyper
SQL Query Language
Procedural Language
CLR Integration
Globalisering
Mer än relationsdatabas
Annat
Stora aggregat
Ingen 8K gräns längre
Multi-input aggregates
Specificera sorteringsordning i (TVFs)
Bättre performance
Möjlighet att registrera statiska metoder som
User Defined Functions (UDFs)
Datatyper
SQL Query Language
Procedural Language
CLR Integration
Globalisering
Mer än relationsdatabas
Annat
Stödjer Windows Vista® collations
Adderar Windows nya collations i SQL Server 2008
Adderar nya versioner av existerande Windows
collations (*_100_*)
För vissa sker MYCKET STORA ÄNDRINGAR
Chinese_Taiwan_Stroke_100 and
Chinese_Taiwan_Bopomofo_100 har nu culture-correct
viktning för varje character, speciellt för Ext. A + B
Datatyper
SQL Query Language
Procedural Language
CLR Integration
Globalisering
Mer än relationsdatabas
Annat
Utökar SQL Server med typer, operationer
och index för spatial geometry
Enklare att spara lokations data
Gör SQL Server till en plattform för geospatial lösningar (ISV)
Standardbased data och
programmeringsmodel
Baserad på STORA UDT:er
SQL Server är med SQLServer 2008 en
bättre spelar för att hantera semistrukturerad data
XML: Förbättrad schema och data modell
support.
Hierarchy Id
Sparse Columns: Breda tabeller med mycket
luft hanteras effektivt.
Filtered Indexes: Index på subset av data
/
En system data typ med variable längd
CLR UDT
Microsoft.SqlServer.Types
Varbinary encoding ( < 900 bytes)
Representera en position i en hierarki.
Håller en representation av den logiska positionen
Inbyggda metoder för att manipulera hierarkier
Förenklar sparande och frågande på hierarkist
data
Insert och delete kan göras på vilken nod som
helst.
/1
/1/1
/2
/1/2
/1/1/1
/1/1/2
/3
/3/1
/3/2
“Sparse” sätts som ett attribute på en kolumn
Lagringsoptimering: 0 bytes sparas för NULL värden
NULL komprimeras I (Tabular Data Stream) TDS lagret
Ingen förändring vid frågor/DML
// Sparse as a storage attibute in Create/Alter table statements
Create Table Products(Id int, Type nvarchar(16)…,
Resolution int SPARSE, ZoomLength int SPARSE);
// No Change in Query/DML Behavior
Select Id, Type, Resolution, ZoomLength from Products;
Update Products set Resolution=3, ZoomLength = 105 where Id = 101;
Varbinary(max) with FILESTREAM
Filsystems datat manageras av SQL Server
Supporterar Win32 “file streaming” för bästa performance
Backup och Restore
Kernel Transactions I Windows Server 2008?
Datatyper
SQL Query Language
Procedural Language
CLR Integration
Globalisering
Mer än relationsdatabas
Annat
Deprecation nivåer
Announcement/Warning
Final support/Removal
Future deprecation
SQL Server 2008 implementerar “deprecation policy”
Det finns Perfcounters för alla “deprecated features”
Trace events för att hålla koll på “deprecated feature” användning
DEPRECATION_ANNOUNCEMENT
DEPRECATATION_FINALSUPPORT
Microsoft SQL Server
www.microsoft.com/sql/default.mspx
Microsoft SQL Server Books Online
http://msdn2.microsoft.com/en-us/library/ms130214.aspx
SQL Server Developer Center
http://msdn2.microsoft.com/en-us/sql/default.aspx
T-SQL Programmability Resources
http://msdn2.microsoft.com/en-us/sql/aa336296.aspx
Microsoft SQL Server 2008 June CTP
www.microsoft.com/sql/prodinfo/futureversion/default.mspx
Microsoft SQL Server 2008 MSDN forums
http://forums.microsoft.com/MSDN/default.aspx?ForumGroupID=428&SiteID=1
Technical Communities, Webcasts, Blogs, Chats, and User Groups
www.microsoft.com/communities/default.mspx
Microsoft Learning and Certification
www.microsoft.com/learning/default.mspx
MSDN, the Microsoft® Developer Network, and TechNet
http://microsoft.com/msdn
http://microsoft.com/technet
Trial Software and Virtual Labs
www.microsoft.com/technet/downloads/trials/default.mspx
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.