Ruprecht Dröge BeConstructed GmbH
Firma (Schulung, Beratung, Softwareentwicklung): SQL Reihe auf MSDN-Solve sql/default.mspx BLOG: Camp auf Mallorca über Katmai und BI 2008:
Deklaration und Inititialisierung Inkrement / Dekrement Zeilen-Konstruktor Tabellen Parameter Grouping Sets Neue Datentypen Merge Backup Compression Lock Escalation
Immer weitreichendere Kompatibilität mit ANSI z.B. das Semikolon am Anweisungsende in immer mehr Befehlen verpflichtend Sollte man sich schon mal angewöhnen ; Angleichung an andere Programmiersprachen im Microsoft Umfeld Try Catch etc. Initialisierung und Deklaration
Neue Möglichkeit z.B. in gespeicherten Prozeduren und Batches eine Variable in einem Statement sowohl zu deklarieren als auch zu initialisieren. nvarchar = 'SQL Server 2008; SELECT
Die Möglichkeit Variablen in einer vereinfachten Syntax zu inkrementieren und zu dekrementieren int=1; Select Select
Das Einfügen mehrerer Zeilen in einem Statement INSERT INTO tblLaender (id,land) Values (1,'Frankreich'), (2,'Deutschland'), (3,'Großbritanien'), (4,'Italien') ;
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 Angestellte READONLY AS SELECT * Ist ein "gewöhnlicher" benutzerdefinierter Typ SELECT * FROM Sys.types; Oder im SQL Server Management Studio
Neue Syntax ANSI Kompatibel SELECT Planet, Kontinent, Land, AnzahlStaedte=Count(*) FROM Staedte GROUP BY GROUPING SETS (Planet, Kontinent, Land)
Bisher: (small)Datetime, Datum UND Uhrzeit Nun: DATE Nur Datum von bis 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
HierarchyID Abbildung hierarchischer Strukturen z.B. in Firmen CREATE TABLE MPressOrg (ID int identity primary key,HiD HierarchyID,Lastname nvarchar(80)); GO INSERT INTO MPressOrg VALUES ('/','Braun-Weisholler'),('/1/','Löffelmann'),('/2/','Weiherer'),('/1/1/','Raatz'),('/1/2/','Dröge'),('/2/1/','Holert');.NET Datentyp Muss nicht fortlaufend nummeriert sein Auch '/1/1.5/' möglich Viele Methoden
GetAncestor(i) (Vorfahr), Also Einträge der übergeordnete Ebene, i=Anzahl der Ebenen GetDescendant(p1,p2) (Nachkomme) untergeordnete Ebene (bei p1=null, p2=null), oder Abhängig von p1,p2 GetLevel Ebene des aktuellen Wertes GetRoot Wurzel IsDescendant Ist untergeordnete Ebene Parse Einlesen von String-Werten Read Nur zu internen Zwecken bei der Umwandlung varbinary / hierarchyid Reparent Neuzuweisung der übergeordneten Ebene ToString Write Nur zu internen Zwecken
hierarchyid = OrgNode FROM HumanResources.EmployeeDemo WHERE LoginID = 'adventure-works\gail0' ; -- Node /1/1/2/ = OrgNode FROM HumanResources.EmployeeDemo WHERE LoginID = 'adventure-works\roberto0' ; -- Node /1/1/ = OrgNode FROM HumanResources.EmployeeDemo WHERE LoginID = 'adventure-works\wanida0' ; -- Node /2/3/ UPDATE HumanResources.EmployeeDemo SET OrgNode WHERE OrgNode ;
Geo-Datentypen CREATE TABLE SpatialTable ( id int IDENTITY (1,1), GeomCol1 geometry, GeomCol2 AS GeomCol1.STAsText() ); GO INSERT INTO SpatialTable (GeomCol1) VALUES (geometry::STGeomFromText('LINESTRING ( , , )', 0)); Ebenfalls.NET Implementierung
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.
ANSI Standard SQL 2006 "UPSERT" Also Insert oder Update (oder Delete) in einem Statement MERGE dbo.Personen USING PersonenImport ON Personen.ID=PersonenImport.ID WHEN MATCHED THEN UPDATE SET Personen.Nachname=PersonenImport.Nachname, Vorname=PersonenImport.Vorname WHEN 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 gelesen Daher bessere Performance
MERGE Dann Tabellen-Name USING Refrenztabelle oder SELECT-Statement ON Verknüpfung der beiden Informationen Wie bei JOIN Ausdrücken WHEN MATCHED THEN Auszuführende Befehle, wenn die in der ON- Klausel angegebenen Werte übereinstimmen WHEN NOT MATCHED THEN Auszuführende Befehle, wenn die in der ON- Klausel angegebenen Werte nicht übereinstimmen
WHEN SOURCE NOT MATCH Auszuführende Befehle, wenn die Werte, die in der ON-Klausel angegeben werden, im USING nicht vorkommen Mehrere MATCHED Anweisungen WHEN MATCHED AND Lager.Anzahl-Verkauf.Anzahl<=0 THEN DELETE WHEN MATCHED THEN UPDATE SET Lager.Anzahl=Lager.Anzahl-Verkauf.Anzahl
Sehr einfache aber wirkungsvolle Erweiterung BACKUP DATABASE Test TO DISK=C:\Test\Testfull.bak WITH COMPRESSION
Wir freuen uns auf Ihre Fragen: Technische Experten stehen Ihnen während der gesamten Veranstaltung in der Haupthalle zur Verfügung.