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.