Ruprecht Dröge BeConstructed GmbH. Firma (Schulung, Beratung, Softwareentwicklung): SQL Reihe auf...

Preview:

Citation preview

Neuerungen in T-SQL

Ruprecht DrögeBeConstructed GmbH

Person

Firma (Schulung, Beratung, Softwareentwicklung):

http://www.beconstructed.de

SQL Reihe auf MSDN-Solvehttps://www.microsoft.com/germany/msdn/solve/knowhow/sql/default.mspx

BLOG:http://blogs.sqlserverfaq.de

Camp auf Mallorca über Katmai und BI 2008:http://www.insider-camp.de

Agenda

Deklaration und InititialisierungInkrement / DekrementZeilen-KonstruktorTabellen ParameterGrouping SetsNeue DatentypenMergeBackup CompressionLock Escalation

Richtung der Entwicklung

Immer weitreichendere Kompatibilität mit ANSI

z.B. das Semikolon am Anweisungsende in immer mehr Befehlen verpflichtendSollte man sich schon mal angewöhnen ;

Angleichung an andere Programmiersprachen im Microsoft Umfeld

Try Catch etc.Initialisierung und Deklaration

Deklaration und Initialisierung

Neue Möglichkeit z.B. in gespeicherten Prozeduren und Batches eine Variable in einem Statement sowohl zu deklarieren als auch zu initialisieren.

DECLARE @Version nvarchar = 'SQL Server 2008‚;

SELECT Version=@Version

Inkrement und Dekrement

Die Möglichkeit Variablen in einer vereinfachten Syntax zu inkrementieren und zu dekrementieren

declare @int2 int=1;set @int2+=7;Select Out=@int2;set @int2-=5;Select Out=@int2;

Zeilen-Konstruktor

Das Einfügen mehrerer Zeilen in einem Statement

INSERT INTO tblLaender (id,land)Values(1,'Frankreich'),(2,'Deutschland'), (3,'Großbritanien'),(4,'Italien') ;

Tabelle als Parameter

Neue Möglichkeiten der Programmierung

CREATE TYPE Angestellte AS TABLE(

Vorname nvarchar(50) NOT NULL,Nachname nvarchar(50) NOT NULL,Gehalt money NULL

);

CREATE PROCEDURE ZeigeAngestellte@Ang Angestellte READONLYASSELECT * FROM @Ang;

Ist ein "gewöhnlicher" benutzerdefinierter Typ

SELECT * FROM Sys.types;Oder im SQL Server Management Studio

Grouping Sets

Neue Syntax ANSI Kompatibel

SELECT Planet, Kontinent, Land, AnzahlStaedte=Count(*)

FROM StaedteGROUP BY GROUPING SETS (Planet, Kontinent, Land)

Neue Datentypen: Datum und Zeit

Bisher: (small)Datetime, Datum UND UhrzeitNun:

DATENur Datum von 1.1.0001 bis 31.12.9999

TIME(n)Nur Zeit, optional mit Genauigkeit bis 100 ns (n=1-7)

DateTime2(n) Kombination Großer Datumsbereich,optional mit Genauigkeit bis 100 ns, aber keine Zeitzonen

DateTimeOffset(n) UTC Zeit mit Zeitzonen ,optional mit Genauigkeit bis 100 ns

Neue Datentypen: HierarchyID

HierarchyIDAbbildung hierarchischer Strukturenz.B. in Firmen

CREATE TABLE MPressOrg(ID int identity primary key,HiD HierarchyID ,Lastname nvarchar(80));GOINSERT INTO MPressOrg VALUES

('/','Braun-Weisholler') ,('/1/','Löffelmann')

,('/2/','Weiherer'),('/1/1/','Raatz'),('/1/2/','Dröge'),('/2/1/','Holert');

.NET DatentypMuss nicht fortlaufend nummeriert seinAuch '/1/1.5/' möglichViele Methoden

Methoden der HierarchyIDGetAncestor(i) (Vorfahr),

Also Einträge der übergeordnete Ebene, i=Anzahl der EbenenGetDescendant(p1,p2) (Nachkomme)

untergeordnete Ebene (bei p1=null, p2=null), oder Abhängig von p1,p2GetLevel

Ebene des aktuellen Wertes GetRoot

WurzelIsDescendant

Ist untergeordnete Ebene Parse

Einlesen von String-WertenRead

Nur zu internen Zwecken bei der Umwandlung varbinary / hierarchyidReparent

Neuzuweisung der übergeordneten Ebene ToString Write

Nur zu internen Zwecken

Ein Beispiel zu ReParentDECLARE @SubjectEmployee hierarchyid , @OldParent

hierarchyid, @NewParent hierarchyidSELECT @SubjectEmployee = OrgNode FROM

HumanResources.EmployeeDemo WHERE LoginID = 'adventure-works\gail0' ; -- Node /1/1/2/SELECT @OldParent = OrgNode FROM HumanResources.EmployeeDemo WHERE LoginID = 'adventure-works\roberto0' ; -- Node /1/1/SELECT @NewParent = OrgNode FROM HumanResources.EmployeeDemo WHERE LoginID = 'adventure-works\wanida0' ; -- Node /2/3/

UPDATE HumanResources.EmployeeDemoSET OrgNode = @SubjectEmployee.Reparent(@OldParent,

@NewParent) WHERE OrgNode = @SubjectEmployee ;

Neue Datentypen: Geo-Typen

Geo-DatentypenCREATE TABLE SpatialTable ( id int IDENTITY (1,1), GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() );GOINSERT INTO SpatialTable (GeomCol1)VALUES (geometry::STGeomFromText('LINESTRING

(100 100, 20 180, 180 180)', 0));

Ebenfalls .NET Implementierung

Unterschiede der Geo-Datentypen

Im System, das im englischen als "Flat-earth" oder "planar" System bekannt ist, werden Distanzen und Bereiche mit der gleichen Einheit wie Koordinaten beschrieben.Wenn man der geometry Datentyp benutzt, ist die Distanz zwischen (2,2) und (5,6) 5 Einheiten groß, unabhängig davon, welche Einheit man benutzt.

Im "ellipsoidal" oder "round-earth" System werden Koordinaten in Längen- und Breitengraden (latitude und longitude) angegeben. Dabei werden Längen und Bereiche normalerweise in Metern bzw. Quadratmetern angegeben. Die Maßeinheit hängt dann ab von dem "spatial reference identifier" (SRID) der geography Instanz. Üblicherweise wird der Meter als Maßeinheit benutzt.

Merge

ANSI Standard SQL 2006"UPSERT"

Also Insert oder Update (oder Delete) in einem Statement

MERGE dbo.PersonenUSING PersonenImport ON Personen.ID=PersonenImport.ID

WHEN MATCHED THENUPDATE SET Personen.Nachname=PersonenImport.Nachname,

Vorname=PersonenImport.VornameWHEN NOT MATCHED THEN

INSERT VALUES (Nachname, Vorname)OUTPUT $Action, inserted.Nachname, inserted.Vorname ;

Vorteil gegenüber von einzelnen Insert- oder Update-Statements

Ziel und Quelltabelle werden nur einmal gelesenDaher bessere Performance

Struktur von Merge

MERGEDann Tabellen-Name

USINGRefrenztabelle oder SELECT-Statement

ONVerknüpfung der beiden InformationenWie bei JOIN Ausdrücken

WHEN MATCHED THENAuszuführende Befehle, wenn die in der ON-Klausel angegebenen Werte übereinstimmen

WHEN NOT MATCHED THENAuszuführende Befehle, wenn die in der ON-Klausel angegebenen Werte nicht übereinstimmen

Merge, viele weitere Möglichkeiten

WHEN SOURCE NOT MATCH Auszuführende Befehle, wenn die Werte, die in der ON-Klausel angegeben werden, im USING nicht vorkommen

Mehrere MATCHED AnweisungenWHEN MATCHED AND Lager.Anzahl-Verkauf.Anzahl<=0 THEN

DELETEWHEN MATCHED THEN UPDATE SET Lager.Anzahl=Lager.Anzahl-Verkauf.Anzahl

Backup Compression

Sehr einfache aber wirkungsvolle Erweiterung

BACKUP DATABASE Test TO DISK=‚C:\Test\Testfull.bak‘ WITH COMPRESSION

droege@beconstructed.de

blogs.sqlserverfaq.de

Ask the ExpertsWir freuen uns auf Ihre Fragen: Technische Experten stehen Ihnen während der gesamten Veranstaltung in der Haupthalle zur Verfügung.

Recommended