SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL...

118
Dirk Mertins, Jörg Neumann, Andreas Kühnel SQL Server 2008 R2 Das Programmierhandbuch

Transcript of SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL...

Page 1: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Dirk Mertins, Jörg Neumann, Andreas Kühnel

SQL Server 2008 R2Das Programmierhandbuch

9783836216937.book Seite 1 Freitag, 26. November 2010 10:32 10

Page 2: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Auf einen Blick

1 Installation und Aktualisierung von SQL Server 2008 R2 .......... 27

2 Datenbankgrundlagen ............................................................ 57

3 Logischer Datenbankentwurf .................................................. 83

4 Die Oberfläche von SQL Server ............................................... 99

5 Grundlegende Abfragetechniken ............................................. 163

6 Grundlagen der SQL-Programmierung ..................................... 221

7 Mehrtabellenabfragen ............................................................ 283

8 Erstellen und Ändern von Datenbanken .................................. 295

9 Erstellen von Tabellen ............................................................ 333

10 Verwendung der räumlichen und hierarchischen Datentypen ..................................................... 377

11 Daten verwalten .................................................................... 417

12 Benutzerverwaltung und Schemas ........................................... 439

13 Sichten ................................................................................. 469

14 Programmierung von gespeicherten Prozeduren ...................... 483

15 Programmierung von benutzerdefinierten Funktionen .............. 513

16 Programmierung und Einsatz von Triggern ............................... 529

17 Nachverfolgung von Datenänderungen ................................... 557

18 Ereignisbenachrichtigungen (Event Notifications) ..................... 579

19 Erstellung und Einsatz eines Cursors ........................................ 593

20 Indizes .................................................................................. 615

21 Transaktionen ....................................................................... 657

22 SQL Server als Laufzeitumgebung für .NET .............................. 693

23 .NET-Programmierung ........................................................... 707

24 T-SQL: Neuerungen und Verbesserungen der Kompatibilität .... 781

25 Einsatz von XML in der Datenbank ......................................... 825

26 Der Einsatz von Webservices in der Datenbank ........................ 873

27 Datenbankzugriff mit ADO.NET .............................................. 897

28 LINQ .................................................................................... 1095

9783836216937.book Seite 3 Freitag, 26. November 2010 10:32 10

Page 3: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

5

Inhalt

Vorwort ................................................................................................... 25

1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27

1.1 Überblick über die verfügbaren SQL-Server-2008-R2-Versionen .............................................. 27

1.2 Installationsvoraussetzungen .................................................. 291.3 Installation von SQL Server 2008 R2 ....................................... 301.4 Installation der SQL-Server-Beispieldatenbanken .................... 411.5 Aktualisierung auf SQL Server 2008 R2 ................................... 44

1.5.1 Der Upgrade Advisor ............................................... 441.5.2 Durchführung der Aktualisierung ............................. 50

2 Datenbankgrundlagen ......................................................... 57

2.1 Server und Client .................................................................... 572.2 Relationale Datenbanken ........................................................ 58

2.2.1 Struktureller Aufbau von Tabellen ............................ 612.2.2 Im Zusammenhang mit Tabellen

gebräuchliche Fachbegriffe ....................................... 632.2.3 Schlüssel .................................................................. 642.2.4 Beziehungsarten ....................................................... 73

2.3 Datenbankmanagementsystem ............................................... 772.4 Integritätsarten ....................................................................... 80

3 Logischer Datenbankentwurf .............................................. 83

3.1 Grundlagen des Datenbankentwurfs ....................................... 833.2 Normalisierungsregeln (Normalformen) .................................. 84

3.2.1 Erste Normalform ..................................................... 863.2.2 Zweite Normalform .................................................. 883.2.3 Dritte Normalform ................................................... 90

3.3 Normalisierung in der Praxis ................................................... 913.4 Denormalisierung ................................................................... 953.5 Entity-Relationship-Diagramme .............................................. 96

9783836216937.book Seite 5 Freitag, 26. November 2010 10:32 10

Page 4: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

6

4 Die Oberfläche von SQL Server ........................................... 99

4.1 Das SQL Server Management Studio ....................................... 994.1.1 Der Objekt-Explorer ................................................. 107

4.2 Das Bearbeiten von SQL-Anweisungen im Management Studio ............................................................... 1184.2.1 Der SQL-Abfrage-Editor ........................................... 1184.2.2 Der Ergebnisbereich ................................................. 1284.2.3 Der Abfrage-Designer .............................................. 131

4.3 SQL-Server-Dokumentation und Hilfen zur Programmierung ... 1344.3.1 Die SQL-Server-Onlinedokumentation ..................... 1344.3.2 Dynamische Hilfe ..................................................... 1364.3.3 SQL-Server-IntelliSense ............................................ 1374.3.4 Der Vorlagen-Explorer ............................................. 1384.3.5 Die Skript-Generierung ............................................ 1424.3.6 Die Verwendung von Lesezeichen ............................ 143

4.4 Überblick über die SQL-Server-Dienste ................................... 1464.5 Das Dienstprogramm sqlcmd .................................................. 1474.6 SQL-Server-Integration in die Windows PowerShell ................ 150

4.6.1 Allgemeiner Aufruf der PowerShell .......................... 1514.6.2 Aufruf der PowerShell mit

SQL-Server-2008-Integration ................................... 1524.6.3 Der SQL-Server-Anbieter ......................................... 1554.6.4 Die SQL-Server-Cmdlets .......................................... 158

4.7 Der SQL-Server-Aktivitätsmonitor ........................................... 1594.8 Berichte .................................................................................. 161

5 Grundlegende Abfragetechniken ........................................ 163

5.1 Einführung in SQL .................................................................. 1635.2 SQL-Grundlagen ..................................................................... 164

5.2.1 Formatierung ........................................................... 1655.2.2 Bezeichner ............................................................... 1655.2.3 Systemdatentypen ................................................... 1665.2.4 Neue Datentypen in SQL Server 2008 ...................... 1705.2.5 Informationen zu den Datentypen einer Tabelle........ 1715.2.6 Verwendung und Kennzeichnung von Zahlen,

Zeichenketten und Datums-/Uhrzeitwerten ............. 1725.2.7 Kommentare ............................................................ 173

5.3 Grundlegende Operatoren ...................................................... 1735.3.1 Arithmetische Operatoren ........................................ 174

9783836216937.book Seite 6 Freitag, 26. November 2010 10:32 10

Page 5: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

7

5.3.2 Zeichenkettenoperator ............................................. 1745.3.3 Vergleichsoperatoren ............................................... 1745.3.4 Logische Operatoren ................................................ 175

5.4 Einfache Abfragen ................................................................... 1775.4.1 USE .......................................................................... 1785.4.2 SELECT…FROM ....................................................... 1785.4.3 Berechnete Spalten .................................................. 1815.4.4 DISTINCT ................................................................. 1835.4.5 ORDER BY-Klausel ................................................... 1845.4.6 WHERE-Klausel ....................................................... 187

5.5 Auswahloperatoren ................................................................ 1925.5.1 IS (NOT) NULL-Auswahloperator ............................. 1925.5.2 BETWEEN-Auswahloperator .................................... 1945.5.3 IN-Auswahloperator ................................................ 1955.5.4 LIKE-Auswahloperator ............................................. 196

5.6 Aggregatfunktionen ................................................................ 2005.7 Unterabfragen ........................................................................ 2035.8 Zusammenfassung, Gruppierung und

Beschränkung von Abfrageergebnissen ................................... 2065.8.1 Verknüpfung mehrerer Abfrageergebnisse durch

UNION .................................................................... 2065.8.2 Beschränkung des Abfrageergebnisses mit TOP (n) ... 2085.8.3 GROUP BY-Klausel .................................................. 211

5.9 Ausgaben mit PRINT und SELECT ........................................... 218

6 Grundlagen der SQL-Programmierung ............................... 221

6.1 Das Stapeltrennzeichen GO .................................................... 2216.2 (Lokale) Variablen ................................................................... 223

6.2.1 Variablendeklaration ................................................ 2236.2.2 Wertezuweisung an eine Variable ............................ 2246.2.3 Kombinierte Deklaration und Wertezuweisung ......... 2256.2.4 Inkrement und Dekrement ....................................... 2256.2.5 Gültigkeitsbereich von Variablen .............................. 2266.2.6 Verwendung von Variablen ...................................... 2276.2.7 Lokale und globale Variablen in SQL Server ............. 2276.2.8 Wertezuweisung an Variablen durch Abfragen .......... 228

6.3 Ablaufsteuerung ..................................................................... 2316.3.1 Blöcke ...................................................................... 2316.3.2 IF…ELSE .................................................................. 2326.3.3 IF EXISTS ................................................................. 235

9783836216937.book Seite 7 Freitag, 26. November 2010 10:32 10

Page 6: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

8

6.3.4 WHILE-Schleife ........................................................ 2366.3.5 RETURN ................................................................... 2396.3.6 GOTO ...................................................................... 2396.3.7 WAITFOR ................................................................ 240

6.4 Fallunterscheidungen .............................................................. 2416.4.1 Die CASE-Funktion .................................................. 2416.4.2 Die ISNULL-Funktion ............................................... 247

6.5 Funktionen ............................................................................. 2486.5.1 Konfigurationsfunktionen ......................................... 2486.5.2 Datums-/Uhrzeitfunktionen ..................................... 2486.5.3 Zeichenfolgenfunktionen .......................................... 2526.5.4 Mathematische Funktionen ...................................... 2556.5.5 Funktionen zur Statusabfrage ................................... 2566.5.6 Konvertierungsfunktionen ........................................ 257

6.6 Dynamische SQL-Anweisungen .............................................. 2606.6.1 Ausführung dynamischer Anweisungen mit

EXECUTE ................................................................. 2616.6.2 Ausführung dynamischer Anweisungen mit

sp_executesql .......................................................... 2616.7 Fehler in SQL Server und ihre Behandlung .............................. 262

6.7.1 Struktur von Fehlermeldungen in SQL Server ........... 2626.8 Fehlerbehandlung ................................................................... 265

6.8.1 Fehlerbehandlung mit TRY und CATCH .................... 2656.8.2 Funktionen zur Fehlerbehandlung ............................ 2696.8.3 Gegenüberstellung von TRY…CATCH und

@@ERROR ............................................................. 2716.8.4 Abbruchverursachende Fehler .................................. 2746.8.5 Erstellung benutzerdefinierter Fehlermeldungen ....... 2746.8.6 Programmgesteuerte Fehlerauslösung ...................... 2766.8.7 Fehlerauslösung unter Verwendung von

Parametern .............................................................. 2786.8.8 Löschen von benutzerdefinierten

Fehlermeldungen ..................................................... 281

7 Mehrtabellenabfragen ......................................................... 283

7.1 Tabellen verknüpfen (JOIN-Anweisung) .................................. 2837.1.1 Einbindung zweier Tabellen in die

SELECT-Anweisung .................................................. 2837.1.2 Innere Verknüpfung (INNER JOIN) ........................... 285

9783836216937.book Seite 8 Freitag, 26. November 2010 10:32 10

Page 7: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

9

7.1.3 Äußere Verknüpfung (OUTER JOIN) ......................... 2887.1.4 Mehrfache JOIN-Anweisungen ................................ 2897.1.5 Kreuzverknüpfung (CROSS JOIN) ............................. 2907.1.6 Umkehrung der Funktionsweise des INNER JOINs .... 291

7.2 Abfragen unter Verwendung mehrerer Server ......................... 2937.2.1 Vollgekennzeichnete (vollqualifizierte) Namen .......... 2937.2.2 Einrichtung eines Verbindungsservers ...................... 294

8 Erstellen und Ändern von Datenbanken ............................. 295

8.1 Erstellen einer einfachen Datenbank ....................................... 2958.2 Einfluss der model-Datenbank auf das

Erstellen neuer Datenbanken .................................................. 3028.3 Löschen von Datenbanken ...................................................... 3048.4 Erstellen einer Datenbank mit mehreren Dateien .................... 3048.5 Nachträgliche Änderungen an Datenbankdateien ................... 307

8.5.1 Dateien hinzufügen .................................................. 3078.5.2 Dateieigenschaften ändern ....................................... 3088.5.3 Dateien löschen ....................................................... 309

8.6 Erstellen einer Datenbank mit mehreren Dateigruppen ........... 3108.7 Datenbanken verkleinern ........................................................ 3138.8 Datenbankdateien verkleinern ................................................ 3148.9 Gespeicherte Systemprozeduren (Stored Procedures) zur

Datenbankverwaltung ............................................................. 3168.10 Datenbank-Momentaufnahmen .............................................. 316

8.10.1 Erstellen einer Datenbank-Momentaufnahme ........... 3168.10.2 Interne Verwaltung einer Momentaufnahme............. 3198.10.3 Erstellen eines Snapshots für eine Datenbank

mit mehreren Datendateien ..................................... 3238.10.4 Weitere Informationen zu Momentaufnahmen.......... 3248.10.5 Datenbank-Momentaufnahme löschen .................... 325

8.11 RAID-Systeme ........................................................................ 3258.11.1 RAID 0 ..................................................................... 3268.11.2 RAID 1 ..................................................................... 3278.11.3 RAID 3 ..................................................................... 3278.11.4 RAID 5 ..................................................................... 329

8.12 Transparente Datenverschlüsselung ........................................ 3298.12.1 Die Struktur der transparenten Daten-

verschlüsselung in SQL Server 2008 ......................... 330

9783836216937.book Seite 9 Freitag, 26. November 2010 10:32 10

Page 8: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

10

9 Erstellen von Tabellen ......................................................... 333

9.1 Die grundlegende Syntax zur Tabellenerstellung ..................... 3339.1.1 Definition einer Identitätsspalte ............................... 3349.1.2 SPARSE-Eigenschaft einer Tabellenspalte ................. 3369.1.3 Festlegung des physischen Speicherorts ................... 3399.1.4 Verwendung von FILESTREAM zur Speicherung

von Daten im Dateisystem ....................................... 3409.2 Tabellen ändern ...................................................................... 348

9.2.1 Spalten hinzufügen (ADD) ........................................ 3489.2.2 Spalten ändern (ALTER COLUMN) ........................... 3499.2.3 Spalten löschen (DROP COLUMN) ........................... 350

9.3 Löschen von Tabellen ............................................................. 3519.4 Implementierung der Datenintegrität ...................................... 351

9.4.1 Die Einschränkungsarten im Überblick ..................... 3519.4.2 Definition von Einschränkungen ............................... 3529.4.3 Eigenschaften von Constraints .................................. 3539.4.4 Lösch- und Änderungsweitergabe ............................ 357

9.5 Anwendungsbeispiel zu Einschränkungen ............................... 3589.6 Nachträgliche Definition von Einschränkungen ....................... 3619.7 Verwaltung von Einschränkungen ........................................... 361

9.7.1 Deaktivierung und Aktivierung von Einschränkungen ...................................................... 362

9.7.2 Löschen einer Einschränkung ................................... 3639.8 Temporäre Tabellen ................................................................ 363

9.8.1 Lokale temporäre Tabellen ....................................... 3639.8.2 Globale temporäre Tabellen ..................................... 364

9.9 Partitionierung von Tabellen ................................................... 3659.9.1 Erstellung einer Partitionsfunktion ........................... 3679.9.2 Erstellung eines Partitionsschemas ........................... 3699.9.3 Erstellung einer partitionierten Tabelle ..................... 370

10 Verwendung der räumlichen und hierarchischen Datentypen ................................................. 377

10.1 Räumliche Datentypen ........................................................... 37710.1.1 Der geometry-Datentyp ........................................... 37810.1.2 Der geography-Datentyp ......................................... 37810.1.3 Koordinatenübergabe an räumliche Datentypen ....... 37910.1.4 Das Klassenmodell räumlicher Datentypen ............... 379

9783836216937.book Seite 10 Freitag, 26. November 2010 10:32 10

Page 9: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

11

10.1.5 Grundlegende Techniken zur Verwendung räumlicher Datentypen ............................................ 385

10.1.6 Allgemeine Verwendung räumlicher Datentypen....... 38810.1.7 Methoden zur Verarbeitung räumlicher Daten .......... 38910.1.8 Beispiel für die Verwendung des

geography-Datentyps ............................................... 39910.1.9 Indizierung von Geodaten ........................................ 403

10.2 Der hierarchische Datentyp .................................................... 40810.2.1 Die Methoden des hierarchischen Datentyps ............ 410

11 Daten verwalten .................................................................. 417

11.1 Grundlegende Befehle zur Datensatzmanipulation .................. 41711.1.1 Einfügen von Datensätzen mit INSERT ..................... 41711.1.2 Daten aktualisieren mit UPDATE .............................. 42211.1.3 Löschen von Daten mit DELETE ............................... 425

11.2 Verwendung des Zeilenkonstruktors ....................................... 42611.3 Kombinierte Auswahl-/Einfügeanweisungen ........................... 427

11.3.1 INSERT…SELECT ...................................................... 42711.3.2 SELECT…INTO ......................................................... 428

11.4 Die MERGE-Anweisung .......................................................... 42911.4.1 Grundlagen der MERGE-Anweisung ......................... 42911.4.2 Filterung von Datensätzen ....................................... 43311.4.3 Die OUTPUT-Klausel ................................................ 434

11.5 Massenkopierprogramme ....................................................... 43511.5.1 BULK INSERT ........................................................... 43511.5.2 bcp .......................................................................... 437

12 Benutzerverwaltung und Schemas ...................................... 439

12.1 Authentifizierung am Server .................................................... 44012.1.1 Einrichten eines Log-ins mit

Windows-Authentifizierung ..................................... 44112.1.2 Einrichten eines Log-ins mit

SQL-Server-Authentifizierung ................................... 44212.2 Datenbankzugriff erteilen ....................................................... 44412.3 Zusammenfassung von Benutzern zu Rollen ............................ 447

12.3.1 Serverrollen ............................................................. 44812.3.2 Feste Datenbankrollen ............................................. 44912.3.3 Einen Benutzer zu einer Rolle hinzufügen ................. 450

12.4 Rechtevergabe an Benutzer und Rollen ................................... 451

9783836216937.book Seite 11 Freitag, 26. November 2010 10:32 10

Page 10: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

12

12.4.1 Objektberechtigungen ............................................. 45112.4.2 Anweisungsberechtigungen ..................................... 45112.4.3 SQL-Anweisungen zur Rechtevergabe ...................... 454

12.5 Deaktivierung und Aktivierung von Log-ins und Datenbankbenutzern ........................................... 458

12.6 Vordefinierte Konten auf Server- und Datenbankebene .......... 46012.6.1 Das Log-in »system administrator« (»sa«) .................. 46012.6.2 Der Datenbankbenutzer »guest« .............................. 461

12.7 Schema ................................................................................... 46312.7.1 Objektverwaltung bis SQL Server 2000 .................... 46312.7.2 Objektverwaltung seit SQL Server 2005 ................... 46512.7.3 Erstellen eines Schemas ........................................... 46512.7.4 Namensauflösung bei fehlender Schema-Angabe ...... 467

13 Sichten ................................................................................. 469

13.1 Einsatz von Sichten ................................................................. 47013.2 Verwalten von Sichten ............................................................ 472

13.2.1 Erstellen einer Sicht ................................................. 47213.2.2 Ändern einer Sicht ................................................... 47313.2.3 Löschen einer Sicht .................................................. 474

13.3 Datenmanipulationsanweisungen auf eine Sicht ...................... 47413.3.1 DML-Anweisungen auf eine Sicht ohne

WHERE-Klausel ....................................................... 47513.3.2 DML-Anweisungen auf eine Sicht mit

WHERE-Klausel ....................................................... 47613.4 Systemsichten von SQL Server ................................................ 480

13.4.1 Informationsschemasichten ...................................... 48013.4.2 Systemsichten im Schema sys ................................... 481

14 Programmierung von gespeicherten Prozeduren ................ 483

14.1 Überblick über die Verwendung von gespeicherten Prozeduren in SQL Server ....................................................... 483

14.2 Erstellung und Aufruf von gespeicherten Prozeduren .............. 48714.2.1 Grundlegende Syntax zu Erstellung einer

gespeicherten Prozedur ............................................ 48714.2.2 Verwendung von Eingabeparametern ....................... 48914.2.3 Die verschiedenen Arten der Parameterübergabe ..... 49214.2.4 Verweisbezogene Übergabe ..................................... 49414.2.5 Verwendung von Ausgabeparametern ...................... 496

9783836216937.book Seite 12 Freitag, 26. November 2010 10:32 10

Page 11: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

13

14.2.6 Verwendung eines Rückgabestatuscodes .................. 50014.3 Tabellenübergabe an eine gespeicherte Prozedur .................... 50414.4 Optionen von gespeicherten Prozeduren ................................ 507

14.4.1 ENCRYPTION .......................................................... 50714.4.2 RECOMPILE ............................................................. 50914.4.3 EXECUTE AS ............................................................ 511

15 Programmierung von benutzerdefinierten Funktionen ...... 513

15.1 Überblick über benutzerdefinierte Funktionen ........................ 51315.2 Skalare Funktionen (Skalarwertfunktionen) ............................. 51415.3 Inlinefunktionen (Tabellenwertfunktionen) ............................. 51815.4 Tabellenwertfunktion mit mehreren Anweisungen .................. 52115.5 Ändern und Löschen von benutzerdefinierten Funktionen ...... 524

15.5.1 Ändern einer benutzerdefinierten Funktion .............. 52415.5.2 Löschen einer benutzerdefinierten Funktion ............. 524

15.6 Verwendung des Datentyps TABLE als lokale Variable ............ 52415.6.1 Verwendung von Einschränkungen .......................... 526

16 Programmierung und Einsatz von Triggern ........................ 529

16.1 DML-Trigger ........................................................................... 52916.1.1 Programmierung von DML-Triggern ......................... 531

16.2 DDL-Trigger ........................................................................... 55116.2.1 DDL-Trigger mit Serverbereich ................................. 55116.2.2 DDL-Trigger mit Datenbankbereich ......................... 55416.2.3 Informationen zur Auslösung von DDL-Triggern........ 556

17 Nachverfolgung von Datenänderungen .............................. 557

17.1 Die neuen Möglichkeiten zur Nachverfolgung von Datenänderungen ............................................................ 557

17.2 Change Data Capture .............................................................. 55817.2.1 Konfiguration der Datenbank zur Verwendung

von Change Data Capture ........................................ 55917.2.2 Konfiguration von Change Data Capture zur

Überwachung einer Tabelle ...................................... 56017.2.3 Die Aufzeichnungsinstanz ........................................ 56317.2.4 Verwendung der Abfragefunktionen ........................ 56517.2.5 Zyklische Abfragen ................................................... 57017.2.6 Abfragen auf einen Zeitbereich ................................ 570

9783836216937.book Seite 13 Freitag, 26. November 2010 10:32 10

Page 12: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

14

17.2.7 Erstellung von Datetime-Wrapperfunktionen für die Abfrage auf Zeitbereiche .................................... 571

17.3 Änderungsnachverfolgung ...................................................... 572

18 Ereignisbenachrichtigungen (Event Notifications) ............. 579

18.1 Konfiguration einer Datenbank zur Nutzung des Service Brokers ................................................... 580

18.2 Konfiguration des Zieldienstes ................................................ 58118.2.1 Einrichtung der Warteschlange ................................ 58118.2.2 Erstellung des Dienstes ............................................ 58118.2.3 Einrichtung der Route .............................................. 582

18.3 Erstellen einer Ereignisbenachrichtigung ................................. 58318.4 Auslösen und Empfangen einer Ereignisbenachrichtigung ....... 58418.5 Service-Broker-Aktivierung ..................................................... 586

18.5.1 Erstellung der Aktivierungsprozedur ......................... 58618.5.2 Modifizierung der Warteschlange zur

Verwendung der internen Aktivierung ..................... 58918.6 Löschen der erstellten Objekte ............................................... 590

19 Erstellung und Einsatz eines Cursors .................................. 593

19.1 Funktionsweise eines Cursors ................................................. 59319.2 Erstellung eines Cursors .......................................................... 59519.3 Öffnen eines Cursors ............................................................... 59719.4 Das Abrufen von Datensätzen aus einem Cursor ..................... 598

19.4.1 Aufruf einer FETCH-Anweisung ohne Verwendung von Variablen ...................................... 598

19.4.2 Aufruf einer FETCH-Anweisung unter Verwendung von Variablen ...................................... 599

19.4.3 Die Verwendung von Positionsangaben zum Abruf von Daten aus einem Cursor ........................... 599

19.5 Schließen und Löschen eines Cursors ...................................... 60619.6 Schleifenprogrammierung zum automatischen

Durchlaufen eines Cursors ...................................................... 60719.7 Daten in der Cursorauswahl aktualisieren und löschen ............ 613

19.7.1 Aktualisieren ............................................................ 61319.7.2 Löschen ................................................................... 613

9783836216937.book Seite 14 Freitag, 26. November 2010 10:32 10

Page 13: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

15

20 Indizes ................................................................................. 615

20.1 Der nicht gruppierte Index auf einem Heap ............................ 61620.1.1 Vorgehensweise beim Durchlaufen eines Index......... 619

20.2 Der gruppierte Index .............................................................. 62020.3 Der nicht gruppierte Index auf einem gruppierten Index ......... 62320.4 Erstellung von Indizes ............................................................. 626

20.4.1 Manuelle Erstellung eines Index ............................... 62620.4.2 Automatische Erstellung von Indizes ........................ 629

20.5 Verwaltung von Indizes .......................................................... 63020.5.1 Fragmentierung ....................................................... 63020.5.2 Neuerstellung von Indizes ........................................ 63320.5.3 Löschen eines Index ................................................. 634

20.6 Statistiken .............................................................................. 63420.6.1 Löschen einer Statistik ............................................. 63820.6.2 Aktualisieren einer Statistik ...................................... 63820.6.3 Informationen zu Statistiken abrufen ........................ 639

20.7 Planung des Einsatzes von Indizes ........................................... 64020.7.1 Verwenden des Datenbankmodul-

Optimierungsratgebers ............................................. 64120.8 Weitere Optimierungsmöglichkeiten mit Hilfe von Indizes ...... 649

20.8.1 Indizes mit eingeschlossenen Spalten ....................... 64920.8.2 Gefilterte Indizes ...................................................... 65320.8.3 Indizierte Sichten ..................................................... 65420.8.4 Partitionierte Indizes ................................................ 656

21 Transaktionen ...................................................................... 657

21.1 Einführung in Transaktionen ................................................... 65721.2 ACID ...................................................................................... 65921.3 Interne Transaktionsverarbeitung ............................................ 66221.4 Verhalten bei Systemfehlern ................................................... 66421.5 Programmierung expliziter Transaktionen ............................... 66521.6 Implizite Transaktionen .......................................................... 66921.7 Wiederherstellung beim Systemstart (Recovery) ...................... 67121.8 Sperren ................................................................................... 673

21.8.1 Sperrebenen ............................................................ 67421.8.2 Gemeinsame Sperren (Shared Locks) ........................ 67421.8.3 Exklusive Sperren (Exclusive Locks) .......................... 675

21.9 Isolationsstufen auf Verbindungsebene ................................... 67621.9.1 READ UNCOMMITTED ............................................ 677

9783836216937.book Seite 15 Freitag, 26. November 2010 10:32 10

Page 14: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

16

21.9.2 READ COMMITTED ................................................. 67921.9.3 REPEATABLE READ ................................................. 68121.9.4 SERIALIZABLE .......................................................... 68221.9.5 Zusammenfassung der Eigenschaften von

Sperrstufen .............................................................. 68421.9.6 Setzen eines Timeout-Wertes ................................... 685

21.10 Sperrhinweise auf Tabellenebene ............................................ 68621.11 Informationen zu Sperren ....................................................... 68721.12 Deadlocks ............................................................................... 687

21.12.1 Vermeidung von Deadlocks ..................................... 68921.12.2 Beispiel zur Erzeugung eines Deadlocks ................... 68921.12.3 Erfassung von Deadlocks im Profiler ......................... 690

22 SQL Server als Laufzeitumgebung für .NET ........................ 693

22.1 Die Programmiermodelle im Vergleich .................................... 69322.1.1 T-SQL ...................................................................... 69322.1.2 Erweiterte gespeicherte Prozeduren ......................... 69422.1.3 Einbindung von COM-Objekten ............................... 69522.1.4 Einsatz von Managed Code ...................................... 695

22.2 Die CLR-Integration im Detail ................................................. 69722.2.1 CLR-Hosting ............................................................ 69822.2.2 Thread- und Speichermanagement ........................... 69922.2.3 I/O-Zugriffe .............................................................. 69922.2.4 Assemblies Loading .................................................. 69922.2.5 Application Domain Management ............................ 700

22.3 Der Hosting Layer ................................................................... 70122.4 Verwaltung von Assemblies .................................................... 70422.5 Sicherheitsstufen .................................................................... 705

23 .NET-Programmierung ........................................................ 707

23.1 CLR-Unterstützung aktivieren ................................................. 70723.1.1 CLR-Unterstützung per Skript aktivieren .................. 709

23.2 CLR-Prozeduren und Funktionen ............................................ 70923.2.1 CLR vs. T-SQL .......................................................... 70923.2.2 Prozeduren vs. Funktionen ....................................... 70923.2.3 Veröffentlichung von Methoden .............................. 71023.2.4 Implementierungsregeln .......................................... 71123.2.5 Parameter und Rückgabewerte ................................ 71223.2.6 Sicherheitsaspekte ................................................... 713

9783836216937.book Seite 16 Freitag, 26. November 2010 10:32 10

Page 15: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

17

23.3 Gespeicherte Prozeduren ........................................................ 71423.3.1 Eine gespeicherte Prozedur mit

Visual Studio erstellen .............................................. 71423.3.2 Das SqlProcedure-Attribut ....................................... 71823.3.3 Parameter und Rückgabe ......................................... 71823.3.4 Temporäre Prozeduren ............................................. 71923.3.5 Assembly bereitstellen ............................................. 71923.3.6 Assembly ohne Visual Studio kompilieren ................ 72023.3.7 Installation mit sqlcmd durchführen ......................... 72123.3.8 Prozeduren mit Visual Studio debuggen ................... 721

23.4 Benutzerdefinierte Funktionen ................................................ 72223.4.1 Einschränkungen ...................................................... 72223.4.2 Das SqlFunction-Attribut ......................................... 72323.4.3 Funktionen bereitstellen .......................................... 72423.4.4 Skalare Funktionen .................................................. 72523.4.5 Eine Skalarfunktion erstellen .................................... 72523.4.6 Tabellenwertige Funktionen ..................................... 72623.4.7 Unterschiede zwischen T-SQL- und

CLR-Funktionen ....................................................... 72623.4.8 Eine tabellenwertige Funktion erstellen .................... 727

23.5 Serverseitiger Datenzugriff mit ADO.NET ................................ 73023.5.1 Der Kontext ............................................................. 73123.5.2 Verbindung zur Datenbank herstellen ...................... 732

23.6 Pipes ...................................................................................... 73223.6.1 Die Send-Methode .................................................. 73323.6.2 Die ExecuteAndSend()-Methode .............................. 73523.6.3 Ausgabestrom steuern ............................................. 736

23.7 Impersonalisierung ................................................................. 74023.8 Benutzerdefinierte Typen ........................................................ 744

23.8.1 Das SqlUserDefinedType-Attribut ............................ 74523.8.2 Einen benutzerdefinierten Datentyp erstellen ........... 74623.8.3 Das INullable-Interface ............................................ 74723.8.4 Die ToString()-Methode ........................................... 74723.8.5 Die Parse()-Methode ............................................... 74823.8.6 Erstellung des CalendarWeek-Datentyps .................. 74823.8.7 Den CalendarWeek-Typ installieren ......................... 75023.8.8 Den CalendarWeek-Typ testen ................................. 75123.8.9 Validierungen .......................................................... 75223.8.10 Methoden implementieren ...................................... 75223.8.11 Serialisierung ........................................................... 755

9783836216937.book Seite 17 Freitag, 26. November 2010 10:32 10

Page 16: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

18

23.8.12 Typen als Klassen abbilden ....................................... 75923.8.13 Zugriff vom Client .................................................... 759

23.9 Benutzerdefinierte Aggregate ................................................. 76123.9.1 Das SqlUserDefinedAggregate-Attribut .................... 76123.9.2 Die Init-Methode ..................................................... 76223.9.3 Die Accumulate-Methode ........................................ 76223.9.4 Die Merge-Methode ................................................ 76323.9.5 Die Terminate-Methode .......................................... 76323.9.6 Ein Beispielaggregat ................................................. 76323.9.7 Das MaxRange-Aggregat implementieren ................ 76523.9.8 Hinweise zur Implementierung ................................. 76823.9.9 Aggregate installieren .............................................. 768

23.10 Benutzerdefinierte Trigger ...................................................... 76823.10.1 Das SqlTrigger-Attribut ............................................ 76923.10.2 Die TriggerContext-Klasse ........................................ 77023.10.3 Trigger implementieren ............................................ 77123.10.4 Hinweise zur Implementierung ................................. 77523.10.5 Trigger installieren ................................................... 775

23.11 Administration und Monitoring von CLR-Objekten ................. 77623.11.1 Informationen über die installierten

Assemblies ermitteln ................................................ 77623.11.2 Laufzeitinformationen von CLR-Objekten ermitteln... 777

24 T-SQL: Neuerungen und Verbesserungen der Kompatibilität .............................................................. 781

24.1 CROSS APPLY und OUTER APPLY .......................................... 78324.2 Kreuztabellen mit PIVOT erstellen .......................................... 785

24.2.1 Entscheidungstabellen mit PIVOT erstellen .............. 78924.2.2 Kreuztabellen in flache Listen transformieren ............ 791

24.3 Common Table Expressions .................................................... 79224.3.1 Verarbeitung von hierarchischen Daten .................... 79724.3.2 Maximale Rekursionsstufe einstellen ........................ 800

24.4 Fehlerbehandlung ................................................................... 80124.4.1 Informationen über den Fehler ermitteln ................. 80224.4.2 Eigene Fehler auslösen ............................................. 80624.4.3 Verschachtelte Fehlerbehandlung ............................ 807

24.5 Ranking- und Windowing-Funktionen .................................... 80824.5.1 Ergebnisse mit RANK() gewichten ............................ 80824.5.2 Ranking ohne Lücken mit DENSE_RANK() ................ 809

9783836216937.book Seite 18 Freitag, 26. November 2010 10:32 10

Page 17: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

19

24.5.3 Gruppierte Ranglisten mit Windowing ..................... 81024.5.4 Zeilen mit ROW_NUMBER() nummerieren ............... 81124.5.5 Paging mit ROW_NUMBER() ................................... 81224.5.6 Daten mit NTILE() partitionieren .............................. 814

24.6 Die OUTPUT-Klausel .............................................................. 81524.7 Die TABLESAMPLE-Klausel ..................................................... 81724.8 EXCEPT- und INTERSECT-Statement ....................................... 81924.9 Tabellenwertparameter ........................................................... 820

24.9.1 Tabellenwertparameter definieren ............................ 82124.9.2 Tabellenwertparameter verwenden .......................... 82124.9.3 Prozeduren mit Tabellenwertparametern aufrufen..... 82224.9.4 Aufruf vom Client mit ADO.NET .............................. 82224.9.5 Limitationen ............................................................ 824

25 Einsatz von XML in der Datenbank .................................... 825

25.1 Warum XML? ......................................................................... 82625.2 HTML und XML ...................................................................... 826

25.2.1 Auszeichnungssprachen ........................................... 82725.2.2 Auszeichnungen ....................................................... 828

25.3 XML-Fähigkeiten von SQL Server ............................................ 83125.4 Der XML-Datentyp ................................................................. 831

25.4.1 Vor- und Nachteile der XML-Datenspeicherung........ 83225.4.2 XML-Felder anlegen ................................................ 83425.4.3 XML-Felder mit einem Schema verknüpfen .............. 836

25.5 Auf gespeicherte XML-Daten zugreifen ................................... 83825.5.1 Eine kurze Einführung in XPath ................................ 83825.5.2 XQuery als Abfragesprache ...................................... 84025.5.3 Die Methoden des XML-Datentyps .......................... 84125.5.4 Indizierung von XML-Feldern ................................... 846

25.6 Darstellung von Abfrageergebnissen im XML-Format .............. 84925.6.1 Der RAW-Modus ..................................................... 85125.6.2 Allgemeine Optionen der FOR XML-Klausel ............. 85425.6.3 Der AUTO-Modus .................................................... 85625.6.4 Der PATH-Modus .................................................... 85825.6.5 Der EXPLICIT-Modus ............................................... 860

25.7 XML-Schema ermitteln ........................................................... 86725.8 XML-Daten in einem relationalen Modell speichern ............... 868

25.8.1 Ein XML-Dokument in eine Tabelle importieren ....... 869

9783836216937.book Seite 19 Freitag, 26. November 2010 10:32 10

Page 18: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

20

26 Der Einsatz von Webservices in der Datenbank ................. 873

26.1 Warum Webservices? ............................................................. 87426.2 SQL Server als Webservice-Backend betreiben ........................ 87526.3 Endpoints ............................................................................... 87626.4 Einen Endpoint erstellen ......................................................... 877

26.4.1 Die Status eines Endpoints ....................................... 87826.4.2 Adresse des Endpoints bestimmen ........................... 87926.4.3 Ports konfigurieren .................................................. 87926.4.4 Methode definieren ................................................. 87926.4.5 Sicherheitskonfiguration ........................................... 88126.4.6 Authentifizierungstyp festlegen ................................ 88126.4.7 Authentifizierungsverfahren festlegen ...................... 88226.4.8 Berechtigungsverwaltung ......................................... 88526.4.9 HTTP-Kompression aktivieren .................................. 885

26.5 WSDL ermitteln ...................................................................... 88526.5.1 In die WSDL-Generierung eingreifen ........................ 88526.5.2 WSDL vom Client abrufen ........................................ 886

26.6 Zugriff vom Client ................................................................... 88626.7 Session- und State-Management ............................................ 889

26.7.1 Sessions aktivieren ................................................... 89126.7.2 Session-Steuerung durch den Client ......................... 891

26.8 Batch-Abfragen ....................................................................... 89326.9 Endpoints verwalten ............................................................... 895

27 Datenbankzugriff mit ADO.NET ......................................... 897

27.1 Einleitung ............................................................................... 89727.1.1 Installation von Visual C# 2008 Express Edition ........ 89927.1.2 Projekte anlegen und speichern ............................... 90027.1.3 Die Beispieldatenbank ............................................. 901

27.2 Die Datenprovider .................................................................. 90127.3 Die Verbindung zu einer Datenbank herstellen ....................... 903

27.3.1 Das Connection-Objekt ............................................ 90327.3.2 Die Verbindungszeichenfolge ................................... 90427.3.3 Die Verbindung mit einer bestimmten

SQL-Server-Instanz aufbauen ................................... 90527.3.4 Öffnen und Schließen einer Verbindung ................... 90927.3.5 Das Verbindungspooling .......................................... 91327.3.6 Die Ereignisse eines Connection-Objekts .................. 918

9783836216937.book Seite 20 Freitag, 26. November 2010 10:32 10

Page 19: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

21

27.3.7 Verbindungszeichenfolgen aus einer Konfigurationsdatei abrufen ..................................... 920

27.3.8 Die Klasse SqlConnection im Überblick .................... 92227.3.9 Verbindungen mit dem OleDb-Datenprovider .......... 924

27.4 Die Datenbankabfrage ............................................................ 92627.4.1 Das SqlCommand-Objekt ......................................... 92727.4.2 Abfragen, die genau ein Ergebnis liefern .................. 932

27.5 Das SqlDataReader-Objekt ..................................................... 93327.5.1 Datensätze einlesen ................................................. 93427.5.2 Schließen des SqlDataReader-Objekts ...................... 93727.5.3 MARS (Multiple Active Resultsets) ........................... 93727.5.4 Batch-Abfragen mit NextResult durchlaufen ............. 93927.5.5 Das Schema eines SqlDataReader-Objekts

untersuchen ............................................................. 94027.6 Parametrisierte Abfragen ........................................................ 942

27.6.1 Parametrisierte Abfragen mit dem SqlClient-Datenprovider .......................................... 943

27.6.2 Die Klasse SqlParameter ........................................... 94527.6.3 Asynchrone Abfragen ............................................... 94627.6.4 Gespeicherte Prozeduren (Stored Procedures)........... 950

27.7 Der SqlDataAdapter ............................................................... 95827.7.1 Was ist ein DataAdapter? ......................................... 95827.7.2 Die Konstruktoren der Klasse DataAdapter .............. 96027.7.3 Die Eigenschaft SelectCommand .............................. 96127.7.4 Den lokalen Datenspeicher mit Fill füllen ................. 96127.7.5 Tabellenzuordnung mit TableMappings .................... 96527.7.6 Das Ereignis FillError des SqlDataAdapters ............... 970

27.8 Daten im lokalen Speicher – das DataSet ................................ 97127.8.1 Verwenden des DataSet-Objekts .............................. 97227.8.2 Dateninformationen in eine XML-Datei schreiben .... 97627.8.3 Dem DataSet Schemainformationen übergeben ........ 97727.8.4 Schemainformationen bereitstellen .......................... 97927.8.5 Eigenschaften einer DataColumn, die

der Gültigkeitsprüfung dienen .................................. 97927.8.6 Die Constraints-Klassen einer DataTable .................. 98027.8.7 Das Schema mit Programmcode erzeugen ................ 98127.8.8 Schemainformationen mit SqlDataAdapter abrufen ... 98327.8.9 Änderungen in einer DataTable vornehmen ............. 98627.8.10 Was bei einer Änderung einer Datenzeile passiert .... 99227.8.11 Manuelles Steuern der Eigenschaft DataRowState .... 996

9783836216937.book Seite 21 Freitag, 26. November 2010 10:32 10

Page 20: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

22

27.9 Mit mehreren Tabellen arbeiten ............................................. 99727.9.1 Der Weg über JOIN-Abfragen .................................. 99727.9.2 Mehrere Tabellen in einem DataSet ......................... 99927.9.3 Eine DataRelation erzeugen ..................................... 99927.9.4 DataRelations und Einschränkungen ........................ 100027.9.5 In Beziehung stehende Daten suchen ....................... 100227.9.6 Ergänzung zum Speichern von Schema-

informationen in einer XML-Schemadatei ................ 100527.10 Aktualisieren der Datenbank ................................................... 1005

27.10.1 Aktualisieren mit dem CommandBuilder-Objekt ...... 100527.10.2 Manuell gesteuerte Aktualisierungen ....................... 100827.10.3 Aktualisieren mit ExecuteNonQuery ......................... 101027.10.4 Manuelles Aktualisieren mit dem DataAdapter ......... 101827.10.5 Den zu aktualisierenden Datensatz in der

Datenbank suchen ................................................... 102227.10.6 Den Benutzer über fehlgeschlagene

Aktualisierungen informieren ................................... 102627.10.7 Konfliktverursachende Datenzeilen bei

der Datenbank abfragen ........................................... 102927.11 Objekte vom Typ DataView .................................................... 1036

27.11.1 Eine DataView erzeugen .......................................... 103627.11.2 Auf die Datenzeilen in einer DataView zugreifen ...... 103727.11.3 Die Eigenschaft Sort und die Methode Find ............. 103727.11.4 Die Methode FindRows ........................................... 103827.11.5 Die Eigenschaft RowFilter ........................................ 103827.11.6 Die Eigenschaft RowStateFilter ................................ 103927.11.7 Änderungen an einem DataView-Objekt .................. 103927.11.8 Aus einer DataView eine DataTable erzeugen ........... 1040

27.12 Stark typisierte DataSets ......................................................... 104227.12.1 Ein stark typisiertes DataSet erzeugen ...................... 104227.12.2 Die Anatomie eines typisierten DataSets .................. 104627.12.3 Typisierte DataSets manuell im Designer erzeugen.... 105327.12.4 Weitergehende Betrachtungen ................................. 105627.12.5 Der TableAdapter .................................................... 105627.12.6 Einen TableAdapter mit Visual Studio erzeugen ........ 105627.12.7 Festlegen der Methoden des TableAdapters ............. 106227.12.8 TableAdapter im Code verwenden ........................... 1062

27.13 Fazit: Typisierte oder nicht typisierte DataSets? ...................... 106827.14 Projekte mit grafischer Benutzeroberfläche ............................. 1069

9783836216937.book Seite 22 Freitag, 26. November 2010 10:32 10

Page 21: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

23

27.14.1 Eine Verbindung mit einem Steuerelement herstellen ......................................... 1070

27.14.2 SqlCommand-Objekte mit dem Designer erzeugen ... 107127.14.3 SqlDataAdapter mit dem Designer erzeugen ............. 107227.14.4 Datenausgabe in WinForms mit

Visual Studio 2008.................................................... 107627.15 Datenbindung ........................................................................ 1078

27.15.1 Binden an Datenquellen (Simple Binding) ................ 107927.15.2 Komplexe Datenbindung (Complex Binding) ............ 1089

28 LINQ .................................................................................... 1095

28.1 Was ist LINQ? ........................................................................ 109528.2 Neue Sprachfeatures in C# 3.0 ................................................ 1096

28.2.1 Implizit typisierte Variablen (Typinferenz) ................ 109628.2.2 Lambda-Ausdrücke .................................................. 109828.2.3 Erweiterungsmethoden ............................................ 110528.2.4 Objektinitialisierung ................................................. 110828.2.5 Anonyme Typen ....................................................... 110828.2.6 C# 3.0 und LINQ-Abfragen ...................................... 1109

28.3 LINQ to Objects ..................................................................... 111228.3.1 Musterdaten ............................................................ 111228.3.2 Die Abfrage-Syntax .................................................. 111528.3.3 Übersicht über die Abfrageoperatoren ..................... 111628.3.4 Die from-Klausel ...................................................... 111728.3.5 Der Restriktionsoperator where ............................... 111828.3.6 Die Projektionsoperatoren ....................................... 112128.3.7 Sortieroperatoren ..................................................... 112228.3.8 Gruppieren mit GroupBy .......................................... 112328.3.9 Verknüpfungen mit Join ........................................... 112528.3.10 Die Set-Operatoren-Familie ..................................... 112828.3.11 Die Familie der Aggregatoperatoren ......................... 113028.3.12 Generierungsoperatoren .......................................... 113328.3.13 Quantifizierungsoperatoren ...................................... 113428.3.14 Aufteilungsoperatoren ............................................. 113528.3.15 Die Elementoperatoren ............................................ 1137

28.4 LINQ to SQL ........................................................................... 114028.4.1 Allgemeine Grundlagen ............................................ 114028.4.2 Objektzuordnung mit Entitätsklassen ....................... 114128.4.3 Das Mapping von Objekten ..................................... 114328.4.4 Verknüpfungen zwischen Entitäten .......................... 1145

9783836216937.book Seite 23 Freitag, 26. November 2010 10:32 10

Page 22: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

Inhalt

24

28.4.5 Tools zur Erzeugung von Entitätsklassen ................... 115228.4.6 Die Klasse DataContext ............................................ 115328.4.7 Konflikte behandeln ................................................. 1159

28.5 Der LINQ-to-SQL-Designer (O/R-Designer) ............................ 116628.5.1 Handhabung des O/R-Designers .............................. 116628.5.2 Die abgeleitete DataContext-Klasse ......................... 116928.5.3 Die Entitätsklassen ................................................... 117228.5.4 WinForm-Beispielprogramm mit einer Tabelle .......... 117428.5.5 WinForm-Beispiel mit mehreren Tabellen ................ 1181

Index ....................................................................................................... 1185

9783836216937.book Seite 24 Freitag, 26. November 2010 10:32 10

Page 23: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

57

In diesem Kapitel werden die für das Verständnis von Datenbanksys-temen notwendigen grundlegenden Begriffe erläutert. Sie erhalten außer-dem einen ersten Einblick in die Strukturen heutiger Datenbanksysteme.

2 Datenbankgrundlagen

Bevor wir im übernächsten Abschnitt näher auf die eigentlichen Datenbanksys-teme eingehen, sollen noch zwei Begriffe geklärt werden, die damit in engemZusammenhang stehen und immer wieder – gerade bei Anwendern, die zum ers-ten Mal mit einem solchen Datenbanksystem arbeiten – für Irritationen sorgen:die Begriffe Server und Client. Diese Irritationen rühren häufig daher, dass beideBegriffe sowohl für eine Hardware- als auch für eine Softwarekomponente ver-wendet werden. Dies soll am Beispiel eines Servers näher betrachtet werden, füreinen Client gelten ähnliche Überlegungen.

2.1 Server und Client

Wenn von einem Server (engl., Diener) die Rede ist, ist meistens ein in einemNetzwerk befindlicher Rechner gemeint, der anderen Rechnern Funktionen,Speicherplatz, Programme – im weitesten Sinne also Ressourcen – zur Verfügungstellt. Als einen Server bezeichnet man aber auch eine Software (wie SQL Server),die anderen Programmen über eine Schnittstelle Funktionen zur Verfügung stellt,im Falle von SQL Server also die Datenbankfunktionalität.

Dabei ist es unerheblich, ob das zugreifende Programm, das in diesem Fall als Cli-ent (engl.: Auftraggeber, Kunde, Klient) bezeichnet wird, auf einem anderenRechner innerhalb eines Netzwerks ausgeführt wird, über das Internet mit demServer verbunden ist oder auf demselben Rechner wie die Serversoftware läuft.

Letzteres wird bei Ihnen der Fall sein, wenn Sie die Installation von SQL Serverauf Ihrem lokalen Computer vorgenommen haben. Sie greifen mit den von SQLServer 2008 mitgelieferten Clientanwendungen auf das auf dem gleichen Rech-ner laufende Serverprogramm zu.

Ganz allgemein lässt sich sagen:

9783836216937.book Seite 57 Freitag, 26. November 2010 10:32 10

Page 24: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

58

Datenbankgrundlagen2

In diesem Buch soll, wenn nicht anders angegeben, mit »Server« immer dasDatenbankprogramm, also SQL Server 2008, gemeint sein.

2.2 Relationale Datenbanken

Das Modell einer relationalen Datenbank wurde erstmals 1970 von Dr. EdgarFrank Codd (1923–2003) in seinem Artikel »A Relational Model of Data for LargeShared Data Banks« veröffentlicht.

Mit diesem Artikel löste Codd eine der tiefgreifendsten Veränderungen in derDatenverarbeitung aus: den Übergang zu den relationalen Datenbanken.

Die ersten für Computer entwickelten Datenbanken unterschieden sich in ihrerStruktur grundlegend von der Struktur heutiger Datenbanksysteme. Eine der ers-ten Lösungen, Daten auf einem Computer zugänglich zu machen, beruhte auf dersequentiellen Speicherung der Daten in Textdateien. In der weiteren Entwicklungwurde der Ansatz verfolgt, die Daten in einer hierarchischen Struktur abzulegen.Abbildung 2.1 zeigt ein Beispiel für den Aufbau einer solchen Datenbank. Umeinen Datensatz zu finden, musste eine Baumstruktur durchlaufen werden, anderen Ende der gesuchte Datensatz stand.

Abbildung 2.1 Prinzipieller Aufbau erster Datenbanklösungen

Hinweis

Ein Server stellt Ressourcen bereit, die von einem Client benutzt werden können. Dabeiist es unerheblich, ob es sich um einen Hardware- oder einen Softwareserver bezie-hungsweise -client handelt.

Hinweis

Eine Kopie dieses Artikels finden Sie zum Beispiel unter der Internetadresse http://www.seas.upenn.edu/~zives/03f/cis550/codd.pdf.

Kontakte

männlich weiblich weiblichmännlich

privat geschäftlich

9783836216937.book Seite 58 Freitag, 26. November 2010 10:32 10

Page 25: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

59

Relationale Datenbanken 2.2

Codds Arbeit hingegen basiert auf einem wissenschaftlichen Ansatz, in dem er dieVerwaltung von Daten durch mathematische Methoden der Mengenlehrebeschreibt. Im Zusammenhang mit relationalen Datenbanken werden daher häu-fig die aus der Mengenlehre stammenden Fachbegriffe verwendet. Diese etwas»akademisch« klingenden Begriffe sind sicherlich ein Grund dafür, dass bei vielenLeuten immer noch eine hohe Hemmschwelle vor der Beschäftigung mit Daten-banken besteht. Einige dieser Fachbegriffe werden weiter unten erwähnt underklärt, da sie in anderen Publikationen verwendet werden. In diesem Buch ver-wenden wir – soweit es möglich ist – allgemein verständliche Bezeichnungen. Fürmanche Fachbegriffe gibt es jedoch kein Synonym, so dass diese dann im Buch Ver-wendung finden.

Was aber versteht man nun genau unter einer relationalen Datenbank?

Relationale Datenbanken arbeiten nach einem völlig anderen Prinzip als die obenbeschriebenen Ansätze. Das wesentlichste Merkmal einer relationalen Daten-bank besteht darin, dass die Daten in zueinander in Beziehung stehenden Tabel-len (den sogenannten Relationen) abgelegt werden (Abbildung 2.2). Auf welcheWeise die Tabellen einer relationalen Datenbank zueinander in Beziehung gesetztwerden, behandeln wir weiter unten in Abschnitt 2.2.3 dieses Kapitels.

Abbildung 2.2 Schematischer Aufbau einer relationalen Datenbank

Die Aufteilung von Daten in zueinander in Beziehung stehende Tabellen ermöglichteine sehr strukturierte Speicherung von Daten, da in eine Tabelle immer nur Infor-mationen über eine Art von Objekten abgelegt werden sollten, wobei es sich beidiesen Objekten sowohl um reale Dinge wie zum Beispiel Personen oder Fahrzeugeals auch um abstrakte Dinge wie beispielsweise Verleihvorgänge handeln kann.

Diese Art der Speicherung erfüllt einen weiteren wesentlichen Zweck: die Ver-meidung von Redundanz. Dieser Begriff bezeichnet im Kontext von Datenbankendie mehrfache Speicherung der gleichen Information. Redundanz bedeutet nichtnur den unnötigen Verbrauch von Speicherplatz, sondern kann bei ihrem Vor-handensein innerhalb einer Datenbank ernsthafte Probleme verursachen, wiedas folgende Beispiel aus der Praxis deutlich machen soll.

9783836216937.book Seite 59 Freitag, 26. November 2010 10:32 10

Page 26: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

60

Datenbankgrundlagen2

In vielen Firmen werden die Daten der Mitarbeiter an mehreren Stellen erfasst.Die Buchhaltung verfügt über ein eigenes Programm zur Gehaltsabrechnung mitden Daten der Mitarbeiter, die Abteilungsleiter haben die Daten der Mitarbeiterihrer Abteilung ebenfalls erfasst, und der Betriebsrat pflegt eine eigene Excel-Tabelle dieser Daten. Bereits bei dieser Speicherung von Daten an nur drei ver-schiedenen Stellen stellt man bei einer Überprüfung schnell fest, dass die Datenin den seltensten Fällen untereinander abgeglichen sind: Die neue Adresse einesMitarbeiters wurde nach seinem Umzug nicht in allen drei Datenbeständen geän-dert, schon lange ausgeschiedene Mitarbeiter wurden nicht gelöscht und so weiter.

Übertragen auf eine Datenbank entspräche dieses Beispiel der Tatsache, dass dieMitarbeiterinformationen dreimal innerhalb einer Datenbank abgespeichertworden wären, beispielsweise in verschiedenen Tabellen. Als Konsequenz darausergäbe sich die Tatsache, dass je nachdem, welche Tabelle zur Abfrage herangezo-gen wird, unterschiedliche Informationen zu einem Mitarbeiter zurückgeliefertwürden, eben in Abhängigkeit davon, ob ein aktueller oder veralteter Datensatzals Quelle der Information diente. Mit anderen Worten: Die Korrektheit und Ver-lässlichkeit der Daten, die auch als Datenintegrität bezeichnet wird, wäre nichtmehr gewährleistet. Eine Datenbank, die nur zufällig korrekte Informationenausgibt, ist aber praktisch wertlos.

Natürlich ist mit der Datenintegrität nicht die absolute Fehlerfreiheit von Datengemeint: Zwar können Daten während der Eingabe von modernen Datenbank-systemen auf bestimmte Fehler überprüft werden, einen Schutz vor Schreibfeh-lern bei der Eingabe zum Beispiel eines Vor- oder Nachnamens kann auch dasbeste Datenbanksystem nicht bieten.

Anhand des obigen Beispiels kann abgelesen werden, welche Bedeutung die Ver-meidung von Redundanz in Bezug auf die Datenintegrität hat: Wird Redundanzvermieden, also eine Information immer nur einmal an einer Stelle innerhalb derDatenbank gespeichert, entspricht diese Information immer dem letzten, aktu-ellsten Stand. Die Vermeidung von Redundanz sollte daher bei einem Datenbank-entwurf – wie er in Kapitel 3, »Logischer Datenbankentwurf«, beschrieben wird –immer einen wichtigen Gesichtspunkt darstellen. Die Datenbanktheorie stelltMethoden und Hilfsmittel zur Verfügung, um dieses Ziele zu erreichen.

Nachdem der Zusammenhang zwischen dem Vorhandensein von Redundanz undder möglichen Auswirkung auf die Datenintegrität beschrieben wurde, soll nunnoch eine – in der praktischen Arbeit mit Datenbanken häufig gestellte – Fragebeantwortet werden: Wann genau liegt Redundanz innerhalb einer Datenbankvor? Gerade bei der ersten Beschäftigung mit Datenbanken sorgt dieser Begriffimmer wieder für Irritationen. Stellt schon die mehrfache Nennung eines Ein-trags – des Wohnorts, der Steuerklasse und so weiter – bei den verschiedenen

9783836216937.book Seite 60 Freitag, 26. November 2010 10:32 10

Page 27: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

61

Relationale Datenbanken 2.2

Datensätzen einer Tabelle schon Redundanz dar oder nicht? Die folgende Anmer-kung soll diesen Aspekt erläutern:

Auch wenn die Vermeidung von Redundanz ein Hauptmerkmal des Entwurfsvon relationalen Datenbanken darstellt, so ist das Auftreten von Redundanzennicht immer zu vermeiden. Innerhalb einer Firma könnten zum Beispiel zweioder mehrere Datenbanken Verwendung finden, deren Datenbestand sich teil-weise überschneidet.

In diesem Fall muss sichergestellt sein, dass Änderungen von Datensätzen in dereinen Datenbank auch auf die anderen, redundanten Datensätze anderer Daten-banken übertragen werden. Man bezeichnet diesen Sachverhalt als die Wahrungder Datenkonsistenz.

2.2.1 Struktureller Aufbau von Tabellen

Da Tabellen die elementaren Bestandteile von relationalen Datenbank darstellen,sollen anhand von Abbildung 2.3 einige mit Tabellen in Zusammenhang ste-hende Begriffe erklärt werden.

Dargestellt ist der Auszug einer Tabelle aus der in SQL Server 2008 enthaltenenBeispieldatenbank AdventureWorks. Diese Beispieldatenbank bildet die Vorgängeinnerhalb einer Firma ab, die sich mit der Herstellung von Fahrrädern beschäf-tigt. Die abgebildete Tabelle enthält Informationen über Produkte, die von demFahrradhersteller eingekauft und verkauft werden.

Hinweis

Der Begriff Redundanz wird häufig falsch interpretiert. Ist zum Beispiel in einer Tabelle,in der die Daten von Mitarbeitern erfasst werden, eine Spalte vorhanden, in der dieAbteilung des Angestellten (Lager, Versand, Buchhaltung etc.) erfasst wird, so stellt dasmehrfache Vorkommen dieser Begriffe in der Spalte keine Redundanz dar! Redundanzentstünde in diesem Fall erst dann, wenn an mehreren Stellen innerhalb der Datenbankdie Information erfasst würde, dass ein bestimmter Angestellter seiner jeweiligen Abtei-lung zuzuordnen ist.

Hinweis

Die verschiedenen Beispieldatenbanken der AdventureWorks-Familie sind – mit Aus-nahme der Light-Versionen – weitaus umfangreicher und komplexer als die in früherenAusgaben von SQL Server mitgelieferten Beispieldatenbanken pubs und Northwind.Allerdings erschließt sich – gerade für einen nicht aus dem angelsächsischen Sprachraumstammenden Benutzer – nicht unbedingt sofort, welche Art von Information innerhalbder Tabellen abgespeichert ist.

9783836216937.book Seite 61 Freitag, 26. November 2010 10:32 10

Page 28: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

62

Datenbankgrundlagen2

Abbildung 2.3 Ausschnitt aus der Tabelle Product

Wie zu erkennen ist, besteht eine Tabelle innerhalb einer relationalen Datenbankaus einer zweidimensionalen Struktur von Spalten und Zeilen, wobei jede Zeileinnerhalb einer Tabelle einen Datensatz darstellt. Der grundsätzliche strukturelleAufbau von Tabellen innerhalb einer relationalen Datenbank kann – vereinfacht –durch die folgenden Punkte beschrieben werden:

� TabellennameJede Tabelle muss über einen eindeutigen Namen verfügen, unter dem sieanzusprechen ist. Dieser Name wird im Datenbankkontext auch Bezeichnergenannt.

� SpaltennameDie Spalten einer Tabelle müssen ebenfalls über eine Bezeichnung – also einenNamen – verfügen. Die Spaltennamen sind in Abbildung 2.3 in der oberstenZeile grau unterlegt. Spalten stellen innerhalb einer Tabelle die Möglichkeit be-reit, die jeweiligen Informationen zu den Datensätzen geordnet abzuspeichernund – durch Angabe des Spaltennamens – in Abfragen gezielt anzusprechen.

� DatentypDer Datentyp bezieht sich ebenfalls auf die jeweiligen Spalten einer Tabelle.Mit der Zuweisung eines Datentyps für eine Spalte legen Sie fest, welche Art

Unter der Internetadresse http://msdn2.microsoft.com/de-de/ms124659.aspx erhal-ten Sie detaillierte Informationen zu den Tabellen der AdventureWorks-Beispieldaten-bank sowie Vergleiche zu den ehemaligen Beispieldatenbanken.

9783836216937.book Seite 62 Freitag, 26. November 2010 10:32 10

Page 29: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

63

Relationale Datenbanken 2.2

von Daten in dieser Spalte abgelegt werden können. Der Datentyp wird alsodadurch bestimmt, ob die Spalte beispielsweise Zahlen, Zeichenketten,Datumswerte oder andere Informationen enthalten soll.

Dieser kurze Überblick stellt – wie oben erwähnt – nur einen grundlegenden Ein-blick in die Struktur von Tabellen innerhalb einer relationalen Datenbank darund wird in den entsprechenden Kapiteln dieses Buchs vertieft werden.

2.2.2 Im Zusammenhang mit Tabellen gebräuchliche Fachbegriffe

Durch die mathematische Grundlage der relationalen Datenbanktheorie werdenim Zusammenhang mit Tabellen häufig diverse Fachbegriffe verwendet, die andieser Stelle erläutert werden sollen:

� RelationEine Relation stellt sicherlich den zentralen Begriff innerhalb der Datenbank-theorie dar, lässt sich doch der Name moderner Datenbanksysteme auf diesenAusdruck zurückführen. Leider ist diese Bezeichnung etwas missverständlich,denn sie lässt vermuten, dass damit die oben schon erwähnten Beziehungenzwischen den Tabellen gemeint sind. Dies ist jedoch nicht der Fall; der Begriff»Relation« bezeichnet eine Tabelle innerhalb einer Datenbank.

� Entitätstyp/RelationstypIm engen Zusammenhang mit der Relation steht der Begriff Entitätstyp. Wäh-rend die Relation die konkrete Implementierung in Form einer Tabelle inner-halb der Datenbank darstellt, bezeichnet der Entitätstyp (engl.: entity; Ding,Wesen) in abstrakter Weise das, was innerhalb einer Tabelle abgespeichertwird. Ein Beispiel soll diesen Umstand verdeutlichen: In einer Firmendaten-bank gibt es eine Tabelle namens tblAngestellte (das Präfix tbl im Namen wirdhäufig zur Kennzeichnung einer Tabelle [engl.: table] verwendet). Die Tabellestellt die Relation dar, also die Implementierung innerhalb der Datenbank,und die Angestellten selbst sind der Entitätstyp, also das, was in der Tabelleabgespeichert wird. Aufgrund der Ähnlichkeit beider Sachverhalte werden»Relation« und »Entitätstyp« (oder auch Entität, siehe unten) häufig als Syno-nym füreinander verwendet, auch wenn es sachlich nicht korrekt ist.

� Tupel/EntitätEin Tupel stellt in der Mathematik eine Folge zusammengehöriger Werte dar.Innerhalb einer Datenbank entspricht ein Tupel daher einem Datensatz, alsoeiner Zeile innerhalb einer Tabelle, da innerhalb eines Datensatzes mehrerezugehörige Werte abgespeichert werden können. Ein anderer gebräuchlicherBegriff für einen Datensatz ist die Bezeichnung Entität, der – wie oben bereitserwähnt – auch als Synonym für eine Tabelle verwendet wird. Genau genom-

9783836216937.book Seite 63 Freitag, 26. November 2010 10:32 10

Page 30: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

64

Datenbankgrundlagen2

men ist mit Entität aber ein reales Objekt eines Entitätstyps gemeint, also einDatensatz.

� AttributAls Attribute werden die Spalten einer Tabelle bezeichnet, da in ihnen dieEigenschaften – also die Attribute – der Datensätze gespeichert werden.

� ZelleEin Datenfeld innerhalb einer Tabelle, also beispielsweise das Feld mit demEintrag Blade in der fünften Zeile und der zweiten Spalte der Abbildung 2.3,wird als Zelle bezeichnet.

2.2.3 Schlüssel

Nachdem der grundlegende Aufbau von Datenbanktabellen besprochen wurde,bleibt noch die Frage zu beantworten, auf welche Weise die – in Abbildung 2.2durch Pfeile angedeuteten – Verknüpfungen zwischen den Tabellen hergestelltwerden, die ja ein weiteres wesentliches Merkmal relationaler Datenbanken dar-stellen. Die Grundlage dieser Verknüpfungen sind die sogenannten Schlüssel, dieein weiteres grundlegendes Element von Tabellen darstellen.

Primärschlüssel

Ein Primärschlüssel (engl.: primary key; häufig durch PK abgekürzt) dient dazu,einen Datensatz innerhalb einer Tabelle eindeutig zu identifizieren und anzuspre-chen. Im einfachsten Fall wird der Definition einer Tabelle die Information hin-zugefügt, dass eine bestimmte Spalte den Primärschlüssel der Tabellen darstellensoll. Da – wie oben erwähnt – der Primärschlüssel die Eindeutigkeit der Daten-sätze sicherstellen soll, wird fortan vom Datenbankserver überprüft und sicher-gestellt, dass weder doppelte Werte noch leere Einträge in diese Spalte eingetra-gen werden können. Ein Datensatz, der diese Bedingungen nicht erfüllt, wirddaher abgelehnt. Abbildung 2.4 zeigt einen Ausschnitt aus der Struktur derTabelle Product.

Beachten Sie, dass die Spalten hier nicht waagerecht wie in Abbildung 2.3, son-dern senkrecht angeordnet sind. Links neben der Spalte ProductID ist ein Schlüs-selsymbol zu erkennen, das angibt, dass es sich bei dieser Spalte um den Primär-schlüssel der Tabelle handelt. Bei einem Vergleich mit dem in Abbildung 2.3dargestellten Inhalt der Tabelle wird deutlich, dass kein Datensatz so in dieTabelle eingetragen oder ein vorhandener Datensatz so geändert werden kann,dass ein weiterer Datensatz die Werte von beispielsweise 1, 2 oder 3 in der SpalteProductID aufweisen würde, da diese Werte in der Primärschlüsselspalte bereitsvorhanden sind. Außerdem wird durch die Definition als Primärschlüssel sicher-gestellt, dass in der Spalte ProductID kein einziger leerer Eintrag vorhanden ist.

9783836216937.book Seite 64 Freitag, 26. November 2010 10:32 10

Page 31: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

65

Relationale Datenbanken 2.2

Der Versuch, einen Datensatz einzufügen oder so zu ändern, dass er gegen denPrimärschlüssel verstieße, resultiert in einer Fehlermeldung und wird als Primär-schlüsselverletzung bezeichnet.

Abbildung 2.4 Struktur der Tabelle Product

Sie werden häufig in Darstellungen wie Abbildung 2.4 mehrere Schlüsselsymbolein der linken, grauen Spalte entdecken. In diesen Fällen handelt es sich nicht ummehrere Primärschlüssel innerhalb einer Tabelle!

Da es nur einen Primärschlüssel in einer Tabelle geben kann, muss es sich hierbeium einen Primärschlüssel handeln, der aus mehreren Spalten besteht. Manspricht in diesem Fall auch von einem zusammengesetzten oder kombinierten Pri-märschlüssel. Kombinierte Primärschlüssel können in SQL Server aus maximal 16Spalten bestehen, wobei es in der Regel anzuraten ist, diese Grenze – wie im wei-teren Verlauf noch deutlich werden wird – nicht unbedingt auszureizen. Ist einPrimärschlüssel über mehrere Spalten definiert, verhält er sich genau wie ein auseiner Spalte bestehender Primärschlüssel, nur wird nun nicht mehr die Eindeu-tigkeit eines einzelnen Spaltenwerts sichergestellt, sondern die Eindeutigkeit derKombinationen von Spaltenwerten, deren Spalten am Primärschlüssel beteiligtsind. Abbildung 2.5 soll diesen Sachverhalt verdeutlichen. Dargestellt ist derschematische Aufbau einer Tabelle, deren erste zwei Spalten einen kombiniertenPrimärschlüssel (PK) bilden sollen. Die Tabelle enthält Datensätze, deren Werte 1beziehungsweise A und B stellvertretend für numerische beziehungsweise alpha-numerische Werte stehen sollen. Die restlichen Komponenten der Datensätzesind nicht von Belang und lediglich durch Punktfolgen angedeutet.

Wie an der ersten Spalte zu erkennen ist, können im Fall des kombinierten Pri-märschlüssels durchaus in einer zum Schlüssel gehörigen Spalte identische Werte

Hinweis

Pro Tabelle kann maximal ein Primärschlüssel vergeben werden!

9783836216937.book Seite 65 Freitag, 26. November 2010 10:32 10

Page 32: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

66

Datenbankgrundlagen2

vorliegen, da ja nicht der Inhalt einer Spalte, sondern die Kombination der Wertealler zum Primärschlüssel gehörenden Spalten eindeutig sein muss. Am Beispielvon Abbildung 2.5 hieße das, dass beispielsweise Datensätze, die über die Wer-tepaare (1,C) oder (2,A) in den ersten beiden Spalten verfügen, in die Tabelle ein-gefügt werden könnten; alle Datensätze jedoch, die als erste zwei Werte die Kom-bination (1,A) oder (1,B) enthalten, könnten nicht in die Tabelle eingefügt werden.

Abbildung 2.5 Tabelle mit kombiniertem Primärschlüssel

Die Wahl eines geeigneten Primärschlüssels für eine Tabelle ist von grundlegen-der Wichtigkeit für den späteren reibungslosen Betrieb der Datenbank. Beden-ken Sie immer, dass der Primärschlüssel das Merkmal ist, durch das ein Datensatzin einer Tabelle eindeutig zu identifizieren ist, und dass daher dieser Wert – oderdie Kombination der Werte – nur einmal in der jeweiligen Tabelle auftreten kann.Gerade bei der anfänglichen Beschäftigung mit relationalen Datenbanken werdenan dieser Stelle häufig Fehler gemacht. Daher folgen an dieser Stelle einige Über-legungen zur Wahl eines korrekten Primärschlüssels einer Tabelle.

Einer der fatalsten Fehler, die sich bei der Wahl des Primärschlüssels einer Tabelleeinschleichen können, wird durch den Gedanken ausgelöst, dass ein Umstandniemals eintreten wird. Betrachten wir einmal den Fall, dass Sie eine Datenbankzur Adressverwaltung für Ihren privaten Gebrauch entwerfen. Sie wählen als Pri-märschlüssel für die Tabelle, in der Sie die Informationen zu Ihren Bekanntenspeichern, einen zusammengesetzten Primärschlüssel aus Vorname und Nach-name, da es ja mehr als unwahrscheinlich ist, dass Sie jemals einen zweitenBekannten mit genau dem gleichen Namen kennenlernen. Aber kann der Fallwirklich absolut ausgeschlossen werden? Nein! Als Folge könnten Sie den zwei-ten Kontakt gleichen Namens nicht mehr in Ihre Datenbank aufnehmen, ohnedie Datenbank – und die für sie bereits erstellten Anwendungen – in weiten Tei-len umschreiben zu müssen.

Dass ein kombinierter Primärschlüssel aus Vor- und Nachname zur Identifizie-rung einer Person ungeeignet ist, wird offenkundig, wenn man statt an eine pri-vate Adressverwaltung an die Kundendatei eines Versandhauses denkt. Dort istes äußerst wahrscheinlich, dass es mehrere Kunden mit gleichem Vor- und Nach-namen gibt.

1 A ... ...1 B ... ...

PK

9783836216937.book Seite 66 Freitag, 26. November 2010 10:32 10

Page 33: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

67

Relationale Datenbanken 2.2

Zeitliche Änderungen werden ebenfalls oft nicht ausreichend bedacht. Das Kenn-zeichen eines Fahrzeugs oder die Ausweisnummer eines Menschen sind auf denersten Blick zwar eindeutig, können sich aber im Laufe der Zeit ändern. Um einFahrzeug eindeutig zu identifizieren, ist beispielsweise die Fahrgestellnummerweitaus besser geeignet, da sie – im Gegensatz zum Kennzeichen – für einbestimmtes Fahrzeug eindeutig vergeben wird. Gegen die Ausweisnummer zurKennzeichnung einer Person spricht außerdem, dass Sie diese Information even-tuell gar nicht erhalten können oder sie noch nicht vorhanden ist, wenn Sie inIhre Adressverwaltung zum Beispiel auch die Kinder Ihrer Bekannten aufnehmenwollen, die unter Umständen noch keinen Ausweis besitzen.

Da die Wahl eines geeigneten Primärschlüssels nicht immer trivial ist, wird häu-fig – auch in vielen Publikationen – von einer Möglichkeit Gebrauch gemacht, diejede moderne Datenbank zur Verfügung stellt: die Vergabe einer fortlaufendenNummer für Datensätze, die dann als Primärschlüssel fungiert. In der Tat ist diesmanchmal, wenn auch nicht immer, die beste Lösung zur Wahl des Primärschlüs-sels. Soll ein Primärschlüssel für Personen gefunden werden, steht man häufigvor dem Problem, dass – egal wie viele Spalten am Primärschlüssel beteiligt sind –sich zwei Personen nicht anhand des Primärschlüssels unterscheiden und iden-tifizieren lassen. Selbst wenn eine Kombination aus Vor-, Nachname, Adresseund Geburtsdatum verwendet würde, würde diese Kombination zwingend zweiMenschen in einer Großstadt unterscheiden können?

In diesem Fall ist eine Art Nummerierung sicher sinnvoll. Nicht umsonst erhältein Kunde, wenn er bei einem Versandhaus zum ersten Mal eine Bestellung auf-gibt, eine Kundennummer, die ja nichts anderes als eine Art Nummerierung dar-stellt. An dieser Stelle stellt sich häufig die Frage nach der »Eindeutigkeit«: Wennjemand bei einem Versandhaus zwei Kundennummern hat, dann ist sein Daten-satz doch nicht mehr »eindeutig«, oder? Doch, ist er. Für die Datenbank stellendie zwei Datensätze zwei verschiedene Kunden dar, die eindeutig ansprechbarsind, was zum Beispiel Rechnungsvorgänge angeht. Vor solchen »Fehleinträgen«kann selbst das modernste Datenbanksystem der Welt Sie nicht schützen!

Nicht immer jedoch stellt solch eine Spalte mit automatischer Nummerierung –wie sie leider zu häufig angewandt wird – die optimale Wahl des Primärschlüsselsdar. Häufig besitzen Datensätze bereits ein Merkmal, das sich als Primärschlüsseleignet. Viele dieser Merkmale – und damit potentielle Primärschlüssel – sind unsaus dem täglichen Leben sogar vertraut:

� BücherEin Buchtitel wird durch seine ISBN-Nummer eindeutig gekennzeichnet. DieAngabe der ISBN-Nummer reicht aus, um in der EDV einer Buchhandlungeinen bestimmten Buchtitel zu finden. In der Datenbank der Buchhandlung

9783836216937.book Seite 67 Freitag, 26. November 2010 10:32 10

Page 34: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

68

Datenbankgrundlagen2

genügt die ISBN-Nummer, um ein Buch innerhalb der entsprechenden Tabelleals Datensatz zu identifizieren, auf diesen zuzugreifen und alle damit verbun-denen Informationen wie den Autor, Preis etc. zurückzuliefern.

� WarenJede Ware ist heutzutage mit einem Barcode versehen. Dieser Code kenn-zeichnet einen Artikel eindeutig und wird an der Supermarktkasse dazu ver-wendet, den Preis des jeweiligen Artikels aus der Datenbank abzufragen.

� PersonalJeder Mitarbeiter einer Firma besitzt eine Personalnummer, durch die er ein-deutig bestimmt wird.

� BankenJede Bank verfügt über eine Bankleitzahl (BLZ). Durch die Angabe dieserBankleitzahl kann jede Bank eindeutig identifiziert werden. Sehr schön ist diesbeim Onlinebanking zu beobachten: Hier reicht die Angabe der Bankleitzahlaus; der Name der Bank wird automatisch eingetragen. Natürlich erfolgt diesüber eine Abfrage auf eine Tabelle, in der die Spalte, die die Bankleitzahlenenthält, als Primärschlüssel definiert ist und die über eine weitere Spalte ver-fügt, in der der ausgeschriebene Name der Bank hinterlegt ist.

Eine häufig gestellte Frage im Zusammenhang mit Primärschlüsseln ist, ob eineTabelle unbedingt über einen Primärschlüssel verfügen muss. Es gibt tatsächlichFälle, in denen das Vorhandensein eines Primärschlüssels für die Funktion einerTabelle innerhalb der Datenbank nicht zwingend notwendig wäre. Selbst diverseintern verwendete Tabellen von SQL Server 2000 verfügten beispielsweise überkeinen Primärschlüssel. In selbst angelegten Tabellen innerhalb einer Datenbanksollte die Eindeutigkeit der Datensätze immer durch die Definition eines Primär-schlüssels (oder eine andere Methode zur Sicherstellung der Eindeutigkeit, wiespäter im Buch beschrieben) sichergestellt werden. Dies hat weniger einen daten-banktheoretischen als vielmehr einen praktischen Grund: Nur wenn eine Tabelledie Möglichkeit bietet, einen einzelnen Datensatz über ein eindeutiges Merkmalanzusprechen, um ihn zu verändern oder zu löschen, ist wirklich sichergestellt,dass nur dieser Datensatz von der entsprechenden Aktion betroffen ist.

Fremdschlüssel

Nachdem die Verwendung von Primärschlüsseln erläutert wurde, soll nun einezweite, wesentliche Schlüsselart besprochen werden: der Fremdschlüssel. Fremd-schlüssel (engl.: foreign key; häufig durch FK abgekürzt) dienen dazu, die schonerwähnten Beziehungen zwischen den Tabellen (die sogenannten Referenzen)einer Datenbank herzustellen. Auf welche Art und Weise diese Verknüpfungenhergestellt werden, lässt sich am einfachsten anhand eines Beispiels verdeutli-chen. Zu diesem Zweck ist in Abbildung 2.6 ein Ausschnitt aus der Beispieldaten-

9783836216937.book Seite 68 Freitag, 26. November 2010 10:32 10

Page 35: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

69

Relationale Datenbanken 2.2

bank AdventureWorks dargestellt. (In der AdventureWorks2008R2-Beispieldaten-bank finden Sie entsprechende Tabellen vor, bei denen einige Spalten eineandere Bezeichnung tragen.) Die in Klammern gesetzten Begriffe hinter denTabellennamen ignorieren Sie bitte zunächst, sie beziehen sich auf eine logischeUnterteilung der Datenbank.

Abbildung 2.6 Ausschnitt aus der AdventureWorks-Datenbank

Die Abbildung enthält die bereits bekannte Tabelle Product, in der – wie Sie obenbereits gesehen haben – die Datensätze der Produkte abgelegt sind, die TabelleVendor (engl.: Lieferant) sowie die Tabelle ProductVendor, die zwischen den bei-den Tabellen Product und Vendor platziert ist. Ausgehend von dieser Tabellesehen Sie zwei Verbindungslinien mit Schlüsselsymbolen an den Enden, die eineVerbindung zu den Tabellen Product und Vendor herstellen. Diese Verbindungs-linien repräsentieren zwei Fremdschlüssel, die von der Tabelle ProductVendor aufdie Tabellen Product und Vendor verweisen. Man sagt auch: Die Tabelle Product-Vendor referenziert die Tabellen Product und Vendor. Auf welche Art und Weisestellen die Fremdschlüssel die bereits mehrfach erwähnte Verknüpfung zwischenden Tabellen her? Was bewirkt die Definition solcher Fremdschlüssel? Zur Beant-wortung dieser Fragen zeigt Abbildung 2.6 einen Ausschnitt der in Abbildung 2.7in ihrer Struktur dargestellten drei Tabellen.

In dem vorliegenden Beispiel existiert zum einen ein Fremdschlüssel, der von derSpalte ProductID der Tabelle ProductVendor auf die gleichnamige Spalte der Tabelle

9783836216937.book Seite 69 Freitag, 26. November 2010 10:32 10

Page 36: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

70

Datenbankgrundlagen2

Product verweist, die ja als Primärschlüssel dieser Tabelle definiert wurde. In Ab-bildung 2.7 ist dieser Fremdschlüssel durch den Pfeil zwischen diesen beiden Ta-bellen angedeutet. Dieser Fremdschlüssel bewirkt nun nichts anderes, als dass dasDatenbanksystem überprüft, ob zu einem Eintrag in der Spalte Product-ID der Ta-belle ProductVendor ein entsprechender Eintrag in der Primärschlüsselspalte der Ta-belle Product existiert. Mit anderen Worten: Es wird überprüft, ob die ID eines Pro-dukts, das eingetragen werden soll, auch tatsächlich vorhanden ist. Ist dies nicht derFall, kann ein entsprechender Datensatz nicht in die Tabelle ProductVendor einge-tragen werden. Man spricht in diesem Fall von einer Fremdschlüsselverletzung.

Der zweite Fremdschlüssel bewirkt eine ähnliche Überprüfung: Es wird festge-stellt, ob die ID eines Lieferanten in der Primärschlüsselspalte der Tabelle Vendorexistiert. Beachten Sie bei Abbildung 2.7 bitte, dass nur ein Bruchteil der Daten-sätze dargestellt ist. Der Datensatz mit der ID 50 aus der Vendor-Tabelle ist zumBeispiel nicht in der Darstellung der Tabelle, aber in der Tabelle selbst enthalten!

Abbildung 2.7 Auszug von Datensätzen aus den drei Tabellen Product, ProductVendor und Vendor mit angedeuteten Fremdschlüsseln

9783836216937.book Seite 70 Freitag, 26. November 2010 10:32 10

Page 37: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

71

Relationale Datenbanken 2.2

Auf diese recht einfache Weise werden in einer relationalen Datenbank die Bezie-hungen zwischen den einzelnen Tabellen hergestellt.

Die Tabelle ProductVendor enthält also offensichtlich Informationen, diebeschreiben, welches Produkt von welchen Lieferanten zu welchen Bedingungengeliefert werden können. Man könnte nun einwenden, dass es doch sehr viel ein-facher wäre, diese Informationen in einer Tabelle abzuspeichern, d.h. die Infor-mationen zu den Lieferanten, die Angabe zu den Produkten und so weiter, anstattdiese Informationen in drei Tabellen zu speichern, was zukünftige Abfragensicher nicht leichter macht.

Das vorliegende Beispiel weist allerdings einen ganz entscheidenden Vorteil auf:Würde man die Information, welcher Lieferant welchen Artikel liefern kann, ineiner einzigen Tabelle speichern, hätte das zur Folge, dass – wenn zum Beispielein Artikel von mehreren Lieferanten geliefert werden kann – bei jedem Lieferan-ten alle Details des Produkts erneut angegeben werden müssten. Es würden alsozu jeder weiteren Kombination von Lieferant und Produkt redundante Informati-onen erfasst – mit den oben bereits erwähnten Auswirkungen auf die Datenbank.

Die auf den ersten Blick zwar etwas umständlichere Lösung in der Adventure-Works-Datenbank löst dieses Problem viel eleganter: Alle Produkte werden mitallen Details einmal in der Tabelle Product erfasst, und alle Lieferanten werdeneinmal in der Tabelle Vendor erfasst. Die Information, welcher Lieferant welchesProdukt zu welchen Konditionen liefern kann, wird einmal in der Tabelle Pro-ductVendor abgespeichert, was bedeutet, dass Redundanz vermieden wird.Betrachten Sie dazu die mittlere Tabelle in Der erste Datensatz dieser Tabelle hatin der Spalte ProductID den Wert 1. Da es sich bei diesem Wert um einen Eintragdes Primärschlüssels der Product-Tabelle handelt, kann innerhalb einer Abfragespäter auf alle Einzelheiten des entsprechenden Datensatzes in der Product-Tabelle zugegriffen werden, er ist ja durch den Primärschlüsselwert eindeutig zuidentifizieren. Es muss sich bei diesem Eintrag also um das Produkt namensAdjustable Race handeln. Entsprechendes gilt für den Hersteller: In dem Daten-satz ist als Hersteller die VendorID 83 angegeben, was dem Primärschlüsselwertdes Herstellers Litware, Inc. entspricht. Durch die Kenntnis des Primärschlüssel-werts könnte eine Abfrage demzufolge auch alle Details des Herstellers ausgeben.Er wird ja durch seinen Primärschlüsseleintrag eindeutig identifiziert.

Hinweis

Verweise auf Datensätze innerhalb von Tabellen werden durch Angabe des Primär-schlüssels realisiert.

9783836216937.book Seite 71 Freitag, 26. November 2010 10:32 10

Page 38: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

72

Datenbankgrundlagen2

An diesem einfachen Beispiel lassen sich bereits klar die Vorteile der Speicherungvon Daten in relationaler, redundanzvermeidender Form erkennen: Egal, wieviele Produkte ein Hersteller liefert, eine Änderung an seinen Daten muss nur aneiner Stelle vorgenommen werden. Alle Abfragen greifen dann automatisch überdie Fremd-/Primärschlüsselbeziehungen auf den aktuellen Datenbestand des Her-stellers zu.

Aus dem bisher Gesagten ergibt sich, dass Fremd- und Primärschlüssel zwarzusammenhängen, aber völlig unterschiedliche Funktionen innerhalb einerDatenbank erfüllen. Fremdschlüssel haben zum Beispiel keine Auswirkung aufdie Eindeutigkeit von Datensätzen, wie sie von Primärschlüsseln erzwungen undsichergestellt wird. An Abbildung 2.7 können Sie erkennen, was für eine fataleAuswirkung es hätte, wenn dies der Fall wäre. Das Produkt mit der ID 317 kannsowohl von dem Lieferanten mit der ID 50 als auch von dem Lieferanten mit derID 84 geliefert werden. Wenn ein Fremdschlüssel Eindeutigkeit erzwingenwürde, hieße das, dass ein Produkt nur von einem Lieferanten geliefert werdenkönnte oder dass ein Lieferant nur ein Produkt liefern könnte! Es ist also durch-aus sinnvoll, dass von einem Fremdschlüssel ein Primärschlüssel mehrfach refe-renziert wird.

Abbildung 2.6 enthält ein weiteres in diesem Zusammenhang wichtiges Detail:Die Tabelle ProductVendor verfügt offensichtlich über einen geschickt gewähltenkombinierten Primärschlüssel, der aus den Spalten ProductID und VendorIDzusammengesetzt ist. Zu erkennen ist dies an dem Vorhandensein von zweiSchlüsselsymbolen in der Struktur der Tabelle. Warum ist die Wahl dieses kombi-nierten Primärschlüssels nun so elegant? Ganz einfach: Die Tabelle speichertInformationen, welcher Lieferant welches Produkt zu welchen Konditionen lie-fern kann, und diese Information sollte ebenfalls nur einmal in der Datenbankenthalten sein. Der aus den Spalten ProductID und VendorID zusammengesetztePrimärschlüssel der Tabelle erfüllt genau diesen Zweck: Der Zusammenhang zwi-schen einem Produkt und einem Lieferanten kann nur einmal abgespeichert wer-den, jede weitere Zuordnung würde eine Primärschlüsselverletzung verursachen!

Im Fall solcher kombinierter Primärschlüssel müssen Sie eine weitere Tatsachebei der Definition von Fremdschlüsseln beachten:

Um bei dem Beispiel der Tabelle ProductVendor zu bleiben: Ein Fremdschlüsseleiner anderen Tabelle, der sich auf den kombinierten Primärschlüssel dieserTabelle beziehen würde, könnte nur dann erstellt werden, wenn er alle Spalten

Hinweis

Ein Fremdschlüssel muss einen Primärschlüssel immer vollständig referenzieren!

9783836216937.book Seite 72 Freitag, 26. November 2010 10:32 10

Page 39: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

73

Relationale Datenbanken 2.2

(ProductID und VendorID) des Primärschlüssels enthielte. Ein Fremdschlüssel,der sich nur auf einen Teil des Primärschlüssels – also zum Beispiel lediglich aufdie Spalte ProductID der ProductVendor-Tabelle – beziehen würde, ergäbe keinenSinn und kann daher auch nicht erstellt werden!

Abschließende Bemerkungen zu Schlüsseln

Vielleicht haben Sie sich beim Lesen des Abschnitts über die Schlüssel gefragt, aufwelche Weise man anhand von Abbildung 2.6 erkennen konnte, welche dieFremdschlüsselspalten in der Tabelle ProductVendor sind. Die Abbildung zeigt janur an, dass Fremdschlüsselbeziehungen zwischen den Tabellen bestehen – aufwelche Spalten sich diese Beziehungen beziehen, kann aus Abbildung 2.6 nichtabgelesen werden. Zu diesem Zweck stellt SQL Server andere Möglichkeiten zurVerfügung. Häufig sind – sowohl in der Beispieldatenbank AdventureWorks wieauch in der Praxis – Primär- und die entsprechenden Fremdschlüsselspaltengleich benannt, was die Übersichtlichkeit erhöht, aber nicht zwingend so seinmuss. Abhängige – also an einem Fremdschlüssel beteiligte Spalten – könnendurchaus eine andere Bezeichnung besitzen als die entsprechenden Spalten desPrimärschlüssels!

Im Zusammenhang mit Fremdschlüsseln stellt sich zudem immer wieder dieFrage, auf welche Art Spalte sich ein Fremdschlüssel beziehen kann. Kann sichein Fremdschlüssel auf eine beliebige Spalte beziehen beziehungsweise diesereferenzieren? Die Antwort auf diese Frage lautet ganz klar »Nein«, ein Fremd-schlüssel kann nur auf eine Spalte gesetzt werden, die Eindeutigkeit sicherstellt.

In dieser Einführung wurde immer davon ausgegangen, dass es sich bei dieserEindeutigkeit sicherstellenden Spalte – beziehungsweise Spalten im Fall eineskombinierten Primärschlüssels – um den Primärschlüssel einer Tabelle handelt.Streng genommen ist dies nicht korrekt, wie wir in Kapitel 9, »Erstellen vonTabellen«, erläutern. Da dies aber einen selten verwendeten Sonderfall darstelltund dieses Kapitel als grundlegende Einführung in die Struktur relationalerDatenbanken gedacht ist, soll diese Tatsache an dieser Stelle keine weitereBerücksichtigung finden.

2.2.4 Beziehungsarten

Dinge, die in einer Datenbank gespeichert werden sollen, können in verschiede-nen Beziehungen zueinander stehen. Werden diese Dinge aus der realen Welt inForm von Tabellen in eine Datenbank implementiert, müssen diese Beziehungenbeim Entwurf der Tabellen natürlich berücksichtigt werden und finden sich inder Beziehung zwischen den Tabellen wieder. In der Datenbanktheorie wird zwi-schen drei verschiedenen Beziehungsarten unterschieden, die im Folgenden

9783836216937.book Seite 73 Freitag, 26. November 2010 10:32 10

Page 40: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

74

Datenbankgrundlagen2

anhand des bisher verwendeten Beispiels der Produkte und Lieferanten bespro-chen werden.

1:1-Beziehung

Eine 1:1-Beziehung liegt dann vor, wenn ein Objekt nur mit einem anderenObjekt in Beziehung stehen kann. Eine 1:1-Beziehung würde im vorliegendenBeispiel bedeuten, dass jeder Lieferant nur ein Produkt liefern könnte und dass –umgekehrt – ein Produkt nur von einem einzigen Lieferanten geliefert werdenkönnte. Abbildung 2.8 stellt diesen Sachverhalt grafisch dar.

Abbildung 2.8 Schematische Darstellung einer 1:1-Beziehung

Dinge, die in einer 1:1-Beziehung zueinander stehen, kommen in der realen Weltwie auch in Tabellenform innerhalb einer Datenbank nur selten vor, wie an demeben konstruierten Beispiel zu erkennen ist. Aus Datenbanksicht könnte manauch einwenden, dass, wenn zwischen den Lieferanten und den Produkten eine1:1-Beziehung herrscht, die Informationen des Lieferanten und seines Produktsdoch auch gleich in einer Tabelle abgespeichert werden könnten. Stellen Sie sichdazu die beiden Blöcke der Lieferanten und Produkte einfach zu einem großenBlock – eben einer Tabelle mit beiden Informationsarten – zusammengeschobenvor. Interessanterweise entsteht eine 1:1-Beziehung zwischen Tabellen vor allemdann, wenn sie künstlich durch das genaue Gegenteil erzeugt wird: Eine Tabellewird in zwei Tabellen aufgeteilt. In Frage kommt dieses Verfahren dann, wenneine Tabelle über Spalten verfügt, die sehr große Datenvolumina enthalten. Fallsdiese Informationen nicht bei jeder Abfrage benötigt werden, können die ent-sprechenden Spalten in eine zweite Tabelle ausgelagert werden, um das Datenvo-lumen während Abfragen zu minimieren.

1:n-Beziehung

Die 1:n-Beziehung ist eine Beziehungsart, die in der realen Welt sehr häufig vor-handen ist. Eine relationale Datenbank besteht fast ausschließlich aus diesemBeziehungstyp der Tabellen untereinander. Eine 1:n-Beziehung liegt dann vor,wenn ein Objekt mit beliebig vielen anderen Objekten in Beziehung stehen kann.Das »n« in der Bezeichnung ist im Sinne von »beliebig viele«, also null bis unend-lich, zu interpretieren. Für die Lieferanten und Produkte hieße das beispiels-weise, dass ein Lieferant mehrere Produkte liefern kann, ein Produkt aber nureinen Lieferanten haben kann, wie in Abbildung 2.9 angedeutet.

Lieferant Produkt

Produkt

Produkt

Lieferant

Lieferant

9783836216937.book Seite 74 Freitag, 26. November 2010 10:32 10

Page 41: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

75

Relationale Datenbanken 2.2

Abbildung 2.9 Schematische Darstellung einer 1:n-Beziehung

Realisiert würde so eine Beziehung zwischen den Tabellen, indem Sie in derTabelle Product einen Fremdschlüssel einfügen, der auf den Primärschlüssel derTabelle Vendor verweist.

m:n-Beziehung

Der m:n-Beziehungstyp kommt in der Realität ebenfalls häufig vor, bei derUmsetzung in Tabellenform stellt er eine Besonderheit dar, wie weiter untennoch ausgeführt wird. Eine m:n-Beziehung stellt quasi die doppelte Anwendungder 1:n-Beziehung dar: Ein Objekt kann mit mehreren Objekten in Beziehung ste-hen, und die Umkehrung – alle Objekte der zweiten Art können mit beliebig vie-len Objekten der ersten Art in Beziehung stehen – trifft ebenfalls zu. Die Defini-tion einer m:n-Beziehung mag vielleicht etwas komplex erscheinen, am Beispielder Lieferanten und Produkte ist die in der AdventureWorks-Datenbank vorlie-gende m:n-Beziehung zwischen den Lieferanten und den Produkten aber überfolgende Überlegung zu erkennen: Ein Lieferant kann mehrere Produkte liefern,und die Umkehrung gilt ebenfalls, ein Produkt kann also von mehreren Lieferan-ten geliefert werden. Abbildung 2.10 soll diesen Sachverhalt verdeutlichen.

Abbildung 2.10 Schematische Darstellung einer m:n-Beziehung

Eine m:n-Beziehung zu erkennen ist im Grunde genommen nicht sonderlichschwer. Immer, wenn Sie einen Satz wie einen der folgenden bilden können,liegt eine m:n-Beziehung vor:

� Ein Autor kann mehrere Bücher schreiben, ein Buch kann mehrere Autorenhaben.

� Ein Fahrzeug kann von mehreren Kunden gemietet worden sein, ein Kundekann mehrere Fahrzeuge gemietet haben.

� Eine Maschine kann aus mehreren Teilen bestehen, ein Teil kann in mehrerenMaschinen verbaut sein.

Lieferant Produkt

Produkt

Produkt

Lieferant

Lieferant

Lieferant Produkt

Produkt

Produkt

Lieferant

Lieferant

9783836216937.book Seite 75 Freitag, 26. November 2010 10:32 10

Page 42: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

76

Datenbankgrundlagen2

Als Vorgriff auf den im nächsten Kapitel behandelten logischen Datenbankent-wurf sei erwähnt, dass Sie bei der Feststellung einer m:n-Beziehung immer denGrundsatz beachten sollten, dass eine m:n-Beziehung durch drei Tabellen aufge-löst wird, wie es in der AdventureWorks-Datenbank am Beispiel der Tabelle Pro-ductVendor geschehen ist. Nur durch diese dritte, mittlere Tabelle kann im Falleiner vorliegenden m:n-Beziehung effektiv Redundanz vermieden werden: AlleDatensätze der Lieferanten werden nur einmal in der entsprechenden TabelleVendor erfasst, alle Einzelheiten zu den Produkten werden nur einmal in derTabelle Product erfasst, und jede Information, die sich auf den Zusammenhangzwischen einem Produkt und einem Lieferanten bezieht (wie zum Beispiel Liefer-zeit und Mindestbestellmenge) stellt nichts anderes als einen weiteren Datensatzin der zwischen den Tabellen Product und Vendor angeordneten Tabelle Product-Vendor dar. Tabellen dieser Art werden auch als assoziative Tabellen bezeichnet,da sie den Zusammenhang zwischen zwei anderen Tabellen herstellen, und dieImplementierung einer m:n-Beziehung in Form von 3 Tabellen wird auch als Auf-lösung einer m:n-Beziehung bezeichnet.

Abschließend soll betrachtet werden, welche Beziehungsart zwischen Tabelleneiner relationalen Datenbank am häufigsten anzutreffen ist:

� 1:1-BeziehungDiese Beziehungsart kann vorkommen, stellt aber sicherlich einen Sonderfalldar, wie oben bereits erwähnt wurde.

� 1:n-BeziehungPraktisch alle Tabellen einer relationalen Datenbank stehen in einer 1:n-Bezie-hung zueinander. Deutlich wird dies, wenn man bedenkt, dass 1:1-Beziehun-gen recht selten vorhanden sind und m:n-Beziehungen in drei Tabellen aufge-löst werden, was wiederum in 1:n-Beziehungen resultiert, wie im folgendenPunkt näher beschrieben wird.

� m:n-BeziehungWird eine m:n-Beziehung in drei Tabellen aufgelöst, wie in Abbildung 2.6gezeigt, resultiert dies in zwei 1:n-Beziehungen: Die ID eines Lieferanten kannbeliebig häufig in der ProductVendor-Tabelle erscheinen, je nachdem, wieviele Produkte der Lieferant liefert, und ebenso kann die ID eines Produktsmehrfach erscheinen in Abhängigkeit davon, wie viele Lieferanten dieses Pro-dukt liefern. Die Tabelle der Lieferanten steht also mit der ProductVendor-Tabelle in einer 1:n-Beziehung (ein Lieferant kann mehrere Produkte liefern),ebenso steht die Tabelle der Produkte in einer 1:n-Beziehung mit der Product-Vendor-Tabelle, da ein Produkt von mehreren Lieferanten geliefert werdenkann. Eine aufgelöste m:n-Beziehung resultiert also in zwei 1:n-Beziehungen,was erklärt, dass in einer korrekt entworfenen Datenbank fast ausschließlich1:n-Beziehungen vorhanden sind.

9783836216937.book Seite 76 Freitag, 26. November 2010 10:32 10

Page 43: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

77

Datenbankmanagementsystem 2.3

2.3 Datenbankmanagementsystem

Bis hierhin war in dieser Einleitung immer entweder von der Datenbank, demDatenbankserver oder dem Datenbanksystem die Rede. An dieser Stelle soll einweiterer Begriff eingeführt werden: der des Datenbankmanagementsystems(abgekürzt DBMS) oder, bezogen auf relationale Datenbanken, der Begriff desrelationalen Datenbankmanagementsystems (abgekürzt RDBMS). Hierzu sollerläutert werden, was die Eigenschaften, Komponenten und Hauptaufgabeneines Datenbankmanagementsystems sind.

Betrachten Sie dazu Abbildung 2.11, die schematisch die Komponenten und denAufbau eines Datenbankservers zeigt und die Struktur eines Datenbankmanage-mentsystems verdeutlichen soll.

Die gezeigten Komponenten stehen nur symbolisch für einen bestimmten Sach-verhalt und können beliebig erweitert (skaliert) werden. So können reale Anwen-dungen weitere Komponenten enthalten, auf die an dieser Stelle aber nicht ein-gegangen werden soll.

Abbildung 2.11 Aufbau eines Datenbankmanagementsystems

Die dargestellten Komponenten sind:

� Der ClientDer Client repräsentiert eine Anwendung, die auf die Datenbank zugreift,indem sie zum Beispiel eine Abfrage an die Datenbank stellt, was durch denauf das Datenbanksystem zeigenden Pfeil angedeutet ist. Die Abfrage resul-tiert in einer Antwort des Servers, symbolisiert durch den rückläufigen Pfeil.Die hier gezeigte Anordnung mit nur einem Client ist natürlich nur als Bei-spiel gemeint und entspricht selten der Praxis. Heutige Datenbankserver kön-nen – in Abhängigkeit vom jeweils verwendeten Programm – bis zu mehrereTausend Clients gleichzeitig unterstützen.

Client

Datenbank- Verwaltung

phys. DB

Administrator

9783836216937.book Seite 77 Freitag, 26. November 2010 10:32 10

Page 44: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

78

Datenbankgrundlagen2

� Die DatenbankverwaltungDie Datenbankverwaltung repräsentiert das eigentliche Serverprogramm. AusSicht des Anwenders besteht die Hauptaufgabe des Servers darin, eineAbfrage – wie oben gezeigt – entgegenzunehmen, zu bearbeiten und einErgebnis zurückzuliefern. Diese auf den ersten Blick recht triviale Aufgabebedeutet jedoch einen nicht unerheblichen internen Aufwand, wie an einigenPunkten deutlich werden soll:

Bevor ein Benutzer eine Abfrage ausführen darf, muss das System überprüfen,ob er über die Berechtigung verfügt, die angeforderten Daten zu erhalten.

Die Abfrage muss auf syntaktische Korrektheit überprüft werden, außerdemmuss festgestellt werden, ob zum Beispiel die angegebenen Tabellennameninnerhalb der Datenbank existieren.

Außerdem arbeiten moderne Datenbanksysteme eine Abfrage nicht einfachstur ab, sondern legen eine Strategie fest, wie die Abfrage möglichst schnellausgeführt werden kann.

Neben der reinen Bearbeitung von Abfragen muss der Server zahlreicheinterne Prozesse verarbeiten, die für die Funktion des Systems notwendig sind.

� Der AdministratorEin Administrator ist der Verwalter einer Datenbank beziehungsweise desDatenbankservers. Typische Aufgaben eines Administrators sind die Vergabevon Benutzerrechten, die Durchführung von Sicherungen und so weiter. Aberauch viele andere Aufgaben – wie das Anlegen einer Tabelle – erfordern admi-nistrative Rechte. Im weiteren Verlauf dieses Abschnitts soll mit dem Begriff»Administrator« immer ein Benutzer mit allen zur Verfügung stehendenBerechtigungen gemeint sein.

� Die (physische) DatenbankDer in der Zeichnung dargestellte Zylinder wird normalerweise als Symbol füreine ganze Datenbankanwendung verwendet. Hier soll er nur für den physi-schen Speicherort der Datenbankdateien stehen. In der Praxis können aus Per-formancegründen verschiedene Datenbankdateien sogar auf verschiedeneDatenträger verteilt sein.

Die gestrichelte Linie in Abbildung 2.11 soll die »äußere Grenze« des Datenbank-managementsystems bezeichnen. Wie Sie erkennen können, ist dies auch dieGrenze für den Client. Seine Abfrage wird an dieser Stelle an das System überge-ben, und dies liefert bei Erfolg ein Abfrageergebnis zurück. Der Administratorkann – durch die Pfeile angedeutet – tiefer in das System eingreifen, was für seineAufgabe ja auch zwingend notwendig ist. Bei genauer Betrachtung wird Ihnenaber auffallen, dass weder der Client noch der Administrator direkten Zugriff aufdie physischen Datenbankdateien hat. Zwar kann ein Administrator oder einBenutzer – entsprechende Rechte vorausgesetzt – Datensätze aus der Datenbank

9783836216937.book Seite 78 Freitag, 26. November 2010 10:32 10

Page 45: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

79

Datenbankmanagementsystem 2.3

löschen, hinzufügen oder verändern, aber er erhält niemals direkten Zugriff aufdie Daten in den entsprechenden Dateien, sondern muss dem Datenbank-managementsystem den Auftrag erteilen, die entsprechenden Modifikationenvorzunehmen.

Warum darf selbst ein Administrator, der ja über alle Rechte innerhalb des Sys-tems verfügt, nicht direkt auf Daten zugreifen? Warum muss auch sein Zugriffüber das Datenbankmanagementsystem erfolgen? Um diesen scheinbarenWiderspruch zu verstehen, muss man sich die wichtigste Aufgabe eines DBMSvor Augen halten:

Gesetzt den Fall, ein Administrator hätte direkten Zugriff auf den physischenDatenspeicher und würde unter Umgehung des Datenbanksystems aufirgendeine Art und Weise eine größere Anzahl von Datensätzen verändern, waseine gewisse Zeit in Anspruch nimmt, und während dieses Vorgangs träte einunvorhergesehenes Ereignis wie ein Hardwaredefekt oder eine Stromunterbre-chung ein. Was wäre die Folge? Man wüsste nicht, ob der Vorgang vor der Stö-rung abgeschlossen wurde oder – wenn dies nicht der Fall gewesen sein sollte –an welcher Stelle er abgebrochen wurde, also welche Datensätze bereits geändertwurden und welche nicht. Kurz gesagt, die Datenintegrität wäre nicht mehrsichergestellt, und es gäbe keine Möglichkeit (wenn keine Sicherung der Daten-bank vor Beginn des Vorgangs durchgeführt wurde), die Datenbank wieder ineinen definierten Zustand zu bringen – also zum Beispiel in den Zustand vorBeginn der Operation. Im schlimmsten Fall wäre die Datenbank dadurchunbrauchbar geworden. Um dies zu vermeiden, verfolgen Datenbankmanage-mentsysteme relevante Änderung an der Datenbank und speichern sie in einemProtokoll ab. Anhand solcher Protokolldateien können Sie durchgeführte Ände-rungen rückgängig machen und die Integrität der Daten wiederherstellen.

Da eine solche Protokollierung auch für die von einem Benutzer mit administra-tiven Rechten vorgenommenen Änderungen durchgeführt werden muss, kannauch ein Administrator das Datenbankmanagementsystem nicht umgehen unddaher nicht direkt auf die Datenbankdateien zugreifen.

Hinweis

Die Hauptaufgabe eines DBMS ist es, die Datenintegrität zu gewährleisten. Dateninte-grität bedeutet die Zuverlässigkeit und Fehlerfreiheit von Daten in der Datenbank.

Hinweis

Datenbankmanagementsysteme ermöglichen durch Verwendung von Protokolldateiendas Wiederherstellen von Daten.

9783836216937.book Seite 79 Freitag, 26. November 2010 10:32 10

Page 46: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

80

Datenbankgrundlagen2

2.4 Integritätsarten

Datenbankmanagementsysteme müssen die Möglichkeit bieten, Datensätze beider Eingabe oder bei Änderungen auf ihre Gültigkeit zu überprüfen. Da sich dieseÜberprüfungen auf die Korrektheit der Daten beziehen, werden sie als Integri-tätsarten bezeichnet. Man unterscheidet zwischen drei festgelegten Integritätsar-ten (siehe Abbildung 2.12) und der benutzerdefinierten Integrität.

Abbildung 2.12 Die drei fundamentalen Integritätsarten

Entitätsintegrität

Die Entitätsintegrität bezieht sich auf die einzelnen Datensätze einer Tabelle. DieForderung nach Entitätsintegrität ist dann erfüllt, wenn ein Datensatz eindeutigangesprochen werden kann. Bezogen auf ein Datenbanksystem heißt dies nichtsanderes, als dass ein Datenbanksystem die Verwendung von Primärschlüsselnerlauben und die Eindeutigkeit der Schlüsselwerte sicherstellen muss.

Domänenintegrität

Die Domänenintegrität bezieht sich auf die Werte in einer Spalte. Als Domänewird in der Datenbanktheorie die Menge der zulässigen Werte einer Spaltebezeichnet. Zur Sicherstellung der Domänenintegrität muss ein Datenbanksys-tem also die Möglichkeit bieten, Spaltenwerte auf ihre Gültigkeit zu überprüfen.So stellt ein Datenbanksystem grundsätzlich sicher, dass in eine numerischeSpalte nur Zahlen eingetragen werden können. Diese können zusätzlich auf ihrenWertebereich überprüft werden. Ein anderes Beispiel ist die Überprüfung vonalphanumerischen Werten auf ein bestimmtes Format.

Referenzielle Integrität

Die referenzielle Integrität bezieht sich auf die Verknüpfungen zwischen denTabellen einer Datenbank. Zur Wahrung der referentiellen Integrität muss einDatenbanksystem die Fehlerfreiheit der Fremd- und Primärschlüsselbeziehungengarantieren können. Ein Datenbanksystem muss also zum Beispiel das Löscheneines Lieferanten in der Vendor-Tabelle verweigern, solange noch ein Eintrag inder ProductVendor-Tabelle als Fremdschlüssel auf diesen Lieferanten existiert.

Domänenintegrität

referenzielleIntegrität

Entitäts-integrität

9783836216937.book Seite 80 Freitag, 26. November 2010 10:32 10

Page 47: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

81

Integritätsarten 2.4

Dieser Fremdschlüsselwert würde sonst auf einen nicht mehr existierenden Pri-märschlüsselwert verweisen, also quasi ins Leere zeigen.

Benutzerdefinierte Integrität

Unter benutzerdefinierte Integrität fallen alle sonstigen in der Datenbank imple-mentierten Regeln und Einschränkungen, die sich aus dem jeweiligen Einsatz-zweck der Datenbank ergeben und nicht von den drei vorher besprochenenIntegritätsarten abgedeckt werden. Als Beispiel hierzu bieten moderne Daten-banksysteme die Möglichkeit, die Gültigkeit eines Datensatzes anhand von Wer-ten in anderen Tabellen zu überprüfen, ohne dass die Tabellen in einer Fremd-/Primärschlüsselbeziehung stehen müssen.

9783836216937.book Seite 81 Freitag, 26. November 2010 10:32 10

Page 48: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

221

In diesem Kapitel werden die Grundlagen der SQL-Programmierung besprochen, die als Voraussetzung für die in späteren Kapiteln be-handelten Themen notwendig sind.

6 Grundlagen der SQL-Programmierung

Die Abfragesprache SQL stellt nicht nur, wie der Name vermuten lässt, Befehlezur Abfrage von Datenbanken zur Verfügung, sondern ermöglicht auch dieErstellung von SQL-Programmen. Der Sprachumfang mag – im Vergleich zu ande-ren modernen Programmiersprachen – relativ gering sein, er ist aber ausreichend,um alle in der Datenbankprogrammierung auftretenden Aufgaben zu lösen.

6.1 Das Stapeltrennzeichen GO

Das sogenannte Stapeltrennzeichen GO ist eine Anweisung, die in SQL-Skriptenhäufig Verwendung findet. In Abbildung 6.1 ist es am Beispiel des Installations-skripts der AdventureWorks-Datenbank dargestellt.

Abbildung 6.1 Verwendung des Stapeltrennzeichens GO

Das Stapeltrennzeichen, das auch Batch-Trennzeichen (engl.: batch; Stapel, Bün-del) genannt wird, stellt keine SQL-Anweisung dar. Sie werden bei der Verwen-dung von GO feststellen, dass die Anweisung im Abfragefenster nicht farblich

9783836216937.book Seite 221 Freitag, 26. November 2010 10:32 10

Page 49: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

222

Grundlagen der SQL-Programmierung6

markiert, sondern schwarz dargestellt wird, was auf den Umstand hinweist, dasses sich bei dieser Anweisung nicht um ein SQL-Schlüsselwort handelt. Tatsächlichsteht die Anweisung GO in keinem Zusammenhang mit dem Datenbankserver,sondern ist ein Editor-Befehl, d.h. eine Steueranweisung des Management Stu-dios, die eine Folge von SQL-Anweisungen in mehrere Abschnitte unterteilt, diedann einzeln zum Server gesendet werden. Ein solcher Abschnitt wird als Stapeloder Batch bezeichnet. Die folgenden beiden Abfragen werden also als ein Stapelan den Server gesendet:

Beispiel 1:SELECT * FROM Production.Product;SELECT * FROM Purchasing.Vendor;

Durch Einfügen einer GO-Anweisung werden diese Anweisungen in zwei Stapelaufgeteilt und dem Server getrennt übermittelt:

Beispiel 2:SELECT * FROM Production.Product;GOSELECT * FROM Purchasing.Vendor;

Zum Vergleich: Der gleiche Effekt hätte ohne die Verwendung von GO erzielt wer-den können, indem man die Abfragen durch Markierung mit der Maus getrenntausgeführt hätte. Auch in diesem Fall wären zwei Stapel an den Server gesendetworden.

Sie werden, falls Sie die beiden Beispiele ausprobiert haben, keinerlei Unter-schiede in der Ausgabe festgestellt haben. Beide Ergebnisse sind vollkommenidentisch, was die Frage aufkommen lässt, zu welchem Zweck GO verwendet wer-den kann, wenn keine unmittelbare Auswirkung dieser Anweisung festzustellenist. Es gibt jedoch Fälle, in denen GO zwingend Verwendung finden muss. Eintypisches Beispiel stellt ein automatisch ablaufendes Skript dar. Innerhalb einessolchen Skripts können Befehle enthalten sein, die nur dann ausgeführt werdenkönnen, wenn sie die erste Anweisung eines Stapels sind. Um die Aufteilungeines solchen Skripts in mehrere Dateien, die dann einzeln ausgeführt werdenmüssten, zu vermeiden, wird innerhalb des Skripts vor den entsprechendenBefehlen ein neuer Stapel durch die Angabe von GO erzwungen.

Da es sich bei dem Stapeltrennzeichen nicht um eine SQL-Anweisung handelt,können Sie auch einen anderen Ausdruck anstelle von GO als Stapeltrennzeichendefinieren. Das entsprechende Dialogfeld ist in Abbildung 6.2 abgebildet. Sie fin-den es unter Extras � Optionen unter dem Eintrag Abfrageausführung.

9783836216937.book Seite 222 Freitag, 26. November 2010 10:32 10

Page 50: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

223

(Lokale) Variablen 6.2

Abbildung 6.2 Möglichkeit der Trennzeichendefinition

6.2 (Lokale) Variablen

Wie andere Programmiersprachen auch bietet SQL die Möglichkeit, Variablen zuverwenden. Eine Variable stellt einen Zwischenspeicher dar, in dem ein verän-derlicher Wert abgespeichert und später wieder ausgelesen werden kann.

6.2.1 Variablendeklaration

Bei der Verwendung von Variablen unter SQL Server gibt es eine Besonderheit zubeachten, was die Variablennamen betrifft: Diese müssen mit dem @-Zeichenbeginnen! Außerdem muss eine Variable, bevor sie verwendet werden kann,über die DECLARE-Anweisung deklariert werden:

Syntax:DECLARE variablenname datentyp;

Beispiel:DECLARE @zahl integer;

Die Deklaration einer Variablen – also die Zuweisung eines Datentyps – ist not-wendig, da der Datenbankserver für die Verwendung einer Variablen Speicher-platz und andere Ressourcen reservieren muss, weil die verschiedene Datentypeneinen unterschiedlichen Speicherbedarf und Verwaltungsaufwand erfordern. DieAuswahl des Datentyps hängt dabei von der zu speichernden Information ab.

9783836216937.book Seite 223 Freitag, 26. November 2010 10:32 10

Page 51: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

224

Grundlagen der SQL-Programmierung6

Mehrere Variablen in einer einzigen DECLARE-Anweisung erstellen Sie, indem Siedie Deklarationen in einer Liste, durch Kommas getrennt, angeben:

Syntax:DECLARE deklarationsliste;

Beispiel:DECLARE @zahl integer, @text varchar(20);

6.2.2 Wertezuweisung an eine Variable

Die Wertezuweisung an eine Variable erfolgt über die SET-Anweisung.

Syntax:SET variablenname = wert;

Beispiel 1:DECLARE @zahl integer, @text varchar(20);SET @zahl = 42;SET @text = 'zweiundvierzig';

Obwohl es möglich ist, mehrere Variablen innerhalb einer DECLARE-Anweisung zuerstellen, erlaubt die SET-Anweisung nicht die Wertezuweisung an mehrere Vari-ablen. Das heißt, Sie müssen für jede Zuweisung eines Werts an eine Variableeine gesonderte SET-Anweisung verwenden. Ebenso wenig ist es zulässig – wie inanderen Programmiersprachen teilweise möglich –, eine Variable im Zuge derDeklaration mit einem Wert vorzubelegen. Die erste Wertezuweisung an eineneu erstellte Variable – auch als Initialisierung bezeichnet – muss in SQL in einergesonderten SET-Anweisung erfolgen. Sie sollten es sich zur Regel machen, eineneu erstellte Variable immer zu initialisieren, es sei denn, Sie sind sich sicher,dass die Variable im späteren Programmablauf einen definierten Wert zugewie-sen bekommt. Falls Sie mit nichtinitialisierten Variablen arbeiten, sollten Sie sichimmer der folgenden Tatsache bewusst sein:

Die Nichtbeachtung dieser Tatsache resultiert schnell in Programmierfehlern, wiedas folgende Beispiel zeigt:

Beispiel 2:DECLARE @zahl integer;SET @zahl = @zahl + 42;SELECT @zahl;

Hinweis

Wird einer Variablen nach der Deklaration kein Wert mittels SET zugewiesen, enthältdiese Variable keinen Wert, also NULL!

9783836216937.book Seite 224 Freitag, 26. November 2010 10:32 10

Page 52: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

225

(Lokale) Variablen 6.2

Als Ausgabe erfolgt NULL, da zu einer nichtinitialisierten Variablen – also einemNULL-Wert – eine Zahl addiert wird. Da NULL aber nicht der Zahl 0 entspricht, son-dern einen nicht vorhandenen Wert repräsentiert, ist das Ergebnis ebenfalls NULL.

6.2.3 Kombinierte Deklaration und Wertezuweisung

Mit SQL Server 2008 wurde die Möglichkeit eingeführt, Variablen in einer ein-zelnen Anweisung zu deklarieren und zu initialisieren. Dies geschieht in der fol-genden Form:

Syntax:DECLARE variablenname datentyp = wert;

Das folgende Beispiel zeigt die Deklaration und Initialisierung einer einzelnenVariablen:

Beispiel:DECLARE @zahl integer = 42;

Es lassen sich ebenfalls mehrere Variablen innerhalb einer Anweisung deklarie-ren und initialisieren, indem die einzelnen Variablen durch Kommas getrenntwerden:

Syntax:DECLARE variablenname datentyp = wert, variablenname datentyp = wert;

Das folgende Beispiel zeigt die kombinierte Deklaration und Initialisierungzweier Variablen.

Beispiel:DECLARE @zahl integer = 42, @text varchar(20) = 'zweiundvierzig';

Um Lesern, die weiterhin SQL Server 2005 verwenden, ein Umschreiben der Bei-spiele zu ersparen, verwenden wir im weiteren Verlauf des Buches die klassischeSyntax.

6.2.4 Inkrement und Dekrement

In SQL Server 2008 wurden zwei neue Operatoren eingeführt, um einen Wert zuerhöhen (Inkrement) beziehungsweise zu verringern (Dekrement). Gerade Vari-ablen müssen häufig (z.B. beim Durchlaufen einer Schleife) im Wert erhöht oderverringert werden. Bisher war die Bildung des Inkrements und Dekrements in SQLServer nur in den nachfolgend am Beispiel einer Variablen gezeigten Formen mög-lich, die nicht mehr dem Stand moderner Programmiersprachen entsprachen:

9783836216937.book Seite 225 Freitag, 26. November 2010 10:32 10

Page 53: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

226

Grundlagen der SQL-Programmierung6

Beispiel:DECLARE @int integer;SET @int=42;SET @int=@int+1;SET @int=@int-1;

Unter Verwendung der neuen Operatoren += und -= kann diese Zuweisung ele-ganter erfolgen. Für das Inkrement gilt die folgende Syntax:

Syntax:wert+=vergrößerung

Für die Bildung des Dekrements entsprechend die nachstehende Syntax.

Syntax:wert-=verminderung

Das oben angegebene Beispiel hat unter Verwendung dieser Operatoren das fol-gende Aussehen:

Beispiel:DECLARE @int integer;SET @int=42;SET @int+=1;SET @int-=1;

6.2.5 Gültigkeitsbereich von Variablen

Eine Variable stellt kein dauerhaftes Datenbankobjekt dar – wie zum Beispiel eineTabelle –, im Gegenteil: Variablen werden zu einem bestimmten Zweck erstellt,verwendet und danach automatisch gelöscht. Es ist also nicht notwendig (und auchnicht möglich), eine Variable manuell zu löschen. Es stellt sich also die Frage, wasder Gültigkeitsbereich einer Variablen – der manchmal auch etwas lax als »Lebens-dauer« einer Variablen bezeichnet wird – ist, bis zu welchem Punkt sie also nachihrer Deklaration zu verwenden ist. Diese Frage ist eindeutig zu beantworten:

Um diesen Umstand zu demonstrieren, sollen zunächst in einem Stapel eine Vari-ablendeklaration, eine Wertzuweisung an die Variable und anschließend die Aus-gabe des Variablenwerts erfolgen:

Hinweis

Der Gültigkeitsbereich einer Variablen ist der Stapel, in dem sie deklariert wurde!

9783836216937.book Seite 226 Freitag, 26. November 2010 10:32 10

Page 54: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

227

(Lokale) Variablen 6.2

Beispiel 1:DECLARE @zahl integer;SET @zahl = 42;SELECT @zahl;

Als Ergebnis wird – wie erwartet – die Zahl 42 ausgegeben. Nun wird dem Codeeine zweite SELECT-Anweisung zur Ausgabe des Variablenwerts hinzugefügt, diedurch das Stapeltrennzeichen GO abgetrennt wird:

Beispiel 2:DECLARE @zahl integer;SET @zahl = 42;SELECT @zahl;GOSELECT @zahl;

Als Ergebnis der ersten Abfrage wird zwar weiterhin der Wert 42 ausgegeben, imReiter Meldungen erfolgt jedoch die folgende Ausgabe:

(1 Zeile(n) betroffen)Meldung 137, Ebene 15, Status 2, Zeile 1Die "@zahl"-Skalarvariable muss deklariert werden.

Die Variable @zahl ist also mit Beendigung des Stapels durch GO gelöscht wordenund somit im zweiten Stapel nicht mehr bekannt!

6.2.6 Verwendung von Variablen

Variablen können fast überall dort eingesetzt werden, wo eine feste, ihremDatentyp entsprechende Angabe ebenfalls zulässig wäre. Innerhalb einer SELECT-Anweisung können Sie eine Variable zum Beispiel als Argument innerhalb derWHERE-Klausel verwenden:

Beispiel:Declare @Number char(7);SET @Number = 'AR-5381';SELECT * FROM Production.ProductWHERE ProductNumber = @Number;

6.2.7 Lokale und globale Variablen in SQL Server

In der Überschrift dieses Abschnitts wurde die bisher besprochene Variablenartals lokale Variable bezeichnet, daneben existiert aber auch die Bezeichnung globaleVariable. Diese Bezeichnungen sind etwas irreführend, gerade da in anderen Pro-grammiersprachen die Begriffe »lokal« und »global« eine andere Bedeutung besit-zen als in SQL, wo sich diese Begriffe auf die Verbindung zum Server beziehen.

9783836216937.book Seite 227 Freitag, 26. November 2010 10:32 10

Page 55: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

228

Grundlagen der SQL-Programmierung6

Wenn zum Beispiel eine Variable in einer Verbindung zum Server deklariert wird,ist diese Variable für alle anderen Verbindungen unsichtbar. Aus ihnen herauskann diese Variable weder angesprochen noch ausgelesen werden, sie existiertnur für die Verbindung, in der sie definiert wurde. Es handelt sich daher um einelokale Variable.

Als globale Variablen werden in SQL keine Variablen im oben beschriebenen,herkömmlichen Sinne bezeichnet, sondern Funktionen. Auch diese können ver-schiedene Werte annehmen und zurückgeben. Die Namen vieler Funktionenbeginnen daher – in Anlehnung an die Benennung einer lokalen Variable – mitzwei @-Zeichen, wie Sie Abschnitt 6.5 sehen werden. Funktionen können vonjeder Verbindung aus aufgerufen und abgefragt werden. Daher werden sie auchals globale Variablen bezeichnet, obwohl ihnen kein Wert zugewiesen werdenkann, es sich also nicht um Variablen im herkömmlichen Sinn handelt.

6.2.8 Wertezuweisung an Variablen durch Abfragen

Die Wertezuweisung an eine Variable kann in SQL auf verschiedene Weisenerfolgen. Eine Möglichkeit besteht darin, der Variablen einen bestimmten, vorge-gebenen Wert zuzuweisen, wie weiter oben bereits beschrieben wurde. Es kannin der Datenbankprogrammierung aber durchaus notwendig sein, den Wert einerVariablen im Programm nicht vorzugeben, sondern ihn aus Datensätzen zu ermit-teln, was bedeutet, dass eine Wertzuweisung mit einer SELECT-Anweisung kom-biniert werden muss, wozu in SQL zwei verschiedene Möglichkeiten existieren.

Wertezuweisung mit SET und Abfrage

Die erste Möglichkeit, den aus einer Abfrage ermittelten Wert einer Variablenzuzuweisen, orientiert sich an der bekannten Syntax der Zuweisung von diskre-ten Werten an eine Variable, nur geben Sie in diesem Fall statt des explizitenWerts eine Abfrage an:

Syntax:SET variablenname = (abfrage);

Bei Verwendung dieser Methode der Wertzuweisung ist zu beachten, dass dieAbfrage so definiert sein muss, dass sie als Ergebnis nur einen einzigen Wertzurückliefert. Im folgenden Beispiel wird dieser Umstand nicht beachtet:

Beispiel 1:DECLARE @Number nvarchar(25);SET @Number = (SELECT ProductNumber FROM Production.Product);SELECT @Number;

9783836216937.book Seite 228 Freitag, 26. November 2010 10:32 10

Page 56: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

229

(Lokale) Variablen 6.2

Dieses Beispiel erzeugt die folgende, auszugsweise wiedergegebene Fehlermel-dung:

Meldung 512, Ebene 16, Status 1, Zeile 2Die Unterabfrage hat mehr als einen Wert zurückgegeben.

Lauffähig wird dieser Code erst dann, wenn zum Beispiel durch Verwendung derWHERE-Klausel nur ein einziger Datensatz ausgewählt wird. Zweckmäßigerweisegeschieht dies durch einen Vergleich auf den Primärschlüssel der Tabelle, dieSpalte ProductID:

Beispiel 2:DECLARE @Number nvarchar(25);SET @Number = (SELECT ProductNumber FROM Production.Product WHERE ProductID = 870);SELECT @Number;

Als Ergebnis erhält die Variable den Wert WB-H098.

Abfrage mit kombinierter Wertzuweisung

Die zweite Möglichkeit, einer Variablen ein Abfrageergebnis zuzuweisen, bestehtdarin, die Zuweisung direkt innerhalb einer SELECT-Anweisung vorzunehmen.Diese zweite Möglichkeit unterscheidet sich in einem Punkt signifikant von derim letzten Abschnitt besprochenen Möglichkeit. Dieser Unterschied betrifft dasAbfrageergebnis der verwendeten SELECT-Anweisung. Um diesen Unterschied zuverdeutlichen, soll die fehlerauslösende Abfrage ohne WHERE-Klausel aus dem letz-ten Abschnitt noch einmal gesondert ausgeführt werden:

Beispiel:SELECT ProductNumberFROM Production.Product;

Abbildung 6.3 zeigt die letzten Zeilen des Abfrageergebnisses. Beachten Sie bitteden grau unterlegten letzten Wert des Abfrageergebnisses, WB-H098.

Abbildung 6.3 Abfrageergebnis auf die Produktnummern

9783836216937.book Seite 229 Freitag, 26. November 2010 10:32 10

Page 57: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

230

Grundlagen der SQL-Programmierung6

Um einer Variablen einen Wert innerhalb einer Abfrage innerhalb der SELECT-Anweisung zuzuweisen, geben Sie den Variablennamen gefolgt von dem Gleich-heitszeichen direkt nach SELECT an:

Syntax:SELECT variablenname = spaltennameFROM schemaname.tabellenname;

Interessant in diesem Zusammenhang ist, dass die gleiche Abfrage, die bei derVerwendung mit SET einen Fehler auslöste, innerhalb dieser Anweisung zulässigist:

Beispiel 1:DECLARE @Number nvarchar(25);SELECT @Number = ProductNumberFROM Production.Product;SELECT @Number;

Die in diesem Beispiel verwendete Abfrage liefert – wie Sie oben gesehen haben –mehr als einen Wert, nämlich alle Produktnummern, zurück. Die Variable kannjedoch nur einen einzigen Wert abspeichern. Es stellt sich also die Frage, welchenWert die Variable nach Abarbeitung des Codes enthält. Wie in Abbildung 6.3gezeigt, ist der letzte zurückgegebene Wert der zugrundeliegenden SELECT-Anweisung der Eintrag WB-H098, und genau dieser Wert wird beim Auslesen desVariableninhalts im vorliegenden Beispiel zurückgegeben, wie Abbildung 6.4zeigt.

Abbildung 6.4 Wert der Variablen nach Beendigung des Beispiels

Die Wertzuweisung an eine Variable innerhalb einer SELECT-Anweisung setzt alsoim Gegensatz zu der im letzten Abschnitt besprochenen SET-Anweisung nichtvoraus, dass die verwendete Abfrage nur einen Wert als Ergebnis liefert, sondernes können auch mehrere Werte im Abfrageergebnis verarbeitet werden. Sie kön-nen sich dieses Verhalten so vorstellen, dass jeder innerhalb der Abfrage zurück-gegebene Wert den vorherigen Wert der Variablen überschreibt, so dass am Endeder Ausführung die Variable den zuletzt von der Abfrage zurückgelieferten Wertenthält.

Die Wertezuweisung mittels einer Abfrage, die mehrere Ergebnisse zurückliefert,ist sicherlich ein Sonderfall. In der Regel wird auch bei dieser Methode dieSELECT-Anweisung so definiert, dass das Abfrageergebnis nur aus einem Wert

9783836216937.book Seite 230 Freitag, 26. November 2010 10:32 10

Page 58: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

231

Ablaufsteuerung 6.3

besteht, analog zu der im letzten Abschnitt besprochenen Verwendung der SET-Anweisung. In manchen Fällen kann diese Möglichkeit allerdings auch sehrgeschickt eingesetzt werden, wie das folgende Beispiel verdeutlichen soll. Hierwird die Aggregatfunktion MAX über eine entsprechende Abfrage nachgebildet:

Beispiel 2:DECLARE @Price money;SELECT @Price =ListPriceFROM Production.ProductORDER BY ListPrice;SELECT @Price;

Der Inhalt der Variablen ist in diesem Fall identisch mit dem Wert der entspre-chenden Aggregatfunktion.

6.3 Ablaufsteuerung

Innerhalb von Programmen ist es häufig notwendig, die Abarbeitung von Pro-grammcode zu steuern, um auf bestimmte Umstände zu reagieren oder um einenCodeabschnitt mehrfach nacheinander auszuführen. Die entsprechenden Anwei-sungen einer Programmiersprache, die es ermöglichen, den Ablauf eines Pro-gramms zu beeinflussen, werden unter dem Begriff Ablaufsteuerung zusammen-gefasst. Auch in SQL stehen Sprachelemente zur Ablaufsteuerung zur Verfügung,allerdings ist ihre Anzahl im Vergleich zu anderen Programmiersprachen sehrgering. Es existieren nur wenige, grundlegende Befehle. Diese geringe Auswahlan zur Verfügung stehenden Sprachmitteln erfordert in manchen Fällen eine –verglichen mit anderen Programmiersprachen – etwas umständlichere Program-mierung.

6.3.1 Blöcke

Bei der Verwendung von Befehlen zur Ablaufsteuerung ist es oft notwendig,mehrere SQL-Anweisungen zu einer Einheit, einem sogenannten Block, zusam-menzufassen. Ein Block wird in SQL mit BEGIN eingeleitet und mit END abge-schlossen:

Syntax:BEGIN anweisungen;END

9783836216937.book Seite 231 Freitag, 26. November 2010 10:32 10

Page 59: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

232

Grundlagen der SQL-Programmierung6

Formal können Sie mehrere Anweisungen an beliebiger Stelle innerhalb einesSQL-Skripts mit BEGIN und END zu einem Block zusammenfassen. In der Regelwird dadurch kein Fehler ausgelöst, der Block hat aber auch keine Auswirkungauf die Abarbeitung des Quelltextes, er wird einfach ignoriert. Es gibt jedochauch Fälle, in denen Blöcke in Verbindung mit Befehlen zur Ablaufsteuerungzwingend verwendet werden müssen, wie im Folgenden gezeigt werden wird.

6.3.2 IF…ELSE

Die IF...ELSE-Anweisung stellt die Möglichkeit bereit, verschiedene Codeab-schnitte in Abhängigkeit vom Wahrheitswert eines Ausdrucks auszuführen.

Syntax:IF ausdruckBEGIN anweisungen;ENDELSEBEGIN anweisungen;END

Ergibt die Auswertung des nach IF angegebenen Ausdrucks den logischen Werttrue, so wird der unmittelbar darauf folgende Codeabschnitt – auch IF-Zweiggenannt – ausgeführt, der zweite Teil der Anweisung, also alles nach dem Schlüs-selwort ELSE, wird ignoriert. Ergibt die Auswertung des Ausdrucks den Wertfalse, ist das Verhalten genau umgekehrt, der IF-Zweig wird übersprungen undder nach ELSE folgende Code – entsprechend auch ELSE-Zweig genannt – wirdausgeführt. In beiden Fällen wird dann mit der Abarbeitung von eventuell nachdem Ende der IF...ELSE-Anweisung stehendem Code fortgefahren.

Im folgenden Beispiel wird die IF...ELSE-Anweisung verwendet, um den Inhalteiner Variablen auf einen bestimmten Wert zu testen und mit einer entsprechen-den Ausgabe zu reagieren:

Beispiel 1:DECLARE @Zahl smallint;SET @Zahl = 42;IF @Zahl = 42BEGIN PRINT '@Zahl gleich 42';ENDELSE

9783836216937.book Seite 232 Freitag, 26. November 2010 10:32 10

Page 60: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

233

Ablaufsteuerung 6.3

BEGIN PRINT '@Zahl ungleich 42';ENDPRINT 'Ausführung beendet';

Dieses Beispiel erzeugt die folgende Ausgabe:

@Zahl gleich 42Ausführung beendet

Da der Vergleich als Ergebnis true ergeben hat, wurde lediglich der IF-Zweigdurchlaufen und dann die nach dem Ende von IF...ELSE stehende PRINT-Anwei-sung ausgeführt. Im folgenden Beispiel wird durch die Initialisierung der Variab-len mit einem anderen Wert die Ausführung des ELSE-Zweigs erzwungen:

Beispiel 2:DECLARE @Zahl smallint;SET @Zahl = 43;IF @Zahl = 42BEGIN PRINT '@Zahl gleich 42';ENDELSEBEGIN PRINT '@Zahl ungleich 42';ENDPRINT 'Ausführung beendet';

In diesem Fall kommt es zu folgender Ausgabe:

@Zahl ungleich 42Ausführung beendet

Die Verwendung von IF...ELSE muss nicht immer mit der oben angegebenenSyntax in ihrer vollständigen Form erfolgen. So ist insbesondere die Verwendungdes ELSE-Zweigs optional. Wird er nicht benötigt, kann der zweite Teil derAnweisung – beginnend mit ELSE – einfach entfallen. Eine weitere Abwandlungder Syntax ist dann möglich, wenn der IF- oder ELSE-Zweig nur eine Anweisungumfasst. In diesem Fall können Sie auf die Angabe eines Blocks in dem jeweiligenZweig verzichten. Das folgende Beispiel entspricht von der Funktionalität heralso dem ersten Beispiel dieses Abschnitts, da in diesem Fall sowohl im IF- alsauch im ELSE-Zweig nur eine Anweisung zu bearbeiten ist:

Beispiel 3:DECLARE @Zahl smallint;SET @Zahl = 42;

9783836216937.book Seite 233 Freitag, 26. November 2010 10:32 10

Page 61: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

234

Grundlagen der SQL-Programmierung6

IF @Zahl = 42 PRINT '@Zahl gleich 42';ELSE PRINT '@Zahl ungleich 42';PRINT 'Ausführung beendet';

Manche Programmiersprachen stellen die Möglichkeit zur Verfügung, weitereVergleiche innerhalb der IF-Anweisung vorzunehmen, wenn die vorhergehen-den Vergleiche nicht zutreffend waren. Solche zusätzlichen Vergleiche werdenhäufig mit else if oder ähnlichen Schlüsselwörtern eingeleitet. In SQL ist diesnicht möglich, allerdings können ELSE...IF-Anweisungen geschachtelt werden,wodurch eine entsprechende Funktionalität nachgebildet wird, wie das folgendeBeispiel zeigt:

Beispiel 4:DECLARE @Zahl smallint;SET @Zahl = 42;IF @Zahl <= 50BEGIN IF @Zahl = 42 BEGIN PRINT '@Zahl gleich 42'; END ELSE BEGIN PRINT '@Zahl ungleich 42'; ENDENDELSEBEGIN PRINT '@Zahl größer 50';ENDPRINT 'Ausführung beendet';

Die Ausgabe ist auch in diesem Fall:

@Zahl gleich 42Ausführung beendet

Daran ist zu erkennen, dass sowohl der Vergleich der äußeren IF...ELSE-Anwei-sung (42 <= 50) als auch der Vergleich der eingebetteten IF...ELSE-Anweisung(42 = 42) als Ergebnis true ergeben hat. Beide ELSE-Zweige sind in diesem Fallnicht ausgeführt worden.

9783836216937.book Seite 234 Freitag, 26. November 2010 10:32 10

Page 62: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

235

Ablaufsteuerung 6.3

6.3.3 IF EXISTS

Eine häufig verwendete Abwandlung der IF-Anweisung stellt die IF EXISTS-Anweisung dar, die in Verbindung mit einer SELECT-Abfrage feststellt, ob einbestimmter Datensatz existiert. Oft wird diese Anweisung zum Beispiel in Instal-lationsskripten von Datenbanken verwendet, um durch Abfragen von Systemin-formationen zu ermitteln, ob eine Datenbank gleichen Namens auf dem Serverbereits existiert. Diese müsste dann vor der Installation der neuen Datenbankgelöscht werden.

Die Syntax dieser Anweisung ergibt sich durch die Ergänzung der IF...ELSE-Anweisung um das Schlüsselwort EXISTS und um eine in Klammern angegebeneAbfrage:

Syntax:IF EXISTS (abfrage)BEGIN anweisungen;ENDELSEBEGIN anweisungen;END

Das folgende Beispiel überprüft, ob ein Datensatz mit der Produkt-ID 870 in derTabelle existiert, und reagiert entsprechend:

Beispiel 1:IF EXISTS(SELECT * FROM Production.Product WHERE ProductID = 870)BEGIN PRINT 'Datensatz existiert';ENDELSEBEGIN PRINT 'Datensatz existiert nicht';END

In der Abfrage wird typischerweise – wie im Beispiel gezeigt – kein Spaltenname,sondern das Sternchen als Symbol für alle Spalten angegeben. Die Angabe einesSpaltennamens wäre in diesem Zusammenhang auch nicht sinnvoll, da EXISTSnicht das Vorhandensein des Werts einer Spalte, sondern des Datensatzes prüft.Der im letzten Beispiel verwendete Datensatz enthält beispielsweise in der SpalteSize einen NULL-Wert. Wird die Abfrage auf diese Spalte gestellt, liefert sie trotz-dem das korrekte Ergebnis zurück, wie das folgende Beispiel zeigt:

9783836216937.book Seite 235 Freitag, 26. November 2010 10:32 10

Page 63: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

236

Grundlagen der SQL-Programmierung6

Beispiel 2:IF EXISTS (SELECT Size FROM Production.ProductWHERE ProductID = 870)BEGIN PRINT 'Datensatz existiert';ENDELSEBEGIN PRINT 'Datensatz existiert nicht';END

Die Ausgabe dieses Beispiels ist:

Datensatz existiert

Die Tatsache, dass die entsprechende Spalte dieses Datensatzes einen NULL-Wertenthält, ist also vollkommen irrelevant, weshalb diese Möglichkeit nicht geeignetist, auf das Vorhandensein von NULL-Werten zu testen. Dies sollte – wie immer –über den IS NULL-Operator erfolgen!

6.3.4 WHILE-Schleife

Innerhalb von Programmen ist es häufig notwendig, bestimmte Programm-abschnitte wiederholt auszuführen. In der Programmierung wird eine solche wie-derholte Ausführung als Schleife bezeichnet. Unter SQL steht lediglich eine Mög-lichkeit zur Schleifen-Definition zur Verfügung: die WHILE-Anweisung. Die Syntaxdieser Anweisung lautet:

Syntax:WHILE schleifenbedingungBEGIN anweisungen;END

Bei der WHILE-Schleife handelt es sich um eine sogenannte kopfgesteuerte Schleife.Das bedeutet, dass bei dem Auftreten einer solchen Schleife zunächst die Schlei-fenbedingung ausgewertet wird. Nur wenn die Schleifenbedingung den logi-schen Wert true ergibt, wird die Schleife abgearbeitet, ansonsten wird direktzum Ende der Schleife gesprungen und eventuell vorhandener weiterer Codeabgearbeitet. Ergibt die Auswertung der Schleifenbedingung als Ergebnis true,wird der im sogenannten Schleifenkörper – oben durch BEGIN und END gekenn-zeichnet – enthaltene Code so lange wiederholt abgearbeitet, bis entweder nacheinem Durchlauf die Schleifenbedingung nicht mehr zutrifft oder die Schleife aufeine andere Art abgebrochen wird. Die Schleifenbedingung wird also nach jedem

9783836216937.book Seite 236 Freitag, 26. November 2010 10:32 10

Page 64: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

237

Ablaufsteuerung 6.3

Durchlauf des Schleifenkörpers erneut überprüft. Auch bei der WHILE-Schleifegilt, dass die Angabe von BEGIN und END entfallen kann, wenn der Schleifenkör-per lediglich aus einer Anweisung besteht.

Die WHILE-Schleife kann unter anderem dazu eingesetzt werden, einen Programm-abschnitt beliebig häufig zu wiederholen, wie das folgende Beispiel zeigt:

Beispiel:DECLARE @Zaehler tinyint;SET @Zaehler = 0;WHILE @Zaehler < 2BEGIN PRINT 'Schleifendurchlauf'; SET @Zaehler = @Zaehler + 1;ENDPRINT 'Ausführung beendet';

In diesem Beispiel wird zunächst eine Variable deklariert, die dazu dient, dieAnzahl der Schleifendurchläufe zu erfassen. Eine solche Variable wird in der Pro-grammierung auch als Zählervariable bezeichnet. Nach der Deklaration erfolgtdie Initialisierung der Variablen mit 0. Als nächste Anweisung wird der Schleifen-kopf verarbeitet, die Überprüfung ergibt einen wahren Ausdruck (0 < 2), und derSchleifenkörper, in dem eine Kontrollausgabe und das Erhöhen des Variablen-werts um 1 erfolgt, wird durchlaufen. Das Erreichen des Schleifenendes bewirktden Sprung zum Schleifenkopf, wo erneut die Schleifenbedingung überprüftwird. Die Zählervariable hat jetzt den Wert 1 angenommen, so dass die Schleifen-bedingung weiterhin erfüllt ist (1 < 2) und der Schleifenkörper erneut abgearbei-tet wird. Nach diesem Durchlauf besitzt die Variable den Wert 2 und erfüllt nichtmehr die Schleifenbedingung (2 < 2). Nun wird vom Schleifenkopf an das Schlei-fenende gesprungen und die der Schleife folgende PRINT-Anweisung ausgeführt.Dieses Verhalten spiegelt sich auch in der Ausgabe des Beispiels wider:

SchleifendurchlaufSchleifendurchlaufAusführung beendet

Neben der Steuerung einer Schleife durch die Schleifenbedingung können Sie dasVerhalten der Schleife durch zwei weitere Schlüsselwörter beeinflussen, dieinnerhalb des Schleifenkörpers verwendet werden können: BREAK und CONTINUE.

BREAK

Die Angabe von BREAK bewirkt den sofortigen Abbruch der Abarbeitung einerSchleife. Um dies zu verdeutlichen, erweitern wir das vorherige Beispiel um eineBREAK-Anweisung:

9783836216937.book Seite 237 Freitag, 26. November 2010 10:32 10

Page 65: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

238

Grundlagen der SQL-Programmierung6

Beispiel:DECLARE @Zaehler tinyint;SET @Zaehler = 0;WHILE @Zaehler < 2BEGIN PRINT 'Schleifendurchlauf'; BREAK; SET @Zaehler = @Zaehler + 1;ENDPRINT 'Ausführung beendet';

In diesem Fall bewirkt die Angabe von BREAK, dass die Schleife direkt beim erstenDurchlauf des Schleifenkörpers verlassen und mit der Abarbeitung des sich andie Schleife anschließenden Codes fortgefahren wird, wie die Ausgabe dieses Bei-spiels zeigt:

SchleifendurchlaufAusführung beendet

CONTINUE

Im Gegensatz zu der BREAK-Anweisung, die einen Sprung zum Schleifenende aus-löst, bewirkt die Angabe von CONTINUE innerhalb des Schleifenkörpers einenSprung zum Schleifenkopf. Allerdings findet nicht nur der Sprung zu dieser Stellestatt, es wird auch die Schleifenbedingung erneut überprüft. Bei einer Verände-rung von Werten innerhalb des Schleifenkörpers, die für die weitere Ausführungder Schleife relevant sind, können Sie auf diese Weise eine direkte, erneute Über-prüfung der Schleifenbedingung vornehmen.

Das folgende Beispiel soll diesen Umstand demonstrieren:

Beispiel:DECLARE @Zaehler tinyint;SET @Zaehler = 0;WHILE @Zaehler < 2BEGIN PRINT 'Schleifendurchlauf'; SET @Zaehler = @Zaehler + 1; IF @Zaehler = 1 BEGIN SET @Zaehler = 2; PRINT '@Zaehler gleich 2' CONTINUE; ENDENDPRINT 'Ausführung beendet';

9783836216937.book Seite 238 Freitag, 26. November 2010 10:32 10

Page 66: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

239

Ablaufsteuerung 6.3

Über die IF-Anweisung wird der Zählervariablen direkt beim ersten Durchlaufder Schleife der Wert 2 zugewiesen, und danach wird über die Angabe vonCONTINUE eine erneute Überprüfung der Schleifenbedingung ausgelöst, die jetztfalse ergibt (2 < 2). Der Schleifenkörper wird also nur einmal durchlaufen, wiedie Ausgabe des Ergebnisses zeigt:

Schleifendurchlauf@Zaehler gleich 2Ausführung beendet

6.3.5 RETURN

RETURN bewirkt die sofortige Beendigung eines Stapels. In dem folgenden Beispielsind zwei Stapel durch GO getrennt. Nach der ersten Anweisung des ersten Stapelswird ein RETURN an den Server gesendet.

Beispiel:PRINT 'Stapel 1, erste Anweisung';RETURN;PRINT 'Stapel 1, zweite Anweisung';GOPRINT 'Stapel 2, erste Anweisung';

Wie an der Ausgabe des Beispiels zu erkennen ist, wurde die Ausführung des ers-ten Stapels durch RETURN abgebrochen, danach wurde jedoch mit dem Abarbeitendes zweiten Stapels begonnen:

Stapel 1, erste AnweisungStapel 2, erste Anweisung

6.3.6 GOTO

GOTO ist eine Anweisung, die schon in der Programmiersprache BASIC existierteund damals den Sprung zu einer Zeilennummer ermöglichte (GOTO 30). DieseAnweisung war unter Programmierern immer etwas verpönt, da sie zu einer ver-minderten Lesbarkeit des Programmcodes führte. Trotzdem wurde diese Anwen-dung in der Programmierung von SQL Server häufig verwendet, um auf aufgetre-tene Fehler zu reagieren und in diesem Fall zu einem bestimmten Punkt imProgramm zu springen. Seit der Einführung der neuen Fehlerbehandlung in SQLServer 2005, die in Abschnitt 6.8 besprochen wird, dürfte sich die Anwendungdieser Anweisung auf ein Minimum reduziert haben. Trotzdem soll die Funktiondieser Anweisung kurz erläutert werden: Im Gegensatz zu der oben erwähntenAngabe der Zeilennummer muss in SQL eine Sprungmarke angegeben werden,zu der verzweigt werden soll. Diese Sprungmarke muss sich in demselben Stapel

9783836216937.book Seite 239 Freitag, 26. November 2010 10:32 10

Page 67: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

240

Grundlagen der SQL-Programmierung6

wie die GOTO-Anweisung befinden und aus einem beliebigen Begriff gefolgt voneinem Doppelpunkt bestehen.

Syntax:sprungmarke:

Beispiel:hell:

Tritt eine solche Marke innerhalb der Programmausführung auf, hat sie keineAuswirkung, sie wird einfach ignoriert. Bedeutung erlangt sie erst dann, wenneine GOTO-Anweisung auf sie verweist, wobei es unerheblich ist, ob die Marke voroder nach der Angabe von GOTO definiert wird. Initialisiert wird der Sprung überfolgende Syntax:

Syntax:GOTO sprungmarke;

Beispiel:GOTO hell;

Beachten Sie, dass in diesem Fall kein Doppelpunkt nach der Bezeichnung derSprungmarke angegeben werden darf!

6.3.7 WAITFOR

Die Anweisung WAITFOR kann im weiteren Sinne auch der Ablaufsteuerung zuge-rechnet werden. Im Gegensatz zu der IF...ELSE-Anweisung oder der WHILE-Schleife dient diese Anweisung jedoch nicht dazu, Bedingungen auszuwertenund auf diese zu reagieren, sondern unter anderem dazu – wie der Name bereitsvermuten lässt –, eine zeitliche Verzögerung der Programmausführung zu ermög-lichen. WAITFOR ermöglicht zu diesem Zweck die Kombination mit den Schlüssel-wörtern DELAY und TIME.

DELAY

Mit DELAY wird eine Verzögerung angegeben, nach deren Ablauf mit der Abarbei-tung des Programms fortgefahren wird. Die maximal verwendbare Verzögerungbeträgt 24 Stunden.

Syntax:WAITFOR DELAY 'verzögerung;

Im folgenden Beispiel wird die Ausführung der folgenden SELECT-Anweisung umeine Minute verzögert:

9783836216937.book Seite 240 Freitag, 26. November 2010 10:32 10

Page 68: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

241

Fallunterscheidungen 6.4

Beispiel:WAITFOR DELAY '00:01';SELECT * FROM Production.Product;

TIME

Im Gegensatz zu der relativen Verzögerung mit DELAY ermöglicht die Option TIMEdie Festlegung einer bestimmten Uhrzeit, zu der die Bearbeitung des Programm-codes fortgesetzt wird.

Syntax:WAITFOR TIME 'zeitangabe';

Beispiel:WAITFOR TIME '23:20';SELECT * FROM Production.Product;

Dieses Beispiel bewirkt, dass die Ausführung der SELECT-Anweisung erst um 23Uhr und 20 Minuten erfolgt. Beachten Sie bitte, dass nur Zeitangaben erlaubt sind.Die Festlegung auf eine Uhrzeit eines bestimmten Datums wird nicht unterstützt!

6.4 Fallunterscheidungen

Neben der bereits besprochenen IF...ELSE-Anweisung existieren weitereAnweisungen, die eine Fallunterscheidung ermöglichen. Während die IF...ELSE-Anweisung jedoch eine Steueranweisung darstellt, liefern die im Folgendenbesprochenen Befehle von Vergleichen abhängige Werte zurück. Es handelt sichbei ihnen also um Funktionen.

6.4.1 Die CASE-Funktion

Die CASE-Funktion wird typischerweise innerhalb einer SELECT-Abfrage zum Ver-arbeiten oder Ersetzen von Spaltenwerten verwendet, weshalb sich die folgen-den Beispiele zunächst auf diesen Anwendungsfall beschränken. Sie kann jedochauch außerhalb von Abfragen verwendet werden, wie wir nach Behandlung derGrundlagen zeigen. Von der CASE-Funktion existieren zwei Varianten: die einfa-che und die komplexe CASE-Funktion.

Die einfache CASE-Funktion

Mit der einfachen CASE-Anweisung kann ein Spaltenwert lediglich auf genaueÜbereinstimmung mit vorgegebenen Werten verglichen werden. In Abhängig-keit davon wird dann ein Rückgabewert ausgewählt.

9783836216937.book Seite 241 Freitag, 26. November 2010 10:32 10

Page 69: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

242

Grundlagen der SQL-Programmierung6

Syntax:CASE spaltennameWHEN vergleichswert THEN rückgabewertELSE else-rückgabewertEND

Beachten Sie, dass die CASE-Funktion mit END abgeschlossen werden muss,obwohl innerhalb der Funktion kein BEGIN verwendet wird. Die mit WHEN einge-leiteten Vergleiche dürfen sich beliebig häufig wiederholen, die Angabe von ELSEist wiederum optional. Das folgende Beispiel zeigt die Anwendung der einfachenCASE-Anweisung mit zwei Vergleichen unter Auslassung von ELSE. Der Origi-nalinhalt der Spalte Color wird lediglich zur besseren Vergleichbarkeit noch ein-mal getrennt ausgegeben:

Beispiel 1:SELECT ProductNumber,Color,

CASE Color WHEN 'Black' THEN 'schwarz' WHEN 'Red' THEN 'rot'END

AS Farbe,ListPriceFROM Production.Product;

Der grau unterlegte Block der Anweisung soll verdeutlichen, dass die CASE-Funk-tion – wie z.B. eine Aggregatfunktion auch – einfach um den entsprechendenSpaltennamen herum gebildet wird und dass die gesamte Funktion genau wie einSpaltenname in der SELECT-Anweisung verwendet wird. Statt des Blocks könntean derselben Stelle auch ein beliebiger Spaltenname stehen, was durch die Ver-gabe eines Alias am Ende der CASE-Funktion deutlich wird.

Abbildung 6.5 Ergebnis der einfachen CASE-Funktion mit NULL-Werten

Die Ausführung des Beispielcodes zeigt die Funktionsweise der CASE-Anweisung:Liefert der Vergleich des Eintrags in der Spalte Color eine Übereinstimmung mitden in den WHEN-Zweigen angegebenen Spaltenwerten, so wird der nach THEN

9783836216937.book Seite 242 Freitag, 26. November 2010 10:32 10

Page 70: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

243

Fallunterscheidungen 6.4

angegebene Wert zurückgegeben. Wird keine Übereinstimmung gefunden, lie-fert die CASE-Funktion einen NULL-Wert zurück, wie in Abbildung 6.5 gezeigt.

Die Rückgabe von NULL-Werten können Sie durch die Angabe des ELSE-Zweigsvermeiden:

Beispiel 2:SELECT ProductNumber,Color,CASE Color WHEN 'Black' THEN 'schwarz' WHEN 'Red' THEN 'rot' ELSE 'unbekannt'ENDAS Farbe,ListPriceFROM Production.Product;

Abbildung 6.6 zeigt den Unterschied zum vorherigen Beispiel. Hier wird für alleSpaltenwerte, für die keine Übereinstimmung gefunden wird, der Wertunbekannt ausgegeben.

Abbildung 6.6 Ergebnis der einfachen CASE-Funktion mit ersetzten NULL-Werten

Soll, falls keine Übereinstimmung gefunden wird, der Originaleintrag der ent-sprechenden Spalte ausgegeben werden, so erreichen Sie dies über die Angabedes Spaltennamens im ELSE-Zweig:

Beispiel 3:SELECT ProductNumber,Color,CASE Color WHEN 'Black' THEN 'schwarz' WHEN 'Red' THEN 'rot' ELSE ColorENDAS Farbe,ListPriceFROM Production.Product;

9783836216937.book Seite 243 Freitag, 26. November 2010 10:32 10

Page 71: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

244

Grundlagen der SQL-Programmierung6

Das in Abbildung 6.7 dargestellte Abfrageergebnis ähnelt sehr dem in Abbildung6.5. Beachten Sie jedoch den unterschiedlichen Rückgabewert des Eintrags Silver.In Abbildung 6.5 liefert die CASE-Funktion für diesen Wert NULL zurück, währendnun der Originaleintrag ausgegeben wird.

Abbildung 6.7 Ergebnis der einfachen CASE-Funktion mit Originalspaltendaten

Die komplexe CASE-Funktion

Während die einfache CASE-Funktion lediglich einen Vergleich auf Übereinstim-mung ermöglicht, können Sie in der komplexen CASE-Funktion beliebige logischeAusdrücke verwenden. Dadurch unterscheidet sich die Syntax von der einfachenCASE-Funktion in einem wesentlichen Punkt.

Syntax:CASEWHEN ausdruck THEN rückgabewertELSE else-rückgabewertEND

Der Unterschied in der Syntax besteht darin, dass der Spaltenname, auf den diekomplexe CASE-Funktion angewandt wird, in den WHEN-Zweigen verwendet wirdund nicht – wie bei der einfachen CASE-Funktion – direkt nach dem SchlüsselwortCASE angegeben wird. Der Grund dafür ist, dass die einfache CASE-Funktion nurauf Gleichheit vergleichen. In der komplexen CASE-Funktion können Sie – wieder Name bereits andeutet – komplexe Ausdrücke im WHEN-Zweig bilden. In die-sen komplexen Ausdrücken muss der Spaltenname enthalten sein, damit einkompletter logischer Ausdruck vorliegt, der true oder false als Ergebnis liefert.Im folgenden Beispiel werden die Produkte nach der Spalte Weight in drei Berei-che (leicht, mittel und schwer) klassifiziert. Ist keine Gewichtsangabe vorhanden,wird ein Bindestrich ausgegeben. Zum Vergleich wird der Inhalt der SpalteWeight zuerst unverändert ausgegeben, und danach wird das Ergebnis der CASE-Funktion ausgegeben:

Beispiel 1:SELECT ProductNumber,Weight,CASE

9783836216937.book Seite 244 Freitag, 26. November 2010 10:32 10

Page 72: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

245

Fallunterscheidungen 6.4

WHEN Weight < 100 THEN 'leicht'

WHEN Weight BETWEEN 100 AND 1000 THEN 'mittel' WHEN Weight > 1000 THEN 'schwer' ELSE '-'ENDAS GewichtFROM Production.Product;

Ein Teil des Abfrageergebnisses, der alle vier möglichen Rückgabewerte umfasst,ist in Abbildung 6.8 dargestellt.

Abbildung 6.8 Ergebnis der komplexen CASE-Funktion mit ersetzten NULL-Werten

Im letzten Beispiel sind die Bereiche, auf die verglichen werden soll, exakt einge-grenzt, so dass immer nur ein einzelner WHEN-Zweig oder aber der ELSE-Zweig alsErgebnis true liefern kann. Die WHEN-Zweige der CASE-Funktion könnten Sie aberauch so anlegen, dass die Ausdrücke mehrerer Zweige für einen bestimmtenSpaltenwert zu true ausgewertet würden. Es stellt sich die Frage, welcher dermöglichen Werte in diesem Fall zurückgegeben wird. Zu diesem Zweck schreibenwir die CASE-Funktion des letzten Beispiels um:

Beispiel 2:SELECT ProductNumber,Weight,CASE WHEN Weight >= 0 THEN 'leicht' WHEN Weight >= 100 THEN 'mittel' WHEN Weight >= 1000 THEN 'schwer' ELSE '-'ENDAS GewichtFROM Production.Product;

Das Ergebnis dieser Abfrage ist, dass für alle Bücher, bei denen in der SpalteWeight ein Wert eingetragen ist, als Ausgabe leicht erfolgt. Liegt in dieser Spaltebei einem Datensatz ein NULL-Wert vor, wird als Ergebnis der Bindestrich ausge-geben. Abbildung 6.9 veranschaulicht die Veränderung gegenüber den in Abbil-dung 6.8 dargestellten Datensätzen.

9783836216937.book Seite 245 Freitag, 26. November 2010 10:32 10

Page 73: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

246

Grundlagen der SQL-Programmierung6

Abbildung 6.9 Ergebnis einer falsch definierten CASE-Funktion

Dieses Beispiel zeigt deutlich, dass die CASE-Funktion denjenigen WHEN-Zweig ver-wendet, der als erster ein wahres Ergebnis liefert. Alle anderen Zweige, die eben-falls wahre Ergebnisse liefern könnten, werden nicht mehr ausgewertet. DiesesVerhalten sollten Sie berücksichtigen, wenn Sie die CASE-Funktion auf umfangrei-che Datenbestände anwenden: Werden die Vergleiche, die erwartungsgemäß amhäufigsten als Ergebnis true ergeben, früh in der CASE-Funktion verwendet,resultiert dies in einer schnelleren Abarbeitung.

Nachfolgend noch einmal eine Zusammenfassung des Verhaltens der beidenArten der CASE-Funktion:

Weitere Möglichkeiten zur Anwendung der CASE-Funktion

Wie oben bereits erwähnt, wird die CASE-Funktion hauptsächlich in Verbindungmit Abfragen verwendet. Eine sehr typische Anwendung dieser Funktion bestehtinnerhalb von Datenbanken zum Beispiel darin, das in einer Bit-Spalte codierteGeschlecht einer Person in die Anrede »Frau« beziehungsweise »Herr« umzuset-zen, um diese Angabe in einem Adressfeld einer Anwendung zu verwenden.

Die CASE-Funktion kann jedoch nicht nur innerhalb einer Abfrage verwendetwerden. Bei dem zu verarbeitenden Wert muss es sich also nicht zwangsläufig umeinen Spaltenwert handeln, andere Ausdrücke in anderen Zusammenhängenkönnen ebenso über die CASE-Funktion ausgewertet werden. So kann zum Bei-spiel auch eine Wertzuweisung an eine Variable in Verbindung mit SET und derCASE-Funktion realisiert werden, wie das folgende Beispiel zeigt:

Hinweis

Für beide Arten der CASE-Funktion gilt, dass die Verwendung des ELSE-Zweigs optionalist, WHERE-Zweige dürfen in beliebiger Anzahl angegeben werden. Der Rückgabewertder Funktion richtet sich zunächst nach dem ersten WHEN-Zweig, dessen Ausdruck alsErgebnis true liefert. Ist dies bei keinem WHEN-Zweig der Fall, wird der Rückgabewertdes ELSE-Zweigs verwendet. Ist dieser nicht vorhanden, liefert die CASE-Funktion einenNULL-Wert zurück.

9783836216937.book Seite 246 Freitag, 26. November 2010 10:32 10

Page 74: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

247

Fallunterscheidungen 6.4

Beispiel:DECLARE @Eingabe SMALLINT;SET @Eingabe = 42;DECLARE @Ausgabe CHAR(15);SET @Ausgabe = CASE @EingabeWHEN 42 THEN 'zweiundvierzig'ELSE 'unbekannt'END;PRINT @Ausgabe;

In diesem Beispiel wird der Variable @Ausgabe über die CASE-Funktion ein Wertzugewiesen, der von dem Wert der Variablen @Eingabe abhängig ist.

6.4.2 Die ISNULL-Funktion

Sollen lediglich NULL-Werte durch einen realen Wert ersetzt werden, bietet dieISNULL-Funktion eine einfachere Möglichkeit als die Verwendung einer der bei-den CASE-Funktionen.

Syntax:ISNULL(ausdruck, ersatzwert)

Im folgenden Beispiel soll diese Funktion auf die Spalte Color angewandt werden.Daher ist für den ersten Parameter der Spaltenname zu verwenden. Liegt einNULL-Wert vor, soll statt diesem unbekannt ausgegeben werden. Dieser Wert wirdals zweiter Parameter verwendet.

Beispiel:SELECT ProductNumber,Color,ISNULL(Color, 'unbekannt')AS Farbe,ListPriceFROM Production.Product;

Wie Abbildung 6.10 zeigt, ersetzt die ISNULL-Funktion lediglich vorhandeneNULL-Werte. In allen anderen Fällen wird der Originalspalteninhalt ausgegeben.

Abbildung 6.10 Abfrageergebnis unter Verwendung der ISNULL-Funktion

9783836216937.book Seite 247 Freitag, 26. November 2010 10:32 10

Page 75: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

248

Grundlagen der SQL-Programmierung6

6.5 Funktionen

Neben den in Kapitel 5, »Grundlegende Abfragetechniken«, bereits behandeltenAggregatfunktionen und der oben besprochenen CASE-Funktion stellt SQL Servereine Reihe weiterer Funktionen zur Verfügung, von denen wir eine Auswahl inden folgenden Abschnitten vorstellen. Diese Funktionen sind an fast beliebigerStelle einsetzbar. Das heißt, Sie können sie nicht nur in einer SELECT-Anweisungzur Bearbeitung von Spaltenwerten oder in der WHERE-Klausel verwenden, son-dern auch in vielen anderen Bereichen der SQL-Programmierung. Bei all diesenFunktionen handelt es sich um sogenannte skalare Funktionen. Das bedeutet,dass diese Funktionen nur einen Wert pro Aufruf als Ergebnis zurückgeben. (AlsSkalar wird in der Mathematik ein einzelner Wert bezeichnet.) Eine Funktionkann in SQL Server auch mehrere Werte als Ergebnis enthalten; diesen Umstandsprechen wir in einem späteren Kapitel an.

6.5.1 Konfigurationsfunktionen

Konfigurationsfunktionen werden verwendet, um Informationen über denDatenbankserver abzufragen.

6.5.2 Datums-/Uhrzeitfunktionen

Berechnungen, die sich auf Datumsangaben beziehen, gehören zu den am häu-figsten durchgeführten Vorgängen einer Datenbank. Typische Anfragen aus demkaufmännischen Bereich sind zum Beispiel die Ermittlung der Umsätze des letz-ten Quartals oder die Einnahmen des heutigen Tages. In solchen Fällen kommenDatums- und Zeitfunktionen zum Einsatz. Viele dieser Funktionen erfordern dieAngabe einer der folgenden Datumseinheiten beziehungsweise deren Abkürzun-gen:

Funktion Ausgabe

@@CONNECTIONS Anzahl der Verbindungsgesuche seit dem Start von SQL Server

@@MAX_CONNECTIONS Anzahl der maximal zulässigen Verbindungen

@@LANGUAGE Name der verwendeten Sprache

@@OPTIONS auf Bit-Ebene gesetzte Optionen

@@SERVERNAME Name des Servers

@@VERSION Informationen über die installierte Version von SQL Server sowie des Betriebssystems

Tabelle 6.1 Konfigurationsfunktionen

9783836216937.book Seite 248 Freitag, 26. November 2010 10:32 10

Page 76: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

249

Funktionen 6.5

Die Datumseinheiten beziehen sich in den Funktionen auf den Teil des Datums,auf den die entsprechende Funktion angewandt werden soll. Innerhalb der Funk-tionen können Sie sowohl die ausgeschriebenen Datumseinheiten als auch die inder Tabelle angegebenen Abkürzungen verwenden. Werden Abkürzungenbenutzt, so wird meistens die aus zwei Buchstaben bestehende Version verwen-det, da diese für alle Einheiten existiert. Das in der folgenden Tabelle verwendeteKürzel de bezeichnet die Angabe einer Datumseinheit, entweder in ausgeschrie-bener oder in abgekürzter Form.

Datumseinheit Beschreibung Bereich Abkürzung

year Jahr 1753 – 9999 yy, yyyy

quarter Quartal 1 – 4 qq, q

month Monat 1 – 12 mm, m

dayofyear Tag (des Jahres) 1 – 366 dy, y

day Tag (des Monats) 1 – 31 dd, d

week Kalenderwoche 1 – 53 wk, ww

weekday Wochentag 1 – 7 dw, w

hour Stunde 0 – 23 hh

minute Minute 0 – 59 mi, n

second Sekunde 0 – 59 ss, s

millisecond Millisekunde 0 – 999 ms

Tabelle 6.2 Datums- und Uhrzeitfunktionen

Funktion Syntax Beschreibung

DATEADD DATEADD(de, anzahl, datum)

Addiert oder subtrahiert einen Wert zu bezie-hungsweise von einem Datum.

DATEDIFF DATEDIFF(de, startda-tum, enddatum)

Ergibt die Differenz zwischen zwei Datums-werten.

DATEPART DATEPART(de, datum) Gibt einen bestimmten Teil des Datums zurück.

DATENAME DATENAME(de, datum) Ähnelt der Funktion DATEPART, gibt aber, wenn möglich, den Teil des Datums ausgeschrieben als Zeichenfolge zurück.

DAY DAY(datum) Gibt die Zahl des Tages im Datum zurück.

MONTH MONTH(datum) Gibt die Zahl des Monats im Datum zurück.

Tabelle 6.3 Abkürzungen für Datumseinheiten

9783836216937.book Seite 249 Freitag, 26. November 2010 10:32 10

Page 77: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

250

Grundlagen der SQL-Programmierung6

Anhand einiger Beispiele möchten wir die Anwendung dieser Funktionen ver-deutlichen und auf einige Besonderheiten eingehen. Dazu erläutern wir zunächstden Unterschied zwischen der DATEPART- und der DATENAME-Funktion. BeideFunktionen sollen verwendet werden, um den Wochentag eines Datums zuermitteln. Der Aufruf der DATEPART-Funktion könnte für ein fest angegebenesDatum zum Beispiel in der folgenden Form erfolgen:

Beispiel 1:SELECT DATEPART(dw, '17.8.1966');

Das Ergebnis dieser Anweisung lautet 3. Zum Vergleich folgt nun ein entspre-chender Aufruf der DATENAME-Funktion:

Beispiel 2:SELECT DATENAME(dw, '17.8.1966');

In diesem Fall kann das Ergebnis in ausgeschriebener Form zurückgegeben wer-den und lautet Mittwoch.

Wie anhand der DATEPART-Funktion zu erkennen ist, wird Mittwoch als dritterTag der Woche ausgegeben, Montag entspräche also dem ersten Tag der Woche.Diese Festlegung bereitet beim Zugriff auf SQL Server mit anderer Spracheinstel-lung unter Umständen Probleme – so wird in den USA der Sonntag als erster Tagder Woche angesehen!

Der Aufruf von Datums-/Uhrzeitfunktionen erfolgt selten mit der Angabe vonfesten Werten, wie sie in den vorhergehenden Beispielen verwendet wurden.Ihre Anwendung erfolgt häufig, wie die anderer Funktionen auch, innerhalb derSpaltenliste oder in der WHERE-Klausel einer Abfrage. Um beispielsweise denMonat der letzten Änderung eines Datensatzes der Product-Tabelle über dieSpalte ModifiedDate zu ermitteln, könnten Sie die folgende Anweisung nutzen:

Beispiel 3:SELECT DATEPART(mm, ModifiedDate)FROM Production.Product;

Lasen Sie sich nicht durch die Tatsache irritieren, dass diese Abfrage für jedenDatensatz den Wert 3, also März, ausgibt. Das liegt daran, dass in dieser Spaltenur identische Werte vorhanden sind!

YEAR YEAR(datum) Gibt die Jahreszahl des Datums zurück.

GETDATE GETDATE() Liefert das aktuelle Datum und die aktuelle Uhrzeit.

Funktion Syntax Beschreibung

Tabelle 6.3 Abkürzungen für Datumseinheiten (Forts.)

9783836216937.book Seite 250 Freitag, 26. November 2010 10:32 10

Page 78: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

251

Funktionen 6.5

Eine andere Möglichkeit, den Monat eines Datums abzufragen, wäre der Aufrufder MONTH-Funktion:

Beispiel 4:SELECT MONTH(ModifiedDate)FROM Production.Product;

Diese Anweisung ist vom Ergebnis her identisch mit dem letzten Beispiel. Für dieBestimmung des Tages, Monats oder Jahres eines Datums sind die FunktionenDAY, MONTH und YEAR bereits vorhanden und müssen nicht über DATEPART nachge-bildet werden. Für die Uhrzeiten existieren allerdings keine entsprechendenFunktionen. Soll zum Beispiel eine Stundenangabe aus einem Datum extrahiertwerden, müssen Sie auf die DATEPART-Funktion zurückgreifen!

Funktionsaufrufe lassen sich schachteln. Es ist also möglich, eine Funktion inner-halb einer anderen Funktion aufzurufen. Im folgenden Beispiel wird die Diffe-renz der Monate ermittelt, die zwischen den Einträgen in der ModifiedDate-Spalte und dem aktuellen Systemdatum liegen, das über die Funktion GETDATEermittelt wird:

Beispiel 5:SELECT DATEDIFF (mm, ModifiedDate, GETDATE())FROM Production.Product;

Werden Funktionen ineinandergeschachtelt, gilt generell, dass die Auswertungvon innen nach außen erfolgt. In diesem Beispiel wird also zunächst der Wert derGETDATE-Funktion ermittelt, der dann zur Bearbeitung der DATEDIFF-Funktionverwendet wird.

Die Datums-/Uhrzeitfunktionen berücksichtigen alle Aspekte der Datumsberech-nung, was auch bedeutet, dass Schaltjahre korrekt behandelt werden. Dies sollam Beispiel der DATEADD-Funktion gezeigt werden. Diese Funktion dient – wie inder Tabelle oben angegeben – dazu, einen Wert zu einem Datum zu addierenoder davon zu subtrahieren. Um den letzten Tag des Monats Februar des Schalt-jahrs 2000 zu ermitteln, könnten Sie also folgende Abfrage verwenden:

Beispiel 6:SELECT DATEADD (dd, –1, '1.3.2000');

Da die DATEADD-Funktion nicht nur für das Addieren von Datumswerten, sondernauch für das Subtrahieren von Datumswerten verwendet werden kann, wird indiesem Beispiel –1 in Verbindung mit der Datumseinheit dd angegeben, um denletzten Tag des Vormonats, also Februar, zu ermitteln. Das Ergebnis der Abfrageliefert den 29. Februar 2000 zurück, was offensichtlich richtig ist.

9783836216937.book Seite 251 Freitag, 26. November 2010 10:32 10

Page 79: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

252

Grundlagen der SQL-Programmierung6

Die komfortable Verarbeitung von Datums-/Uhrzeitwerten unter SQL Serverkann aber auch zu Fehlern verleiten, wie im Folgenden anhand der DATEDIFF-Funktion gezeigt werden soll. In einer Datenbankanwendung kann es zum Bei-spiel notwendig sein, das Lebensalter einer Person zu bestimmen. Zur Ermittlungeiner solchen Differenz zweier Datumswerte scheint sich ein einfacher Aufruf derDATEDIFF-Funktion anzubieten, und die zu verwendende Datumseinheit wäre dasJahr. Das folgende Beispiel stellt einen entsprechenden Aufruf dar, in dem zurbesseren Anschaulichkeit zwei feste Datumswerte verwendet werden:

Beispiel 7:SELECT DATEDIFF(yy, '30.6.2000', '1.1.2001');

Das Ergebnis dieser Anweisung lautet nicht, wie Sie vielleicht erwartet haben,null, sondern eins, die DATEDIFF-Funktion hat also lediglich die Differenz der Jah-reszahlen gebildet. Zur Altersbestimmung genügt der im Beispiel dargestellte ein-fache Aufruf der DATEDIFF-Funktion also nicht. Bei Verwendung der DATEDIFF-Funktion ist es außerdem wichtig, die Reihenfolge der Datumswerte zu beachten.In der Regel wird das spätere Datum als zweiter Datumswert übergeben, da dasErgebnis ansonsten aus einer negativen Zahl bestehet.

6.5.3 Zeichenfolgenfunktionen

Neben den Datums-/Uhrzeitfunktionen stellen die Funktionen zur Bearbeitungvon Zeichenketten eine häufig verwendete Funktionsgruppe dar. Eine sehr großeAnzahl von Einträgen in Datenbanktabellen bestehen typischerweise aus Zei-chenketten. Entsprechend häufig finden diese Funktionen Verwendung. Die fol-gende Tabelle soll einen ersten Überblick über die Möglichkeiten geben, unterSQL Server Zeichenketten zu bearbeiten.

Funktion Syntax Beschreibung

ASCII ASCII(string) ASCII-Wert des ersten Zeichens von string

CHAR CHAR(ganzzahl) Zeichen mit dem ASCII-Wert von ganzzahl

CHARINDEX CHARINDEX(suchstring, string)

erste Position von suchstring in string

PATINDEX PATINDEX(muster, string) erste Position von muster in string

LEFT LEFT(string, ganzzahl) linker Teil von string der Länge ganzzahl

RIGHT RIGHT(string, ganzzahl) rechter Teil von string der Länge ganzzahl

SUBSTRING SUBSTRING(string, start, länge)

beliebiger Teil von string

Tabelle 6.4 Zeichenfolgenfunktionen

9783836216937.book Seite 252 Freitag, 26. November 2010 10:32 10

Page 80: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

253

Funktionen 6.5

Auch für die Zeichenkettenfunktionen sollen einige Beispiele die Verwendung zuverdeutlichen. Zunächst soll die ASCII-Funktion auf die Spalte Name der TabelleProduct angewendet werden:

Beispiel 1:SELECT Name, ASCII(Name)FROM Production.Product;

Diese Abfrage liefert für den ersten Eintrag der Tabelle in der Spalte Name, derAdjustable Race lautet, den Wert 65 zurück. Anhand einer ASCII-Tabelle könnenSie überprüfen, dass dies dem ASCII-Wert des ersten Zeichens im Namen ent-spricht, nämlich dem großen A. Eine andere Möglichkeit der Überprüfung wäre,die Umkehrfunktion CHAR aufzurufen, wie es im folgenden Beispiel über einengeschachtelten Funktionsaufruf geschieht:

Beispiel 2:SELECT Name, ASCII(Name), CHAR(ASCII(Name))FROM Production.Product;

Anhand des in Abbildung 6.11 gezeigten Ergebnisses des ersten Datensatzes kön-nen Sie erkennen, dass die ASCII-Funktion tatsächlich nur das erste Zeichen einerZeichenkette auswertet. Die restlichen Zeichen sind für die Anwendung dieserFunktion ohne Bedeutung.

Bei der Verarbeitung von Zeichenketten ist es häufig notwendig, die Position vonZeichen innerhalb einer Zeichenkette zu bestimmen. SQL Server stellt zu diesemZweck die beiden Funktionen CHARINDEX und PATINDEX zur Verfügung, deren Ver-halten die folgenden Beispielen verdeutlichen. Das erste Beispiel soll zur Ermitt-lung der Zeichenfolge Lock in der Spalte Name der Product-Tabelle dienen:

LEN LEN(string) Anzahl der Zeichen in string

LOWER LOWER(string) Wandelt string in Kleinbuchstaben um.

UPPER UPPER(string) Wandelt string in Großbuchstaben um.

LTRIM LTRIM(string) Entfernt führende Leerzeichen in string.

RTRIM RTRIM(string) Entfernt nachfolgende Leerzeichen in string.

REVERSE REVERSE(string) string in umgekehrter Reihenfolge

DIFFE-RENCE

DIFFERENCE(string, string)

Maß der Ähnlichkeit der beiden Zeichenketten

SPACE SPACE(anzahl) Erzeugt anzahl von Leerzeichen.

Funktion Syntax Beschreibung

Tabelle 6.4 Zeichenfolgenfunktionen (Forts.)

9783836216937.book Seite 253 Freitag, 26. November 2010 10:32 10

Page 81: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

254

Grundlagen der SQL-Programmierung6

Beispiel 3:SELECT Name, CHARINDEX ('Lock', Name)FROM Production.Product;

Abbildung 6.11 Bildung des ASCII-Codes und die Anwendung der Umkehrungsfunktion CHAR

Ein Ausschnitt des Abfrageergebnisses ist in Abbildung 6.12 wiedergegeben.

Abbildung 6.12 Ergebnis der CHARINDEX-Funktion

Wie zu erkennen ist, liefert die CHARINDEX-Funktion die Position des Auftretensder Suchzeichenfolge zurück. Sollte die Suchzeichenfolge mehrfach auftreten,wird das erste Auftreten im Funktionsergebnis berücksichtigt. Außerdem liefertAbbildung 6.12 zwei weitere Informationen:

� Die Zählung der Position innerhalb von Zeichenketten beginnt immer miteins, nicht mit null, wie in einigen anderen Programmiersprachen.

� Die Ausgabe von 0 zeigt bei der CHARINDEX- wie auch bei der PATINDEX-Funk-tion an, dass die Suchzeichenfolge in der untersuchten Zeichenkette nicht vor-handen ist.

Die PATINDEX-Funktion ermöglicht im Gegensatz zur CHARINDEX-Funktion einenMustervergleich, entsprechend dem in Kapitel 5, »Grundlegende Abfragetechni-ken«, vorgestellten LIKE-Operator. Die folgende Abfrage soll die Position einerZeichenkette ermitteln, die die folgenden Voraussetzungen erfüllt:

� Die Zeichenkette kann an beliebiger Stelle innerhalb der Zeichenfolge auftre-ten (Platzhalter: %).

� Die ersten beiden Zeichen müssen »Lo« sein.

� Nach »Lo« soll ein beliebiges Zeichen folgen (Platzhalter: _).

� Nach dem Unterstrich muss entweder das Zeichen »k« oder »o« folgen.

Der entsprechende Aufruf der PATINDEX-Funktion lautet also:

9783836216937.book Seite 254 Freitag, 26. November 2010 10:32 10

Page 82: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

255

Funktionen 6.5

Beispiel 4:SELECT Name, PATINDEX ('%Lo_[ko]%', Name)FROM Production.Product;

Abbildung 6.13 Ergebnis der PATINDEX-Funktion

Wie zu erkennen ist, wird das Suchmuster in den dargestellten Ergebnissensowohl an erster als auch an dreizehnter Position gefunden.

Andere häufig verwendete Funktionen dienen dazu, einen bestimmten Teil einerZeichenkette zu extrahieren. Neben den Funktionen LEFT und RIGHT, die dazudienen, eine Anzahl Zeichen einer Zeichenkette beginnend von links oder rechtsauszulesen, bietet die SUBSTRING-Funktion die Möglichkeit, einen beliebigen Teileiner Zeichenkette durch Angabe der Startposition sowie der Zeichenanzahl zuextrahierenden.

Um zum Beispiel die ersten beiden Zeichen der Spalte ProductNumber, die einKürzel des Produktnamens darstellen, zu erhalten, können Sie die folgendeAnweisung verwenden:

Beispiel 5:SELECT ProductNumber, SUBSTRING(ProductNumber, 1, 2)FROM Production.Product;

Dieses Beispiel liefert, neben dem Originalspalteninhalt der Spalte Product-Number, eine weitere Spalte zurück, in der beginnend mit dem ersten Zeichenzwei Zeichen der Spalte ausgegeben werden. Da in diesem Beispiel die ersten bei-den linken Zeichen ausgegeben werden, würde die folgende Abfrage ein identi-sches Ergebnis liefern:

Beispiel 6:SELECT ProductNumber, LEFT(ProductNumber, 2)FROM Production.Product;

6.5.4 Mathematische Funktionen

SQL Server stellt eine Vielzahl von mathematischen Funktionen zur Verfügung,von denen in der folgenden Tabelle nur einige als Beispiel aufgeführt sind.

9783836216937.book Seite 255 Freitag, 26. November 2010 10:32 10

Page 83: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

256

Grundlagen der SQL-Programmierung6

Bei Verwendung der RAND-Funktion sollten Sie beachten, dass diese Funktion beieinem Aufruf mit einem konstanten Argument immer denselben Wert zurücklie-fert! Um eine Zufallsfolge zu erzeugen, muss das Funktionsargument also beijedem Aufruf geändert werden.

6.5.5 Funktionen zur Statusabfrage

Die folgenden beiden Anweisungen ermitteln den Status der vorhergehendenSQL-Anweisung:

Die @@ERROR-Funktion liefert den Wert null zurück, wenn die letzte Anweisungohne Fehler beendet wurde, ansonsten wird als Ergebnis die Fehlernummerzurückgegeben. Auf die @@ERROR-Funktion und ihre Verwendung gehen wir inAbschnitt 6.8, »Fehlerbehandlung«, näher ein. Die @@ROWCOUNT-Funktion kannverwendet werden, um die Anzahl der von der letzten Anweisung betroffenenDatensätze zu ermitteln. Diese Anzahl entspricht der Angabe, die im Reiter Mel-

dungen angezeigt wird. Eine Abfrage auf alle Datensätze der Product-Tabelleresultiert in der folgenden Meldung:

(504 Zeile(n) betroffen)

Soll der Wert 504 im weiteren Programmverlauf weiterverwendet werden, wie-sen Sie ihn durch den sofort im Anschluss an die Abfrage erfolgenden Aufruf von@@ROWCOUNT zum Beispiel einer Variablen zu.

Funktion Syntax Beschreibung

ABS ABS(wert) Liefert den absoluten Wert einer Zahl.

RAND RAND(startwert) Liefert eine Zufallszahl zwischen 0 und 1.

ROUND ROUND(wert, stelle) Dient zum Runden und Kürzen.

POWER POWER(wert, potenz) Potenziert eine Zahl.

SQRT SQRT(wert) Liefert die Quadratwurzel einer Zahl.

Tabelle 6.5 Mathematische Funktionen

Funktion Beschreibung

@@ERROR Fehlernummer der letzten ausgeführten SQL-Anweisung

@@ROWCOUNT Anzahl der von der letzten Anweisung betroffenen Zeilen

Tabelle 6.6 Funktionen zur Statusabfrage

9783836216937.book Seite 256 Freitag, 26. November 2010 10:32 10

Page 84: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

257

Funktionen 6.5

6.5.6 Konvertierungsfunktionen

Bei der Verarbeitung von Daten, die in verschiedenen Formaten vorliegen,besteht häufig die Notwendigkeit, eine in einem bestimmten Datentyp vorlie-gende Information in einen anderen Datentyp umzuwandeln. Dieser Vorgangheißt Konvertierung. In vielen Fällen nimmt der SQL Server eine Konvertierungautomatisch vor. Dieser Vorgang wird als implizite Konvertierung bezeichnet.Wird die Umwandlung eines Datentyps durch eine Anweisung erzwungen, stelltdies eine explizite Konvertierung dar, wie sie im Folgenden besprochen wird. DieNotwendigkeit expliziter Konvertierungen zeigt das folgende Beispiel:

Beispiel:SELECT * FROM Production.Product;PRINT @@ROWCOUNT + ' Datensätze ausgegeben';

In diesem Beispiel sollen eine Abfrage der Tabelle Product und eine anschlie-ßende Meldung generiert werden, in der an den Aufruf von @@ROWCOUNT zurErmittlung der Datensatzanzahl die angegebene Zeichenkette angehängt werdensoll. Bei Ausführung des Codes wird durch die zweite Zeile jedoch die folgendeFehlermeldung ausgelöst:

Meldung 245, Ebene 16, Status 1, Zeile 2Fehler beim Konvertieren des varchar-Wertes ' Datensätze ausgegeben' in den int-Datentyp.

Offensichtlich hat SQL Server an dieser Stelle versucht, eine implizite Konvertie-rung – nämlich die Umwandlung der Zeichenkette in eine Integerzahl – vorzu-nehmen, was fehlschlagen musste, da in der Zeichenkette Buchstaben enthaltensind, die nicht in Ziffern konvertiert werden können. Die eigentliche Ursache desauftretenden Fehlers wird beim Betrachten des Ausdrucks deutlich, der vonPRINT ausgegeben werden sollte.

Der Rückgabewert von @@ROWCOUNT ist vom Datentyp integer, die Zeichenkettewird – laut Fehlermeldung – als varchar-Datentyp interpretiert. Es handelt sichalso um eine Zahl und eine Zeichenkette, zwischen denen das Pluszeichen steht.Das Pluszeichen steht aber sowohl für die Addition als auch für die Zeichenver-kettung, die ja eigentlich ausgeführt werden sollte. SQL Server hat das Pluszei-chen aber als Addition interpretiert und – wie in der Fehlermeldung angegeben –versucht, die Zeichenfolge in eine Integerzahl umzuwandeln.

Warum SQL Server in diesem Fall so verfährt, erfahren Sie bei Interesse in derOnlinedokumentation unter den Einträgen Rangfolge[SQL Server] Operatorenbeziehungsweise Rangfolge[SQL Server] Datentypen.

9783836216937.book Seite 257 Freitag, 26. November 2010 10:32 10

Page 85: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

258

Grundlagen der SQL-Programmierung6

Um eine fehlerfreie Ausführung des Codes zu erreichen, muss der Rückgabewertder @@ROWCOUNT-Funktion in eine Zeichenkette umgewandelt, also eine expliziteKonvertierung vorgenommen werden, damit das Pluszeichen als Textverket-tungsoperator interpretiert wird. Zu diesem Zweck stehen unter SQL Server zweiFunktionen zur Verfügung: CAST und CONVERT. Die Voraussetzung für die Anwen-dung dieser Funktionen ist, dass sich der zu bearbeitende Wert in den entspre-chenden Zieldatentyp umwandeln lässt, was nicht immer der Fall ist, wie Sieoben bei dem Versuch der impliziten Konvertierung durch SQL Server gesehenhaben.

Die CAST-Funktion

Die CAST-Funktion dient ausschließlich zur Konvertierung eines Werts in einenbestimmten Datentyp. Die Syntax dieser Funktion lautet:

Syntax:CAST(wert AS datentyp)

Um mit der CAST-Funktion das Auftreten des Fehlers im Beispielcode zu vermei-den, müssen Sie als ersten Parameter die @@ROWCOUNT-Funktion nutzen. Als Daten-typ könnte zum Beispiel char(3) Verwendung finden, wenn die Anzahl derDatensätze maximal dreistellig ist:

Beispiel:SELECT * FROM Production.Product;PRINT CAST(@@ROWCOUNT AS char(3))+ ' Datensätze ausgegeben';

Über die nun erfolgte Konvertierung des Rückgabewerts von @@ROWCOUNT in eineZeichenkette erfolgt die Abarbeitung des Beispielcodes ohne Fehler, und die Mel-dung wird in der gewünschten Form ausgegeben:

504 Datensätze ausgegeben

Die CONVERT-Funktion

Die CONVERT-Funktion unterscheidet sich in mehreren Punkten von der CAST-Funktion. Zum einen unterscheiden sie sich in der Syntax, zum anderen bietetCONVERT einen verglichen mit CAST etwas erweiterten Funktionsumfang. Zur rei-nen Konvertierung von Werten mittels CONVERT wird die folgende Syntax verwen-det:

Syntax:CONVERT(datentyp, wert)

9783836216937.book Seite 258 Freitag, 26. November 2010 10:32 10

Page 86: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

259

Funktionen 6.5

Das Schlüsselwort AS der CAST-Funktion wird bei CONVERT nicht verwendet. Statt-dessen verwenden Sie das Komma als Trennzeichen und geben die Parameter inumgekehrter Reihenfolge zur CAST-Funktion an. Wenn Sie CONVERT zur Konvertie-rung verwenden, sähe das Beispiel folgendermaßen aus:

Beispiel:SELECT * FROM Production.Product;PRINT CONVERT(char(3), @@ROWCOUNT)+ ' Datensätze ausgegeben';

CONVERT bietet die Verwendung eines optionalen Parameters an, mit dem Sie zumBeispiel Einfluss auf die Formatierung des Ergebnisses der Konvertierung vonDatums-/Uhrzeitwerten nehmen.

Syntax:CONVERT(datentyp, wert, format)

Der Aufruf der GETDATE-Funktion zur Ermittlung des aktuellen Systemdatumsund der aktuellen Systemzeit über die PRINT-Anweisung liefert eine Ausgabe inder folgenden Form zurück:

Feb 15 2006 9:54PM

Wird diese Ausgabe über CONVERT in einen Zeichendatentyp überführt, bestim-men Sie durch den dritten Parameter das Format. Eine Übersicht der verwendba-ren Werte finden Sie in der Onlinedokumentation. Als Beispiel soll der Wert 4verwendet werden, der eine Konvertierung in das deutsche Datumsformat mitzweistelliger Jahresangabe bewirkt:

Beispiel 1:PRINT CONVERT(varchar(20), GETDATE(), 4);

Die Ausgabe dieser Anweisung ist:

15.02.06

Die Verwendung des Werts 104 bewirkt eine vierstellige Ausgabe der Jahreszahlin deutscher Datumsschreibweise:

Beispiel 2:PRINT CONVERT(varchar(20), GETDATE(), 104);

In diesem Fall erhalten Sie die folgende Ausgabe:

15.02.2006

9783836216937.book Seite 259 Freitag, 26. November 2010 10:32 10

Page 87: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

260

Grundlagen der SQL-Programmierung6

Informationsverluste im Zusammenhang mit Konvertierungen

Sie sollten bei Konvertierungen stets beachten, dass bei einem nicht hinreichendgewählten Zieldatentyp die Möglichkeit besteht, dass Informationen abgeschnit-ten werden und damit verlorengehen! Das folgende Beispiel soll diesen Umstandverdeutlichen:

Beispiel:DECLARE @Server AS CHAR(10);SET @Server = 'SQL SERVER';PRINT CAST(@Server AS CHAR(3));

Die Ausgabe dieses Beispiels lautet:

SQL

Obwohl die ursprüngliche Zeichenkette nach drei Zeichen abgeschnitten wurde,löst SQL Server in diesem Fall weder eine Fehlermeldung noch eine Warnungaus!

Neben den besprochenen Konvertierungsfunktionen gibt es eine weitere Mög-lichkeit der Konvertierung: nämlich die Konvertierung von Zeichenketten in Uni-code, die wir im folgenden Abschnitt erläutern.

6.6 Dynamische SQL-Anweisungen

Variablen können – wie Sie in Abschnitt 6.2, »(Lokale) Variablen«, gesehen haben –innerhalb einer SELECT-Anweisung zum Beispiel in der WHERE-Klausel verwendetwerden, um Datensätze abhängig vom Variableninhalt zu selektieren. Der Ver-such, die Tabellenbezeichnung selbst durch eine Variable zu ersetzen, schlägtallerdings fehl:

Beispiel:DECLARE @Tabelle varchar(20);SET @Tabelle = 'Production.Product';SELECT * FROM @Tabelle;

Anweisungen, deren Code für verschiedene Datenbankobjekte verwendet wer-den soll, die als Variablen übergeben werden, werden als dynamische SQL-Anwei-sungen bezeichnet. Der Versuch, dynamische SQL-Anweisungen wie im obenangegebenen Beispiel auszuführen, wird immer in einer Fehlermeldung resultie-ren. SQL Server bietet jedoch zwei verschiedene Möglichkeiten, dynamischeAnweisungen auszuführen: EXECUTE und sp_executesql.

9783836216937.book Seite 260 Freitag, 26. November 2010 10:32 10

Page 88: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1185

Index

% (Modulo-Division) 174% (Platzhalter) 197(Klammeroperator) 198(local) 104* (Multiplikation) 174* (Platzhalter) 179+ (Addition) 174+ (Zeichenverkettung) 174.NET 2.0 699.NET Assembly Loader 703.NET Framework 30.NET-Assembly 697.NET-CLR

1.0 6981.1 6982.0 698

.NET-Runtime 698

.NET-Speichermanagement 698

.NET-Thread-Pool 699

.NET-Typen 745/ (Division) 174< (Vergleichsoperator) 175<= (Vergleichsoperator) 175<> (Vergleichsoperator) 175– (Subtraktion) 174!= (Vergleichsoperator) 175= (Vergleichsoperator) 175!< (Vergleichsoperator) 175!> (Vergleichsoperator) 175> (Vergleichsoperator) 175>= (Vergleichsoperator) 175@@CONNECTIONS 248@@CURSOR_ROWS 608@@ERROR 256, 265, 271@@ERROR-Variable 801@@FETCH_STATUS 608@@IDENTITY-Funktion 549@@LANGUAGE 248@@MAX_CONNECTIONS 248@@OPTIONS 248@@ROWCOUNT 256, 588@@SERVERNAME 248@@VERSION 248^ (Umkehrungssymbol) 199_ (Platzhalter) 198

A

Abfragean Datenbankmodul 118analysieren 126asynchrone 946auf verschiedene Server 293ausführen 122Ausführung abbrechen 126debuggen 123Duplikate eliminieren 183einfache 177Ergebnis einschränken 187Ergebnis sortieren 184Ergebnisse zusammenfassen 206neue 118parametrisierte 942rekursive 797Unterabfrage 203

Abfrageausführung 129abgebrochene 130erfolgreiche 129, 130nicht erfolgreiche 129, 130

Abfrageausführung (Optionen) 222Abfrage-Designer 131Abfrage-Editor 118Abfrageergebnis 128

zusammenfassen 206Abfrageerstellung

grafische 131Abfragefenster 119

IntelliSense 137Abfrageleistung

verbessern 615Abfrageoptimierer 486Abhängigkeit

innere 90Ablaufsteuerung 231

BREAK 237CONTINUE 238GOTO 239IF EXISTS 235IF...ELSE 232RETURN 239WAITFOR 240WHILE 236

9783836216937.book Seite 1185 Freitag, 26. November 2010 10:32 10

Page 89: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1186

Index

Ablaufverfolgung 643ABS 256ABSOLUTE n 600absolute Positionsangabe 603AcceptChanges 996, 1002, 1015AcceptRejectRule 1002AcceptRejectRule (Eigenschaft) 1002Access 132, 294Accumulate-Methode 762ACID 659ADD 348Addition 174AddWithValue (Methode) 943Administration und Monitoring von

CLR-Objekten 776Administrator 37, 78

Kennwort 37sa 37System 37

ADO.NET-Provider 873AdventureWorks 61, 221, 646

Product-Tabelle 62ProductVendor-Tabelle 69Vendor-Tabelle 69

AdventureWorks OLTP 42AdventureWorks2008R2 111AdventureWorks2008R2_RTM.exe 41AFTER-Trigger 532, 538, 544, 769Aggregat 761

installieren 768Aggregatfunktion 200

AVG 200COUNT 201MAX 201MIN 201SUM 201

Aggregatoperatoren 1130Average 1132Count 1130LongCount 1130Min 1132Sum 1130

Aktivierungsprozedur 586Erstellung 586

Aktivitätsmonitor 159% Prozessorzeit 159Aktuelle wertvolle Abfragen 160Batchanforderungen/Sekunde 159Datenbank-E/A 159, 160

Prozesse 159Ressourcenwartevorgänge 160Wartende Tasks 159

Aktivitätsmonitor � SQL-Server-Aktivitäts-monitor

Aktualisierungabgeschlossen 54aktualisierte Instanz 55Durchführung 50Fehlerberichte senden 53Instanzauswahl 51Instanzkonfiguration 52Serverkonfiguration 52Updatestatus 54Upgraderegeln 53Volltextkataloge 52vorhandene Komponenten 51Zusammenfassung 53

Aktualisierung von SQL Server 44Upgrade Advisor 44

Aktualisierung von SQL Server 2000 44Aktualisierung von SQL Server 2005 44Aktualisierung von SQL Server 2008 44Aktualisierungsweitergabe 424Algorithmus

schützenswerter 507Alias 284, 787

Tabelle 284All 1135ALL SERVER-Option 770AllowDBNull (Eigenschaft) 981AllowUserToAddRows (Eigenschaft) 1078AllowUserToDeleteRows (Eigenschaft)

1078ALTER 551ALTER ASSEMBLY 704ALTER ASSEMBLY-Statement 704

UNCHECKED DATA-Option 705VISIBILITY-Option 705

ALTER COLUMN 349ALTER DATABASE 307ALTER FUNCTION 516, 524ALTER LOGIN 446ALTER LOGIN...WITH DEFAULT DATA-

BASE 446ALTER PROCEDURE 501ALTER TABLE...ADD 348ALTER TABLE...ADD CONSTRAINT 361ALTER TABLE...ALTER COLUMN 349

9783836216937.book Seite 1186 Freitag, 26. November 2010 10:32 10

Page 90: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1187

Index

ALTER TABLE...DROP COLUMN 350ALTER TABLE...DROP CONSTRAINT 363ALTER TABLE...NOCHECK CONSTRAINT

362ALTER TABLE...WITH NOCHECK 361ALTER TRIGGER 544ALTER TYPE-Statement 751ALTER USER 466ALTER USER...WITH DEFAULT_SCHEMA

466ALTER VIEW...AS 474ALTER XML SCHEMA COLLECTION 836American National Standards Institute 163Analyse

der zu erfassenden Informationen 92starten 647von Beziehungen 92

Analyse-Assistent 47Authentifizierung 48Avschluss der Analyse 49Datenbankauswahl 48Verbindungsparameter 48Willkommensbildschirm 47zu analysierende Komponenten 47

Analysis Services 100AND 176, 177Änderungsnachverfolgung 557, 572

Tabellenaktivierung 574Versionswert 575

Änderungsweitergabe 357Anmeldedialog 99Anonyme Typen 1108ANSI 163ANSI SQL-92-Standard 761ANSI-konforme Abfrage 782Anweisungsberechtigung 451Any 1134AppDomain 700Application Domain 699, 700Application Domain Management 700Arbeitsauslastung 642ArcInfo-Shape 400ArgumentException 982ArgumentException-Klasse 750ArgumentOutOfRangeException-Klasse

758Aristoteles 175Array 593AS 180, 794

ASCII 252, 253Assembly 700

ALTER ASSEMBLY 704bereitstellen 719CREATE ASSEMBLY 704installieren 704kompilieren 710Loading 699mit sqlcmd bereitstellen 721ohne Visual Studio kompilieren 720PERMISSION_SET 705Sicherheitsstufen 705Sourcecode 704verwalten 704Verwaltung 704

Assembly Loader 703Assembly Resolver 699, 700Assembly-Management 698Assembly-Versionierung 704Association of Oil & Gas Producers 385Association-Attribut 1145Atomarität 660Atomicity 660Attribut 64, 86

atomares 86elementares 87

Attributwertatomar 86elementar 86Liste 87

Auflösung einer m:n-Beziehung 93Aufteilungsoperatoren 1135Ausführung der Abfrage abbrechen 126Ausführungskontext 701Ausführungsplan 486, 727

veraltet 510Ausgabe

mit PRINT und SELECT 218Ausgabeparameter

verwenden 496Ausgabestrom

steuern 736Äußere Verknüpfung 288Auswahloperator 192

BETWEEN 194IN 195IS 192LIKE 196

Auswertungsreihenfolge 174

9783836216937.book Seite 1187 Freitag, 26. November 2010 10:32 10

Page 91: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1188

Index

Authentifizierung 99, 104, 440gemischter Modus 37SQL Server 37, 104, 440Windows 37, 104, 440

Authentifizierungsmodus 37AutoIncrement (Eigenschaft) 990AutoIncrementSeed (Eigenschaft) 990AutoIncrementStep (Eigenschaft) 990Autoinkrementspalte 989AUTO-Modus 856Average 1132AVG 200Azure 29

B

Balanced Tree 618Bankleitzahl 68Barcode 68Basistabelle 470, 547batch 221Batch-Trennzeichen 221B-Baum 618bcp 437BEGIN 231BEGIN TRANSACTION 666BEGIN TRY 802BeginEdit (Methode) 987BeginExecuteReader (Methode) 946BeginTransaction (Methode) 924begrenzter Bezeichner 166Beispieldatenbanken 41

AdventureWorks OLTP 42AdventureWorks OLTP 2008R2 42herunterladen 41Installation 41Installationsdatei 41Lizenzvereinbarung 42Northwind 408

benannte Instanz 35Benutzer 445

Aktivierung 458Deaktivierung 458

Benutzerassembly 701Benutzerdefinierte Funktion 513, 696, 722

ändern 516, 524Aufruf mit EXECUTE 516Darstellung im Objekt-Explorer 515Fehlerbehandlung 514

Inline 518löschen 516, 524maximale Anzahl Eingabeparameter 513Rückgabedatentyp 514Skalarwert 514Standardwert 513Tabellenwert 518Tabellenwert mit mehreren Anweisun 521Übersicht 513UDF 513User-defined Function 513, 722

Benutzerdefinierte Serialisierung 756Benutzerdefinierter Datentyp 505, 696

erstellen 746Zugriff vom Client 759

Benutzerdefinierter Fehler 274anzeigen 276auslösen 276erstellen 274in Landessprache 279löschen 281nicht vordefinierter 277

Benutzerdefinierter Fehler � siehe FehlerBenutzerdefinierter Trigger 696, 768

installieren 775Benutzerdefinierter Typ 744

aktualisieren 755Benutzerdefiniertes Aggregat 696, 761

installieren 768Benutzername 105Benutzerverwaltung 439

Alias 446Datenbankzugriff erteilen 444Eigenschaften eines Benutzers anzeigen 443guest 461Log-in 440SQL-Server-Log-in einrichten 442Standardschema zuweisen 466Windows-Log-in einrichten 441Zusammenfassung zu Rollen 447Zuweisung einer Rolle 450Zuweisung einer Standarddatenbank 446

berechnete Spalte 181Berechtigung 448

an Benutzer und Rollen vergeben 451Anweisungs- 451entziehen 452erben 448gewähren 452

9783836216937.book Seite 1188 Freitag, 26. November 2010 10:32 10

Page 92: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1189

Index

Objekt 451vergeben 454verweigern 452weitergeben 455

Bericht (Datenbank) 161Berichtsdatei 127Besitzerkette

gebrochene 464Beständigkeit 660BETWEEN 194Bezeichner 165

begrenzter 166regulärer 166vollqualifiziert 464

Beziehung 731:1 921:1-Beziehung 741:n 931:n-Beziehung 74m:n 93m:n-Beziehung 75

bigint 167bildlauffähiger Cursor 601BINARY BASE 64 854BinaryReader-Klasse 756BinaryWriter-Klasse 756Binding 1081BindingNavigator 1084BindingSource 1080Bit 167BLOB-Daten 341Block 231BLZ 68Bookmark 143BREAK 237Breitengrad 378B-Tree 618Bulk Copy 435Bulk Copy Program 437BULK INSERT 435, 752bulkadmin 448Bundesamt für Karthographie und

Geodäsie 400

C

C# 3.0 1096anonyme Methoden 1102anonyme Typen 1108

Erweiterungsmethode 1105generische Erweiterungsmethoden 1106Lambda-Ausdruck 1098LINQ-Abfragen 1109neue Sprachfeatures 1096Objektinitialisierung 1108Prioritätsregeln 1106

C++ 694, 695Cache 662, 697CALLED ON NULL INPUT-Option 724CancelEdit (Methode) 987CASCADE 358case sensitive 165CASE-Funktion 241

einfache 241komplexe 244Wertezuweisung durch 246

CAST 258CATCH 504CATCH-Block 266, 741, 802cdc � Change Data CaptureChange Data Capture 557

Abfragefunktionen 565Änderungstabelle 563Aufzeichnungsinstanz 563Benutzer 560Datenbankkonfiguration 559Datetime-Wrapperfunktionen 571Funktionsweise 558Schema 559, 563, 564Überwachung einrichten 560zyklische Abfragen 570

Change Tracking � Änderungsnachver-folgung

CHANGE_TRACKING_CURRENT_VERSION 575

CHANGE_TRACKING_MIN_VALID_VERSION 575

ChangeConflictException 1160ChangeConflicts 1162ChangeDatabase (Methode) 924ChangePassword (Methode) 908ChangeSet 1156CHANGETABLE 576CHAR 252, 253char(n) 167, 168CHARINDEX 252, 253CHECK 527, 531CHECK CONSTRAINT 362

9783836216937.book Seite 1189 Freitag, 26. November 2010 10:32 10

Page 93: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1190

Index

CHECK OPTION 476CHECK-Constraint 351, 355CHECKPOINT 663, 671ClearAllPools (Methode) 924ClearPool (Methode) 924Client 57, 77CLOSE 607Closed (Methode) 910Cloud-Datenspeicherung 29CLR 693

Betriebssystemoperationen 698Hosting-API 700Integration 693Tasks 699

CLR enabled 709CLR Execution Performance Counter 779CLR vs. T-SQL 709CLR-Datentypen 377, 718CLR-Funktion 726CLR-Hosting 698CLR-Integration 697CLR-Objekt 710

administrieren 776Laufzeitinformationen 777

CLR-Sicherheitsstufen 705EXTERNAL_ACCESS 705SAFE 705UNSAFE 705

CLR-Unterstützungaktivieren 707per Skript aktivieren 709per Skript aktivieren � siehe clr _enabledper Skript aktivieren � siehe RECONper Skript aktivieren � siehe sp_configure

CLUSTERED 627, 629Codd, Dr. Edgar Frank 58Code Access Security 702Codeplex-Internetseite 41Column-Attribut 1144ColumnMappings (Eigenschaft) 968CommandBuilder 1005CommandText 1071CommandTimeout (Eigenschaft) 930CommandType (Eigenschaft) 954CommandType (Enumeration) 954COMMIT TRANSACTION 666COM-Objekt 695

Einbindung 695COM-Objekt � siehe C++

Compact Edition 28Complex Binding 1079COMPUTE 216COMPUTE BY 217ConflictMode 1161CONNECT 458Connect Timeout 912ConnectionState 910ConnectionString-Eigenschaft 907ConnectionTimeout (Eigenschaft) 922Consistency 660Constraint 351, 550, 726Constraint � siehe EinschränkungConstraintCollection 980contains() 842Context 731CONTINUE 238ContinueUpdateOnError 1027Contract 580ControlBindingsCollection 1081Controller 325CONVERT 258Copy-on-Write 321COUNT 201Count 1130COUNT(*) 202COUNT(DISTINCT) 201CPU-Management 698CREATE 551CREATE ASSEMBLY 704CREATE ASSEMBLY-Statement 704, 721CREATE DATABASE 295CREATE FUNCTION 514, 518, 522CREATE FUNCTION-Statement 724, 728CREATE INDEX...ON 626CREATE LOGIN 441CREATE LOGIN...FROM WINDOWS 441CREATE LOGIN...WITH PASSWORD 442CREATE PROCEDURE...AS 488CREATE PROCEDURE-Statement 721CREATE ROLE 450CREATE SCHEMA 465CREATE SCHEMA...AUTHORIZATION 465CREATE SPATIAL INDEX 406, 407CREATE TABLE 333CREATE TRIGGER...ON 532, 540CREATE TRIGGER...ON ALL SERVER 551CREATE TRIGGER...ON DATABASE 554

9783836216937.book Seite 1190 Freitag, 26. November 2010 10:32 10

Page 94: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1191

Index

CREATE TRIGGER-Statement 775CREATE TYPE-Anweisung 505CREATE TYPE-Statement 751CREATE USER 445CREATE USER...FOR LOGIN 445CREATE VIEW...AS 472CREATE VIEW...AS...WITH CHECK OPTION

478CREATE XML INDEX 847CREATE XML INDEX � siehe XMLCREATE XML SCHEMA COLLECTION 836CREATE_DATABASE 551CreateCommand (Methode) 924, 929CROSS APPLY-Statement 783CROSS JOIN 290Crystal Reports 101CTE 792CUBE-Operator 213, 216Cursor 593

Aktualisierungsoptionen 596ausgewählte Daten aktualisieren und löschen

613automatisches Durchlaufen 607bildlauffähiger 596Daten in der Auswahl aktualisieren 613Daten in der Auswahl löschen 613Datensätze abrufen 598dynamischer 596-ende 606erstellen 595FETCH-Anweisung 598Funktionen 608Funktionsweise 593Lese- 596löschen 607Nichtsperr- 596öffnen 597Positionsangabe 599schließen 607serverseitiger 594Sperr- 596Sperroptionen 596statischer 596Struktur 597Verwendung von Positionsangaben 599Vorwärts- 596Zugriffsoptionen 596

Customer (Bibliothek) 704

D

d (Platzhalter) 278Data Control Language 164Data Definition Language 164, 551Data Manipulation Language 164, 529Data Mart 101Data Query Language 164Data Transformation Services 101Data Warehouse 101DataAccess-Parameter 723, 753Database (Eigenschaft) 922Database Consistency Checker 314Database Console Commands 314database owner 464DataBindings.Add 1082Datacenter Edition 28DataColumn 973DataColumnCollection 973DataColumnMappingCollection 970DataContext 1147, 1153, 1169DataGridView 1076DataLoadOptions 1151DataMember 1077, 1080DataReader-Klasse 735DataRecord-Klasse 731DataRelation 999DataRow 973DataRowCollection 973DataRowState 993DataRowVersion 993DataRowViewState 1014DataSet 967, 971DataSource 1080DataSource (Eigenschaft) 922, 1077DataTable 964, 973DataTableMapping 966DataView 1036DATEADD 249, 251DATEDIFF 249, 252Datei

öffnen 119Dateigruppe 297, 310, 340Datei-ID 618Dateivergrößerung 299Daten

Speicherung im Dateisystem 340Daten in der Cursorauswahl 613Datenabfragesprache 164

9783836216937.book Seite 1191 Freitag, 26. November 2010 10:32 10

Page 95: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1192

Index

DATENAME 249Datenbank 108

ändern 307Auswahl durch USE 178benutzerdefinierte 108Dateien löschen 309erstellen 295erstellen mit mehreren Dateien 304für die Arbeitsauslastungsanalyse 646Grundlagen 57historische 58Inhalt 111löschen 304physische 78relationale 59Standard 122Struktur 111System 108verfügbare 122verkleinern 313Verwaltung 78

Datenbankbericht 161Datenbankdatei 296

Eigenschaften ändern 308hinzufügen 307nachträgliche Änderung 307verkleinern 314

Datenbankdiagramm 112ausdrucken 114erstellen 112Seitenumbrüche anzeigen 114speichern 115Tabelle entfernen 115Tabelle hinzufügen 112, 115Tabellen anordnen 113Unterstützung installieren 112verknüpfte Tabellen hinzufügen 115

Datenbankentwurf 83Denormalisierung 95Grundlagen 83normalisierter 84

Datenbank-Hauptschlüssel 330Datenbankkonfiguration 573Datenbankmanagementsystem 77

Hauptaufgabe 79Struktur 77

Datenbankmodul 100, 103Datenbankmodul-Abfrage 118Datenbankmodulkonfiguration 38

Datenbankmodul-Optimierungsratgeber 641

Datenbank-Momentaufnahme 111, 316Datenbankobjekt

temporäres 110Datenbankoptionen 635Datenbankrolle

benutzerdefiniert 450feste 449

Datenbanksicherung 110Datenbanktrigger 554Datenbankzugriff

erteilen 444Datenbindung 1078Datendatei 297

primäre 296sekundär 304sekundäre 297

Datendefinitionssprache 164Datenintegrität 60, 351, 698

Implementierung 351Datenkonsistenz 61, 531Datenmanipulation auf Sichten 546Datenmanipulationssprache 164Datenprovider 901, 903Datensatz

ändern 422einfügen 417kopieren 427löschen 425manipulieren 417mit IDENTITY-Wert einfügen 420mit NULL und DEFAULT eingeben 419

Datensteuerungssprache 164Datentyp 744

benutzerdefiniert 505CLR 377, 385geodätischer 378geography 378geometry 378hierarchischer 377, 408planarer 378räumlicher 377

Datentypen in SQL Server 62bigint 167bit 167char(n) 167datetime 167decimal 167

9783836216937.book Seite 1192 Freitag, 26. November 2010 10:32 10

Page 96: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1193

Index

float 167money 167nchar(n) 167numeric 167nvarchar(n) 167real 167smalldatetime 167smallmoney 167TABLE 524tinyint 167varbinary(max) 171varchar(n) 167

Datenverschlüsselungtransparente 329

Datenzugriffs-API 873DATEPART 249, 251, 726, 789datetime 167, 168Datums-/Uhrzeitfunktionen 167, 248Datums-/Uhrzeitwerte 172DAY 249, 251dayofyear 249db_accessadmin 449db_backupoperator 449db_datareader 449db_datawriter 449db_ddladmin 449db_denydatareader 449db_denydatawriter 449DB_ID-Funktion 631db_owner 449db_securityadmin 449DBCC 314DBCC CHECKDB 752DBCC CHECKFILEGROUP 752DBCC CHECKTABLE 752DBCC SHOW_STATISTICS 639DBCC SHOWCONTIG 631DBCC SHRINKDATABASE 314DBCC SHRINKFILE 315DBConcurrencyException 1026, 1032dbcreator 448DBMS 77dbo 464DCL 164DDL 164, 551DDL-Ereignisgruppe 552DDL-Trigger 551, 555, 769

mit Datenbankbereich 551, 554mit Serverbereich 551

DDL-Trigger mit Serverbereich 551Deadlock 687, 698, 701

Beispiel 689Opfer 688Situation 688Vermeidung 689

DEALLOCATE 607Debuggen 123

beenden 126Einzelschritt 124Haltepunkt 124nächste Anweisung anzeigen 124Weiter 124

Debugging 704decimal 167DECLARE 223, 595DECLARE...CURSOR 595DEFAULT 419, 477, 493, 513, 527DEFAULT VALUES 422DEFAULT-Constraint 351, 356DefaultIfEmpty 1140DEFAULT-Wert 815Deklarative Integrität 551Dekrement 225DELAY 240delegate 1101delegate (Schlüsselwort) 1101Delegates im .NET Framework 1098DELETE 425, 478, 479, 529, 658Delete 846Delete (Methode) 988DELETE FROM 425DeleteCommand 1007, 1018DELETED 771, 816DELETED-Tabelle 434, 534, 594DeleteOnSubmit 1158Denormalisierung 95DENSE_RANK-Funktion 808DENSE_RANK-Methode 809DENY 452Detailtabelle 357Developer Edition 28Dienst 41, 102, 146, 579Dienstendpunkt 579Diensthauptschlüssel 330Dienstkonten 36DIFFERENCE 253DirectoryInfo-Klasse 743DISABLE TRIGGER...ON 538

9783836216937.book Seite 1193 Freitag, 26. November 2010 10:32 10

Page 97: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1194

Index

diskadmin 448DISTINCT 183Distinct 1128Division 174DML 164, 529DML-Anweisung 545, 658DML-Trigger 529, 537, 555, 769

programmieren 531, 544Domänenkonto 36Doppelt verkettete Liste 620DQL 164DROP 551DROP COLUMN 350DROP DATABASE 304DROP FUNCTION 516, 524DROP INDEX 634DROP PROCEDURE 501DROP STATISTICS 638DROP TABLE 351DROP TRIGGER 541DROP TRIGGER...ON ALL SERVER 553DROP TYPE-Statement 751DROP USER 445DROP VIEW 474DROP XML SCHEMA COLLECTION 836DROP_EXISTING 633DTS 101Durability 660DYNAMIC 596Dynamische Management-View 778Dynamische SQL-Anweisung 260

EXECUTE 261sp_executesql 261

E

Ebene 263Editionsvergleich 29Eigenen Fehler auslösen 806Eigenschaften-Fenster 130Eingabeparameter

verwenden 489Einschränkung 351

aktivieren 362deaktivieren 362Definition 352Definition auf Spaltenebene 352Definition auf Tabellenebene 353Eigenschaften 353

löschen 363nachträgliche Definition 361verwalten 361

Einzugvergrößern 128verkleinern 128

ElementAt 1139Elementoperatoren 1137ElementOrDefault 1139ELEMENTS 852ELSE-Zweig 232ENCRYPTION 507END 231END TRY 802EndEdit (Methode) 987EndExecuteReader (Methode) 946Endlosschleife 126EnlistTransaction (Methode) 924Enterprise Edition 27Entität 63Entitätsklasse 1172

Tools 1152Entitätstyp 63EntityRef<T> 1146Entity-Relationship-Diagramm 96EntitySet<T> 1148Entscheidungstabelle

mit PIVOT erstellen 789EPSG (European Petroleum Survey Group)

385Nachfolge der 385

EPSG-Code 385ER-Diagramm 96Ereignisauswahl 643Ereignisbenachrichtigung 579

auslösen 584empfangen 584erstellen 583Löschen von Objekten 590

Ereignisgruppen 554Ergebnis 129

in Datei 127in Raster 126in Text 126

Ergebnisbereich 128Error Handling 265Error-Funktionen

ERROR_LINE() 270ERROR_LINE-Funktion 803

9783836216937.book Seite 1194 Freitag, 26. November 2010 10:32 10

Page 98: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1195

Index

ERROR_MESSAGE() 269ERROR_MESSAGE-Funktion 803ERROR_NUMBER() 269ERROR_NUMBER-Funktion 803ERROR_PROCEDURE() 270ERROR_PROCEDURE-Funktion 803ERROR_SEVERITY() 269ERROR_SEVERITY-Funktion 803ERROR_STATE() 269ERROR_STATE-Funktion 803

ERRORLOG 672Erweiterte gespeicherte Prozedur 694

Debugging 694Erweiterte gespeicherte Prozedur � siehe

C++Erweiterte gespeicherte Prozedur � siehe XPEuropean Petroleum Survey Group 385Evaluation Edition 27Event Notification Siehe Ereignisbenachrich-

tigungEventData-Eigenschaft 773Event-Parameter 770Excel 294Except 1129EXCEPT-Statement 819Exclusive Lock 675EXEC 119EXECUTE 119, 261, 485EXECUTE AS 511

Benutzername 511CALLER 511OWNER 511SELF 511

ExecuteAndSend()-Methode 735, 771ExecuteNonQuery (Methode) 930ExecuteReader (Methode) 930ExecuteScalar (Methode) 930exists() 841Exklusionsverknüpfung 286Exklusiv-ODER-Funktion 327EXPLICIT-Modus 860Explizite Konvertierung 257Express Edition 28

maximale Datenbankgröße 28Extended Stored Procedure 694

Nachteile 694Sicherheitsbereich 694

EXTERNAL 738EXTERNAL_ACCESS 705, 706, 713

F

Fallunterscheidung 241CASE 241ISNULL 247

FarbcodierungBlau 119Dunkelgrau 121Dunkelgrün 120Grün 120Magenta 120Rot 120Rotbraun 120

Farbcodierung � siehe ProgrammcodeFehler 274

abbruchverursachender 274benutzerdefiniert 274is_event_logged-Parameter 265severity-Parameter 264text-Parameter 265

Fehler auslösen 806mit Parametern 278programmgesteuert 276RAISERROR-Funktion 806

Fehlerbehandlung 256, 265, 801@@ERROR 265Funktionen zur 269TRY...CATCH 265

Fehlermeldung 262Ebene 263Meldung 263Meldungstext 264Status 263Struktur 262Zeile 264

Festkommazahl 167FETCH...FROM 598Fiber 698FILEGROWTH 296, 299, 303FILENAME 296, 298, 303FILESTREAM 38, 340

Aktivierung einer Instanz 341Dateigruppe 344DELETE 348Empfehlungen 341für E/A-Streamingzugriff auf Datei

aktivieren 343für Transact-SQL-Zugriff aktivieren 342GUID-Spalte 346

9783836216937.book Seite 1195 Freitag, 26. November 2010 10:32 10

Page 99: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1196

Index

INSERT 347Konfiguration einer Datenbank 344nachträgliche Konfiguration einer Daten-

bank 345SELECT 347Speicherung von FILESTREAM-Daten 345Streamingzugriff von Remoteclients auf

FILESTREAM-Daten zulassen 343Tabellendefinition 346unverschlüsselte Speicherung von FILE-

STREAM-Daten 341UPDATE 347Zugriff auf FILESTREAM-Daten mit

Transact-SQL 346Fill (Methode) 961FillError (Ereignis) 970FILLFACTOR 628FillRowMethodName-Parameter 723, 730FillSchema (Methode) 979, 983finally-Block 741Find

DataView 1037FindRows

DataView 1038fire a trigger 529FireInfoMessageEventOnUserErrors 923Firewall 873FIRST 599First (Operator) 1137FirstOrDefault 1138float 167fn_cdc_get_all_changes 564, 567, 570

all 567all update old 567

fn_cdc_get_net_changes 565, 568, 570all 568all with mask 569all with merge 569

FOR DELETE-Klausel 772FOR INSERT-Klausel 772FOR UPDATE-Klausel 772FOR XML 849FOR XML-Klausel

XMLDATA 868XMLSCHEMA 867

FOREIGN KEY 68, 531FOREIGN KEY-Constraint 351, 354ForeignKeyConstraint 980FOR-Klausel 787

Formatierung 165Format-Parameter 745, 761FORWARD_ONLY 596, 600, 608Fragmentierung 630, 633Fremdschlüssel 68, 171

mit NULL-Zulässigkeit 421Fremdschlüsselverletzung 70from 1115Func 1111Funktion 248

bereitstellen 724Datum/Uhrzeit 248Fehlerbehandlung 269Konfigurations- 248Konvertierung 257mathematische 255Status 256Zeichenfolge 252zur Statusabfrage 256

Funktionen zur Fehlerbehandlung 269Funktionsauswahl 34Funktionskörper 515

G

Ganzzahl 167Garbage Collector 699

Steuerung 699Gebrochene Besitzerkette 464Gefilterter Index 653Gemischter Modus 440gemischter Modus 106Generierungsoperatoren 1133GEO84 400Geodaten

Ebenen der räumlichen Indizierung 403Erstellung von Indizes 405Index auf eine geography-Spalte 405Index auf eine geometry-Spalte 407Indizierung 403Rasterung einer Ebene 404Unterschiede in der Indizierung 404

geodätischer Datentyp 378Geography Markup Language 378, 379geography-Datentyp 378

praktisches Beispiel 399geometrische Methoden 390GeometryCollection 384geometry-Datentyp 378

9783836216937.book Seite 1196 Freitag, 26. November 2010 10:32 10

Page 100: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1197

Index

Georeferenzierung 400Geschäftsobjekt 745Gespeicherte Prozedur 483, 696, 714

Anzeige der Parameter 495Ausgabeparameter 496Eingabeparameter 489ENCRYPTION 507erstellen 487löschen 501maximale Größe 485, 500maximale Parameteranzahl 500mit Visual Studio erstellen 714Optionen 507Performancegewinn 486positionsbezogene Übergabe 492Quelltext 485RECOMPILE 487, 509RETURN 501Rückgabestatuscode 500schützenswerter Algorithmus 507Tabellenübergabe 504verweisbezogene Übergabe 494

Gespeicherte Prozedur � siehe Stored Procedure

GetAncestor-Methode 414GetChangeSet 1156GetChildRows 1002GETDATE 250, 251GetDescendant-Methode 412GetLevel-Methode 413GetName (Methode) 942GetOrdinal (Methode) 940GetParentRow 1002, 1003Get-PSDrive 155GetReparentedValue-Methode 415GetRoot-Methode 411GetSchema (Methode) 924GetSchemaTable (Methode) 940GetTable<T> 1153Gleitkommazahl 167Globale Variable 227GML (Geography Markup Language) 378,

379GO 221, 487, 554GOTO 239GPS (Global Positioning System) 377, 385GRANT 452GRANT...WITH GRANT OPTION 455

GROUP BY 211CUBE 213, 216GROUPING SETS 213, 214ROLLUP 213, 215

GROUP BY...HAVING 212GroupBy 1123GROUPING SETS-Operator 213, 214GroupJoin 1127Gruppierte Rangliste

mit Windowing 810Guest 461Gültigkeitsbereich

Variable 226Gültigkeitsbereich von Variablen 226

H

Hardwareserver 58HasErrors (Eigenschaft) 1029Hauptschlüssel

Datenbank 330Dienst 330

Heap 616, 620Hierarchische Daten

Verarbeitung 797hierarchischer Datentyp 377, 408

Abbildung von Selbstreferenzierungen 409GetAncestor-Methode 414GetDescendant-Methode 412GetLevel-Methode 413GetReparentedValue-Methode 415GetRoot-Methode 411IsDescendantOf-Methode 415Methoden 410Parse-Methode 411Read-Methode 416ToString-Methode 410unter T-SQL nicht unterstützte Methode

416Write-Methode 416

hierarchyid-Datentyp � siehe hierarchischer Datentyp

HOLDLOCK 686Host 698Hosting Layer 701Hosting-API 700HostProtection-Attribut 703hour 249HTML 826, 832HTTP 873

9783836216937.book Seite 1197 Freitag, 26. November 2010 10:32 10

Page 101: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1198

Index

I

I/O-Zugriffe 699IBinarySerialize-Interface 756, 765Identitätswechsel 511IDENTITY 335, 420, 549, 594IDENTITYCOL 335Identity-Spalte 334, 815IEnumerable<T> 1111IEnumerable-Interface 727, 730IF EXISTS 235, 292IFELSE 232IF-Zweig 232IL-Code 703Impersonalisierung 706, 740Impersonate-Methode 740Implizite Konvertierung 257IN 195Index 615

automatische Erstellung 629Balanced Tree 618B-Baum 618Blattebene 618, 623B-Tree 618clustered 616durchlaufen 619Erstellung 626Fragmentierung 630, 633Füllfaktor 628geeignete Spalten 640gefilterter 653gruppierter 616, 620Leaf-Level 618löschen 634manuelle Erstellung 626maximale Anzahl nicht gruppierter Indizes

619Neuerstellung 633nicht geeignete Spalten 641nicht gruppierter 616nicht gruppierter auf gruppiertem 623nicht gruppierter auf Heap 616oberste Seite 618Planung 640root 618Schlüsselwert 618Seite 618Stamm/Wurzel 618Statistiken 634

Struktur 615, 617Umwandlung 622Uniquifier 623verwalten 630

Indextyp 847InfoMessage (Ereignis) 734, 918Informationen über den Fehler ermitteln

802Informationsschemasichten 480Initialisierung 224Init-Methode 762Inkonsistenz 676Inkrement 225Inlinefunktion 518, 522In-Memory ADO.NET-Datenprovider 730INNER JOIN 285

Umkehrung der Funktionsweise 291Innere Verknüpfung 285INSERT 417, 476, 479, 529, 658, 846

mit mehreren Datensätzen 426INSERT INTO...DEFAULT VALUES 422INSERT INTO...VALUES 417INSERT...SELECT 427InsertCommand 1007, 1018INSERTED 662INSERTED-Tabelle 534, 594, 771, 816inserted-Tabelle 434Installation 27, 31

abgeschlossen 40Aktivierung von FILESTREAM 38Auswahl des Authentifizierungsmodus 37Beispieldatenbanken 41benannte Instanz 35Center 30Dateien 30Datenbankmodulkonfiguration 38Dienstkonten 36Festlegung eines Administrators 37Funktionsauswahl 34Installationsbereit 38Installationsstatus 40Instanzkonfiguration 35Konfigurationsregeln 38mehrfache 35Produktschlüssel 32Serverkonfiguration 37Setupunterstützungsregeln 31, 32Speicherplatzüberprüfung 36Standardinstanz 35

9783836216937.book Seite 1198 Freitag, 26. November 2010 10:32 10

Page 102: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1199

Index

Systemkonfigurationsprüfung 31Unterstützungsdateien 33Volltextsuche 34Windows- und SQL-Server-Fehlerberichte

senden 38zeitlich befristete Version 32

Installationscenter 44Installationsvoraussetzungen 29

Hardware 29Softwarekomponenten 29

Instanz 102benannte 35Standard 35, 102

Instanzkonfiguration 35INSTEAD OF-Trigger 532, 540, 544, 769

Verwendung mit Sicht 546Integrated Security-Option 744Integration Services 101Integrität

deklarative 551prozedurale 551

Integritätsart 80benutzerdefinierte 81Domänen- 80Entitäts- 80referentielle 80

IntelliSense 137Objektauswahl 137Vorschlag übernehmen 137

Intermediate Language 703International Standards Organization 163Interne Transaktionsverarbeitung 662Internet 873Intersect 1129INTERSECT-Statement 819Intranet 873INullable-Interface 746, 747InvalidOperationException 910IS 192is_event_logged 265ISBN-Nummer 67, 87IsByteOrdered-Parameter 746IsDescendantOf-Methode 415IsDeterministic-Parameter 723, 753IsFixedLength-Parameter 746IsInvariantToDuplicates-Parameter 761IsInvariantToNulls-Parameter 762IsInvariantToOrder-Parameter 762IsMutator-Parameter 753

ISNULL 247IsNullIfEmpty-Parameter 762IsNull-Methode 747ISO 163Isolation 660Isolationsstufe

auf Verbindungsebene 676Eigenschaften 684Informationen über 685READ COMMITTED 679READ UNCOMMITTED 677REPEATABLE READ 681SERIALIZABLE 682

ISO-SQL-2003-Standard 832IsPrecise-Parameter 724, 753isql (Dienstprogramm) 147IsSendingResultsets-Eigenschaft 740ItemArray (Eigenschaft) 987Iterator 727

J

Jahr 249JDBC 873JIT-Image 700Join 1125JOIN-Anweisung

mehrfache 289JOIN-Operator 283

CROSS JOIN 290INNER JOIN 285LEFT OUTER JOIN 288mehrfache Anwendung 289OUTER JOIN 288RIGHT OUTER JOIN 288

Just-in-Time-Kompilierung 700

K

Kalenderwoche 249kartesische Koordinaten 378Kartesisches Produkt 290Kennwort 105

speichern 105Kennzeichnung 172

von Datums-/Uhrzeitwerten 172von Zahlenwerten 172von Zeichenketten 172

Klammeroperator 198

9783836216937.book Seite 1199 Freitag, 26. November 2010 10:32 10

Page 103: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1200

Index

Klassenbibliothek 710Kombinierte Deklaration und Wertezu-

weisung 225Kommentar 120, 173

Block- 173entfernen 127hinzufügen 127Zeilen- 173

Kompatibilität festlegen 781Kompatibilität festlegen � siehe

sp_dbcmplevelKonfigurationsfunktion 248Konfigurations-Manager 146Konfigurationsregeln 38Konfigurationstools 31Konsistenz 660Konvertierung 257

explizite 257implizite 257Informationsverlust 260

Konvertierungsfunktion 257Koordinaten

kartesische 378Polar- 378

Koordinatenreferenzsystem 385Koordinatenübergabe

an räumlichen Datentyp 379Kopfgesteuerte Schleife 236Kopie bei Schreibvorgang 321Kreuztabelle

in flache Listen transformieren 791mit PIVOT erstellen 785

Kreuzverknüpfung 290

L

Ladenverzögertes 1148

Lambda-Ausdrücke 1098Längengrad 378language_id 264LAST 599Last 1138LastOrDefault 1138Laufzeitinformationen 777LEFT 252LEFT OUTER JOIN 288Leistungsindikator 778, 779LEN 253

Lesezeichen 143aktivieren 145deaktivieren 145in Ordner gruppieren 145löschen 145umbenennen 145umschalten 144Zugriff auf 145

Lesezeichen � siehe Management StudioLesezeichenfenster 143LIKE 196LineString 381Linke äußere Verknüpfung 288LINQ 1095LINQ to ADO.NET 1095LINQ to Objects 1095, 1112

Abfrageoperatoren 1116Abfrage-Syntax 1115from 1117GroupBy 1123GroupJoin 1127Join 1125Musterdaten 1112Select 1121SelectMany 1121Where 1119where 1118

LINQ to SQL 1095, 1140Grundlagen 1140Mapping von Objekten 1143Objektzuordnung mit Entitätsklassen 1141

LINQ to XML 1095LINQ-Abfrageoperatoren 1116LINQ-to-SQL-Designer 1166Liste

doppelt verkettete 620Lizenzvereinbarungen 45LoadWith<T> 1151localhost 104LOG 296, 672LOG ON 296Log Sequence Number 564Log-Eigenschaft 1155Log-in 440logische Operatoren 175

AND 176NOT 176OR 176

Lokale Variable 223, 227

9783836216937.book Seite 1200 Freitag, 26. November 2010 10:32 10

Page 104: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1201

Index

Verwendung des Datentyps TABLE 524LongCount 1130Loop-back-Connection 694Löschweitergabe 357, 425LOWER 253LSN � Log Sequence NumberLTRIM 253

M

m:n-BeziehungAuflösung einer 93

Managed Code 695, 697Management Studio

Abfrage-Designer 131Eigenschaften-Fenster 130Ergebnisbereich 128Lesezeichen 143Lesezeichenfenster 143neue Abfrage 118Oberfläche 106Skript-Generierung 142verbinden 106Vorlagen-Explorer 138

MARS (Multiple Active Resultsets) 937Massenkopieren 435

bcp 437BULK INSERT 435

master 109Mastertabelle 357MATCHED 431MATCHED BY TARGET 431Mathematische Funktionen 255MAX 201Max 1132MaxByteSize-Parameter 746, 761MaxLength (Eigenschaft) 981MAXSIZE 296, 299, 303Mehrfache JOIN-Anweisungen 289Mehrtabellenabfrage 283Meldung 263Meldungen 129Meldungstext 264Member 1165MemberChangedConflict 1165MemberConflicts 1163Mengenlehre 59Mercator-Projektion 402MERGE-Anweisung 429

abschließendes Semikolon 430Ausgabeparameter von OUTPUT 434deleted-Tabelle 434Filterung in der ON-Klausel 433Filterung in der WHEN-Klausel 434Filterung von Datensätzen 433Grundlagen der 429inserted-Tabelle 434MATCHED 431MATCHED BY TARGET 431NOT MATCHED BY SOURCE 431ON 429OUTPUT-Klausel 434Quelltabelle 429THEN-Klausel 429USING 429Verknüpfungsbedingung 429Zieltabelle 429

Merge-Methode 762Message 271message_id 264Methodenüberladung 711Microsoft MSDN Express 2005 Edition 899Microsoft.SqlServer.Server-Namespace

718, 723, 732Millisekunde 249MIN 201Min 1132Minute 249Mirroring 327MissingMappingAction (Eigenschaft) 969MissingMappingAction (Enumeration) 970MissingSchemaAction (Eigenschaft) 979MissingSchemaAction (Enumeration) 984M-Methode 389model 110, 302model-Datenbank 299MODIFY FILE 308modify() 841Modulo-Division 174Modus

gemischter 440Momentaufnahme

erstellen 316mit mehreren Dateien 323

Monat 249money 167, 168MONTH 249, 251month 249

9783836216937.book Seite 1201 Freitag, 26. November 2010 10:32 10

Page 105: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1202

Index

MoveFirst 1083MoveLast 1083MoveNext 1083MovePrevious 1083m-Parameter (räumlicher Datentyp) 380mscorlib.dll 702msdb 110MultiLineString 382Multiplikation 174MultiPoint 380Mutator-Methode 753

N

Nachteile � siehe Extended Stored Procedure

NAME 296, 297, 303Name

vollgekennzeichneter 293vollqualifizierter 293, 465

Named Pipe 873Namensauflösung

verzögerte 509Name-Parameter 724, 746, 762, 769Namespace 834Native Serialisierung 755nchar(n) 167, 168NET 2.0 699NET Assembly Loader 703NET-Assembly 697NET-CLR:1.0 698NET-CLR:1.1 698NET-CLR:2.0 698NET-Runtime 698NET-Speichermanagement 698NET-Thread-Pool 699NET-Typen 745Netzwerkserver 103Neue Abfrage 118Neue Ablaufverfolgung 643Neustart 110NewRow (Methode) 988NEXT 599, 600NextResult (Methode) 939NICHT 176NOCHECK CONSTRAINT 362NOCHECK CONSTRAINT ALL 362Node Table 847nodes() 841

NOLOCK 686NONCLUSTERED 616, 627, 629Normalform 84Normalisierung 83

praktische Anwendung 91Normalisierungsregel 84

1. Normalform 862. Normalform 883. Normalform 90

Northwind-Beispieldatenbank 408NOT 176, 177, 192NOT MATCHED BY SOURCE 431NTFS

Dateisystem 340NTILE-Funktion 808NTILE-Methode 814NTLM 873NULL 192, 224, 419, 493Null-Eigenschaft 747NULL-Werte 712, 815

optimierte Speicherung 336NULL-Zulässigkeit 333Number 271numeric 167nvarchar(n) 167, 168

O

O/R-Designer 1166O/R-Mapper 745OBJECT_ID-Funktion 507, 632ObjectChangeConflict 1163, 1165Objektberechtigung 451Objekt-Explorer 107Objektinitialisierung 1108Objektverwaltung 463, 465ODBC 694, 873ODER-Verknüpfung 176Office-Dokument 833OGC (Open Geospatial Consortium) 377OLAP 101OLE DB 694, 873OleDbCommand 927ON 286, 296, 340, 429ON DELETE 358ON UPDATE 358Online Analytical Processing 101Onlinebanking 68Onlinedokumentation 134

9783836216937.book Seite 1202 Freitag, 26. November 2010 10:32 10

Page 106: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1203

Index

dynamische Hilfe 136Favoriten hinzufügen 136Filter 136Hilfefavoriten 136Index 134suchen nach 134

OnNullCall-Parameter 753OPEN 597Open (Methode) 909Open Geospatial Consortium 377OPENXML

Ein XML-Dokument in eine Tabelle importie-ren 869

OPENXML-Rowset-Provider 868sp_xml_preparedocument 869sp_xml_removedocument 871

OPENXML � siehe sp_xml_preparedocument

OPENXML � siehe sp_xml_removedocument

OPENXML-Abfragen 818Operator 121, 173

arithmetischer 174Auswahl 192logischer 175Vergleich 174Verknüpfung 283Zeichenkette 174

Operatorenrangfolge 176, 189OPG (Association of Oil & Gas Producers)

385Optimierungsratgeber 641OPTIMISTIC 596OPTION(MAXRECURSION X) 800OR 176, 177Oracle 101, 163, 165, 294, 669ORDER BY-Klausel 184OrderBy 1122OrderByDescending 1122Orders.dll 704osql (Dienstprogramm) 147OUTER APPLY-Statement 783OUTER JOIN 288, 782OUTPUT 434, 497

Ausgabeparameter 434OUTPUT-Klausel 815, 816OUTPUT-Parameter 719OVER-Klausel 810

P

PacketSize (Eigenschaft) 923PAD_INDEX 628Page 616Paging

mit ROW_NUMBER 812PAGLOCK 686Parallel Data Warehouse Edition 28Parallelität 676Parameter und Rückgabewerte 712ParameterDirection (Enumeration) 957Parameters-Auflistung 943Parametrisierte Sicht 520Parität 327Parse-Methode 387, 411, 747, 748

Aufruf (explizit) 387Aufruf (implizit) 387

Partielle Methode 1170PARTITION BY-Klausel 810Partitionierung 365Partitionierungsspalte 367Partitionsfunktion 367Partitionsschema 369PATH-Index 847PATH-Modus 858PATINDEX 252, 253PDA 101Performance Counter 779Performance und Verfügbarkeit 745PERMISSION_SET-Parameter 705Personal Digital Assistant 101Personalnummer 68Physischer Speicherort 624physischer Speicherort 339Pipe 732PIVOT-Anweisung 785Pocket PC 101Point 379Polarkoordinaten 378Polygon 382

mit nicht geschlossener Fläche 382Position 618Positionsangabe

absolute 603relative 603, 604

Positionsmarke 593

9783836216937.book Seite 1203 Freitag, 26. November 2010 10:32 10

Page 107: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1204

Index

POWER 256Prädikat 1104primäre Datendatei 296, 298Primärer Index 847Primärschlüssel 64, 171

Eindeutigkeit 64kombinierter 65Vorhandensein 68Wahl eines 66

Primärschlüsselverletzung 65PRIMARY 297, 340PRIMARY KEY 64, 526, 629PRIMARY KEY-Constraint 351, 353PrimaryKey (Eigenschaft) 981PRINT 122, 218, 257, 267, 270PRIOR 599Procedure-Objekt 710processadmin 448Produktivumgebung 146Profiler 642, 778Programmcode, farbige Markierung 119Programmgesteuerte Fehlerauslösung 276Projektion 180Projektionsoperatoren 1121PropertyChanged 1172PropertyChanging 1172PROPERTY-Index 847Protokoll 79, 662Protokolldatei 296, 297, 298Prozedur 270

mit Visual Studio debuggen 721vs. Funktion 709

Prozessorauslastung 110public 449pubs 84Pufferüberlauf 702

Q

Quantifizierungsoperatoren 1134Quartal 249quarter 249Quelltabelle 429Query Engine 727, 817Query Optimizer 795query() 841Queue 580

R

RAID-System 325RAID 0 326RAID 1 327RAID 3 327RAID 5 329

RAISERROR 276, 277RAISERROR-Funktion 806RAND 256Range 1133RANK-Funktion 808Ranking- und Windowing-Funktionen 808Ranking- und Windowing-Funktionen �

siehe Windowing-FunktionRANK-Methode 808räumlicher Datentyp 377

allgemeine Verwendung 388an Datentyp angepasste Methode aufrufen

387geography 378geometrische Methoden 390geometry 378GeometryCollection 384grundlegende Techniken 385Klassenmodell 379Koordinatenübergabe 379LineString 381Methoden zur Abfrage von Eigenschaften

396Methoden zur Auswahl einzelner Objekte

396Methoden zur Koordinatenrückgabe 389Methoden zur Verarbeitung 389M-Methode 389m-Parameter 380MultiLineString 382MultiPoint 380Parse-Methode 387Point 379Polygon 382Reiter 386Spatial Reference ID 385SRID 385STArea-Methode 390STCentroid-Methode 390STContains-Methode 393STCrosses-Methode 392STDimension-Methode 398

9783836216937.book Seite 1204 Freitag, 26. November 2010 10:32 10

Page 108: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1205

Index

STEndPoint-Methode 397STEnvelope-Methode 392STGeometryN-Methode 399STGeometryType-Methode 398STGeomFromText-Methode 385STIntersection-Methode 394STIntersects-Methode 394STIsClosed-Methode 391STIsSimple-Methode 391STLength-Methode 390STNumGeometries-Methode 399STNumPoints-Methode 397STPointN-Methode 397STPointOnSurface-Methode 391STSrid-Methode 398STStartPoint-Methode 396STSymDifference-Methode 396STTouches-Methode 392STUnion-Methode 395STWithin-Methode 393STX-Methode 389STY-Methode 389ToString-Methode 386Verwendung als Spaltendatentyp 388Z-Methode 389z-Parameter 380

räumlicher Datentyp � siehe Datentypräumlicher Datentyp � siehe geography-

Datentypräumlicher Datentyp � siehe geometry-

Datentypräumlicher Index

auf eine geography-Spalte 405auf eine geometry-Spalte 407Erstellung 405

RAW-Modus 851RDBMS 77Read (Methode) 935READ_ONLY 596READCOMMITTED 686Read-Methode 416READONLY 506ReadOnly (Eigenschaft) 981, 1078READUNCOMMITTED 686real 167RECEIVE 584Rechte 448Rechtevergabe 454

an Benutzer und Rollen 451

RECOMPILE 487, 509RECONFIGURE 343, 709Recordset 129

leeres 129Recovery 671Redundanz 59

Überprüfung auf 94Vermeidung von 60

REFERENCES 355RefreshMode 1162Regulärer Ausdruck 695regulärer Bezeichner 166Reiter 119, 143

Ergebnisse 129Meldungen 129räumliche Ergebnisse 386

RejectChanges 996, 1002Rekursionsstufe

einstellen 800Relation 59, 63Relationstyp 63RELATIVE n 600Relative Positionsangabe 604relative Positionsangabe 603Remote Procedure Calls 752Repeat 1134REPEATABLE-Option 818REPEATABLEREAD 686replace value of 846REPLACE-Funktion 791Reporting Services 101ResetStatistics (Methode) 924RetrieveStatistics (Methode) 924RETURN 239, 501RETURNS 515, 519RETURNS NULL ON NULL INPUT-Option

724RETURN-Statement 807REVERSE 253Reverse 1123REVERT 511REVOKE 452RIGHT 252RIGHT OUTER JOIN 288ROLLBACK TRANSACTION 666ROLLBACK-Statement 805Rolle 447

Benutzer hinzufügen 450Datenbank, benutzerdefiniert 450

9783836216937.book Seite 1205 Freitag, 26. November 2010 10:32 10

Page 109: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1206

Index

Datenbank, fest 449erstellen 450Server 448

ROLLUP-Operator 213, 215ROOT 854ROUND 256Route 582row constructor 426ROW_NUMBER-Funktion 808ROW_NUMBER-Methode 811, 812RowChanged (Ereignis) 987RowChanging (Ereignis) 987RowFilter

DataView 1038ROWLOCK 686RowState (Eigenschaft) 992RowStateFilter 1039RowUpdated 1030RowUpdating 1030RTRIM 253Rückgabecode 500Rückgabedatentyp 514Rückgabestatuscode

verwenden 500Rule (Enumeration) 1002

S

s (Platzhalter) 278SAFE 705, 714sa-Konto 704Schema 439, 463, 836

erstellen 465Standardschema zuweisen 466

Schema Collection 836Schemainformationen 977SchemaType (Enumeration) 983Schleife

kopfgesteuert 236Schleifenbedingung 236Schleifenende 237Schleifenkopf 237Schleifenkörper 236Schlüssel 64

Fremdschlüssel 68Primärschlüssel 64

Schlüsselsymbol 172Schlüsselwort 119Schriftart 121

Schützenswerter Algorithmus 507SCROLL 596SCROLL_LOCKS 596second 249securityadmin 448Security-Management 698Seite 616Seitennummer 618Seitenteilung 621sekundäre Datendatei 297, 298Sekundärer Index 847Sekunde 249Selbstreferenzierung 408select 1115select (C# Schlüsselwort) 1115Select (Methode) 1014SELECT...FROM 178SELECT...INTO 428SELECT-Anweisung 178

* (Platzhalter) 179AS 180berechnete Spalte 181COMPUTE BY-Klausel 217COMPUTE-Klausel 216DISTINCT 183Einbindung mehrerer Tabellen 283GROUP BY...HAVING-Klausel 212GROUP BY-Klausel 211ORDER BY-Klausel 184Spaltenliste 179TOP 208TOP (n) 208TOP (n) PERCENT 209TOP (n) WITH TIES 210UNION 206WHERE-Klausel 187

SelectCommand (Eigenschaft) 961SelectMany 1121Selektion 187Send-Methode 733SendPropertyChanged 1173SendPropertyChanging 1173SendResultsEnd-Methode 737, 743SendResultsRow-Methode 737SendResultsStart-Methode 737, 743SEQUEL 163Serialisierung 755SERIALIZABLE 686Serializable-Attribut 746

9783836216937.book Seite 1206 Freitag, 26. November 2010 10:32 10

Page 110: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1207

Index

Server 57Ressourcen 58verfügbarer 104

Server Management Objects 782Server Management Objects � siehe SMOserveradmin 448Servereigenschaften 107Servername 102, 104

Suche fortsetzen 102Serverrolle 448Serverseitiger Datenzugriff mit ADO.NET

730Servertyp 100

Analysis Services 100Datenbankmodul 100Integration Services 101Reporting Services 101

ServerVersion (Eigenschaft) 923Service 579Service Broker 580

Aktivierung 586Aktivierungsprozedur 586Aktivierungsprozedur erstellen 586Datenbankkonfiguration 580interne Aktivierung 586Modifizierung der Warteschlange 589

SET 224SET DEADLOCK_PRIORITY 689SET IMPLICIT_TRANSACTIONS 669SET LOCK_TIMEOUT 685SET TRANSACTION ISOLATION LEVEL

677SetAdded (Methode) 996SetModified (Methode) 996Set-Operatoren-Familie 1128

Distinct 1128Except 1129Intersect 1129Union 1128

SET-Statement 751setupadmin 448Setupunterstützungsregeln 31Severity 806severity 264, 271Shape2SQL.exe 400Shared Lock 674Sicherheitsbereich � siehe Extended Stored

ProceduresSicherheitshierarchie 439

Sicherheitsrichtlinien 701Sicht 469, 546

ändern 473Datenmanipulation auf 474DELETE auf 478, 479Einsatz 470Einschränkungen 472erstellen 472im Objektkatakog 473Informationsschema- 480INSERT auf 475, 476, 479löschen 474parametrisierte 520System- 480UPDATE auf 477, 479Verwaltung 472

Simple Binding 1079Single 1139, 1157SingleOrDefault 1139, 1157SIZE 296, 298, 303Skalar 514Skalare CLR-Funktion 722, 725

erstellen 725Skalarwertfunktion 514, 523Skalierbarkeit 873Skip 1136SkipWhile 1136Skript 119Skript-Generierung 142smalldatetime 167, 168smallint 167smallmoney 167, 168SMomentaufnahme

interne Verwaltung 319SOAP 873Softwareserver 58Sort

DataView 1037Sortieroperatoren 1122Sortierung

verschachtelte 186SOURCE 429SourceColumn (Eigenschaft) 1019SourceVersion (Eigenschaft) 1020sp_add_operator 494sp_addlinkedserver 294sp_addmessage 274sp_addrolemember 451, 483sp_cdc_enable_db 559

9783836216937.book Seite 1207 Freitag, 26. November 2010 10:32 10

Page 111: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1208

Index

sp_configure 343, 709sp_dbcmplevel 781sp_dropmessage 281sp_executesql 261sp_help 316sp_helpdb 301, 316sp_helpfile 316sp_helpindex 630sp_helptext 507sp_recompile 511sp_spaceused 316, 337sp_xml_preparedocument 869sp_xml_removedocument 871SPACE 253Spalte

berechnete 181Definition 333geringer Dichte 337hinzufügen 348Identitätspalte 334löschen 350NULL-Zulässigkeit 333

Spaltenalias 180Spaltendefinition 333Spalteneigenschaft

ist von geringer Dichte 338SPARSE 336

Spaltenname 62SPARSE 336

Empfehlungen 339Spatial Reference ID 385Speicherkorruption 702Speichermanagement 699Speicherort

physischer 339, 624Speicherplatzüberprüfung 36Speicherverwaltung 697Speicherwarnungen 699Sperre 673

Block 674Datenbank 674Datensatz/Schlüssel 674Ebene 674Exclusive Lock 675exklusive 675gemeinsame 674Hinweise auf Tabellenebene 686Information über 687Seite 674

Shared Lock 674Tabelle 674Timeout 685

Sperrstufe einer Verbindung 685Spindelsynchronisation 328Sprungmarke 239SQL 163

Bezeichner 165Formatierung 165SQL-Server-Dienste 41

SQL Injection 483SQL Server

XML-Fähigkeiten 831SQL Server (Dienst) 146SQL Server 2005

Instanz 44SQL Server 2005 Express Edition 899SQL Server 2008

Administrator 37Aktualisierung auf 44, 50benannte Instanz 35Datentypen 62Dienstkonten 36IntelliSense 137Standardinstanz 35

SQL Server 2008 EditionGegenüberstellung von 29

SQL Server 2008 R2Aktualisierung auf 27Aktualisierung von SQL Server 2000 44Aktualisierung von SQL Server 2005 44Aktualisierung von SQL Server 2008 44Beispieldatenbanken 41Editionsvergleich 29Installation 27, 30Installationsvoraussetzungen 29Konfigurationstools 31Upgrade Advisor 46verfügbare Versionen 27

SQL Server 2008 R2 EditionAzure 29Compact 28Datacenter 28Developer 28Enterprise 27Evaluation 27Express 28Parallel Data Warehouse 28Standard 27

9783836216937.book Seite 1208 Freitag, 26. November 2010 10:32 10

Page 112: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1209

Index

Web 28Workgroup 28

SQL Server 7.0 100, 101SQL Server Integration Services 102SQL Server Profiler 642sql_identifier 836SQL-99-Standard 786, 794SQL-Abfrage-Editor 118SQL-Anweisung 118

bearbeiten 118SqlBinary 713SqlBoolean 713SqlByte 713SqlClient-Provider 902SQLCLR 693, 709

Verwendung 696sqlcmd (Dienstprogramm) 147

Abfrage ausführen 149Parameter 148

sqlcmd-Tool 721SqlCommand 927, 1071SqlCommand-Klasse 731, 735SqlConnection 903, 1070SqlConnection-Klasse 731, 734SqlConnectionStringBuilder 908SqlContext-Klasse 731, 732, 740, 770SqlDataAdapter 927, 958SqlDataAdapter-Klasse 731, 760SqlDataReader 927, 933, 971SqlDataReader-Klasse 733SqlDataRecord-Klasse 737SqlDateTime 713SqlDecimal 713SqlDouble 713SqlException 944SqlFunction-Attribut 723, 730SqlGuid 713SqlInfoMessageEventHandler 734SqlInt16 713SqlInt32 713SqlInt64 713SqlMetaData-Klasse 743SQLMetal 1152SqlMethod-Attribut 753SqlMoney 713SqlParameter 943, 945SqlParameter-Klasse 731SqlPipe-Klasse 731, 732, 737SqlPipe-Objekt 722

SqlProcedure-Attribut 710, 718sqlps 153SqlRowUpdatedEventArgs 1030SQL-Server-Aktivitätsmonitor 159SQL-Server-Anbieter 155SQL-Server-Browser 147SQL-Server-Cmdlets 158SQL-Server-Datentypen 744SQL-Server-Dienst 146

SQL Server 146SQL-Server-Agent 146, 147SQL-Server-Browser 147

SQL-Server-Konfigurations-Manager 146SQL-Server-Onlinedokumentation 134SQL-Server-Profiler-Ereignis 778SqlSingle 713SqlString 713SqlTrigger-Attribut 769SqlTriggerContext-Klasse 731SqlTypes.SqlXml-Klasse 773SqlUserDefinedAggregate-Attribut 761,

765SqlUserDefinedType-Attribut 745, 752SQRT 256SRID (Spatial Reference ID) 385, 400, 401SSIS 102Standard Edition 27Standarddateigruppe 340Standarddatenbank 122Standardinstanz 35Stapel 226Stapeltrennzeichen 221STArea-Methode 390State 271State (Eigenschaft) 910StateChange (Ereignis) 919STATIC 596StatisticsEnabled (Eigenschaft) 923Statistik 634

aktualisieren 638automatisch aktualisieren 635automatisch erstellen 635Erstellung 637Informationen abrufen 639Informationen über 637löschen 638

Statistische Werte 637Status 263Statuscode 501

9783836216937.book Seite 1209 Freitag, 26. November 2010 10:32 10

Page 113: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1210

Index

STCentroid-Methode 390STContains-Methode 393STCrosses-Methode 392STDimension-Methode 398STEndPoint-Methode 397STEnvelope-Methode 392STGeometryN-Methode 399STGeometryType-Methode 398STGeomFromText-Methode 385STIntersection-Methode 394STIntersects-Methode 394STIsClosed-Methode 391STIsSimple-Methode 391STLength-Methode 390STNumGeometries-Methode 399STNumPoints-Methode 397Stored Procedure 483, 696STPointN-Methode 397STPointOnSurface-Methode 391Streaming-Funktion 727String 120Striping 326strong name 700Structured English Query Language 163Structured Query Language 163STSrid-Methode 398STStartPoint-Methode 396STSymDifference-Methode 396STTouches-Methode 392Stunde 249STUnion-Methode 395STWithin-Methode 393STX-Methode 389STY-Methode 389SubmitChanges 1156SUBSTRING 252Subtraktion 174Suche fortsetzen 102SUM 201Sum 1130Syntaxprüfung 126sys.assemblies_modules-View 776sys.assemblies-View 776sys.assembly_files-View 776sys.assembly_types-View 776sys.databases 559, 631sys.dm_clr_appdomains-View 778sys.dm_clr_loaded_assemblies-View 778sys.dm_clr_properties-View 778

sys.dm_clr_tasks-View 778sys.dm_db_index_physical_stats 631sys.dm_tran_locks 687sys.fn_cdc_get_max_lsn 566sys.fn_cdc_get_min_lsn 566sys.fn_cdc_increment_lsn 570sys.fn_cdc_map_time_to_lsn 571sys.objects 632sys.sp_cdc_enable_table 560sys.sp_cdc_generate_wrapper_function 571sys.spatial_reference_systems 400sys.sql_modules 507sys.stats 639sys.triggers-View 776sys.types-View 751sys.xml_schema_collections 837sys.xml_schema_namespaces 837sysadmin 448System Administrator (sa) 460System.* 702system.data.dll 702System.Data.SqlClient-Namespace 730System.Data.SqlServer-Namespace 730System.Data.SqlTypes 718System.Data.SqlTypes-Namespace 712system.dll 703System.Drawing 703system.security.dll 703System.Security.Principal.WindowsIdentity-

Klasse 740System.Security.Principal.WindowsImperso-

nationContext-Klasse 740System.Web 703system.web.services.dll 703System.Windows.Forms 703system.xml.dll 703Systemassemblys 701SystemDataAccess-Parameter 724Systemdatenbank

master 109model 110msdb 110tempdb 110

Systemdatentypen 166Systemfehler

Verhalten bei 664Systemfunktion 120Systemkonfigurationsprüfung 31Systemobjekt 120

9783836216937.book Seite 1210 Freitag, 26. November 2010 10:32 10

Page 114: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1211

Index

Systemprozedur 120Systemsicht 110Systemsichten 480, 481Systemsteuerung 41Systemtabelle 704

T

Tabelle 59ändern 348Beziehungen 71erstellen 333Information zu Datentypen 171leeren 426löschen 351partitionierte 370Partitionierung 365physischer Speicherort 339Spalte ändern 349Spalte hinzufügen 348Spalte löschen 350Spaltendefinition 333struktureller Aufbau 61temporäre 363

Tabellenalias 284Tabelleninhalt

anzeigen 116Tabellenname 62, 333Tabellenscan 615, 617Tabellenseite 817Tabellenstruktur

anzeigen 116Tabellenwertfunktion 518, 523

mit mehreren Anweisungen 521Tabellenwertige CLR-Funktion 722, 726

erstellen 727TABLE 524Table Page 817Table<TEntity> 1153TableAdapter 1056Table-Attribut 1143TableDefinition-Parameter 724, 730TableMappingsCollection 965Tables 974TABLESAMPLE-Klausel 817

REPEATABLE-Option 818TABLE-Variable 791, 816TABLOCK 686TABLOCKX 686

Tabular Data Stream 736Tag (der Woche) 250Tag (des Jahres) 249Tag (des Monats) 249Take 1135TakeWhile 1136TARGET 429targetNamespace-Attribut 836Target-Parameter 770Task 699tblAutor 359tblAutorBuch 360tblBank 359tblBuch 360TCP/IP 873TDE 329TDS-Format 736TDS-Protokoll 873tempdb 110, 363Template 138Temporäre Prozedur 719temporäre Tabelle 363

globale 364lokale 363löschen 364

Terminate-Methode 762Testdatensätze

Erzeugung 291text 265Textdatei 101THEN 429ThenBy 1122ThenByDescending 1122Thread 698, 699Thread-Management 699Threadmodell 697Thread-Pool 698Thread-Synchronisation 698TIME 241Timeout 685, 699tinyint 167TOP 208TOP (n) 208TOP (n) PERCENT 209TOP (n) WITH TIES 210TOP-Klausel 817ToString-Methode 386, 410, 747trace 644TRAN 666

9783836216937.book Seite 1211 Freitag, 26. November 2010 10:32 10

Page 115: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1212

Index

TRANSACTION 666Transact-SQL 164, 596Transact-SQL-Cursor 596Transaktion 657

bestätigen 666Checkpoint 663Einführung 657explizite 669Finanz- 657implizite 669interne Verarbeitung 662Isolationsstufe auf Verbindungsebene 676Phantomwert 683Programmierung 665Protokoll 662Prüfpunkt 663Recovery 671Rollback 665Rollforward 665rückgängig machen 666

Transaktionsprotokoll 662Transaktionsprotokolldatei 297Transformation 825transparene Datenverschlüsselung � TDEtransparente Datenverschlüsselung 329Trigger 270, 529, 594, 769

AFTER 532ändern 544Anzeige des Quelltextes 545DDL 551deaktivieren 538DELETED-Tabelle 534DML 529Funktionskörper 539implementieren 771INSERTED-TAbelle 534installieren 775INSTEAD OF 540löschen 541mit Datenbankbereich 551, 554mit Serverbereich 551Programmierung 529

TriggerAction-Eigenschaft 770TriggerContext-Klasse 770, 773TRUNCATE TABLE 426TRUSTWORTHY-Eigenschaft 739TRY 504TRY...CATCH 265, 271, 514, 666TRY-Block 266

TRY-CATCH-Block 807T-SQL 693

Verwendung 696T-SQL-Statement 695Tuning 643Tupel 63Typ

als Klasse abbilden 759TYPE 854Typinferenz 1096Typisiertes DataSet 1042Typsystem 697

U

u (Platzhalter) 278Übergabe

positionsbezogene 492verweisbezogene 494

UDF 513UNCHECKED DATA-Option 705Uncommited-Status 802Undo()-Methode 741UND-Verknüpfung 176Unicode 169Unicode-Format 758UNION 206Union 1128UNIQUE 527, 627, 629Unique (Eigenschaft) 981UNIQUE CONSTRAINT 354UNIQUE-Constraint 351UniqueConstraint 980Unique-Index 726Uniquifier 623UNPIVOT-Anweisung 786UNSAFE 705, 706Unterabfrage 203, 228, 235, 292Unterschiede zwischen T-SQL- und CLR-

Funktionen 726Unterstützungsdateien 33UPDATE 422, 477, 479, 529, 658UPDATE STATISTICS 639UPDATE...SET 422UpdateCheck 1160UpdateCommand 1007, 1018UpdateStatus (Enumeration) 1031UPDLOCK 686

9783836216937.book Seite 1212 Freitag, 26. November 2010 10:32 10

Page 116: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1213

Index

Upgrade Advisor 44Analyse-Assistent 47Bericht 50erneute Ausführung 50Funktionsauswahl 45Installation 44, 45, 46Installations-Assistent 45Installationsassistent 45Installationsende 46Überprüfung der bestehenden Installation

47Upgrade Advisor Analyse-Assistent � Ana-

lyse-AssistentUPPER 253US-amerikanisch 279USE 178, 554, 647User 445User-defined Aggregate 696User-defined Function 513, 696, 722User-defined Funktion 513User-defined Trigger 696User-defined Type 696, 744USER-Funktion 462USING 429UTF-16 758

V

ValidationMethodName-Parameter 746value() 841VALUE-Index 847var 1097varchar(n) 167, 168Variable 223

Deklaration 223globale 227Gültigkeitsbereich 226Initialisierung 224kombinierte Deklaration und Wertezuwei-

sung 225lokale 223, 227, 595Verwendung 227Wertezuweisung 224Wertezuweisung durch Abfrage 228Wertezuweisung mit SELECT 229Wertezuweisung mit SET und Unterab-

frage 228Veralteter Ausführungsplan 510Verbinden 106

Verbindunggemischter Modus 440öffnen 909schließen 910Sperrstufe 685vertraute 440

Verbindungspooling 913Verbindungsserver 294Verbindungszeichenfolge 904Verfügbare Datenbanken 122Vergleichsoperator 174Verknüpfung

äußere 288innere 285mehrfache 289

Verknüpfungsbedingung 286Verschachtelte Fehlerbehandlung 807verschachtelte Sortierung 186Versionierung von Assemblies 745Vertrag 580Vertraute Verbindung 440Verwendung des Datentyps TABLE als lokale

Variable 524Verzögerte Namensauflösung 509View 469VISIBILITY-Option 705Visual Basic 695Visual Basic 2005 Express Edition

Installation 899Visual C# 2005 Express Edition

Installation 899Visual C# 2008 Express Edition 898Visual C# 3.0 1112Visual Studio 377Visual Studio .NET 101Visual Studio 2005 714Vollgekennzeichneter Name 293Vollqualifizierte Bezeichner 464Vollqualifizierter Name 293, 465Volltextsuche 34, 833Vorlage 138

Parameterwerte angeben 140Vorlagen-Explorer 138Vorwärtscursor 600

W

Wahrheitswerte 175Währung 167

9783836216937.book Seite 1213 Freitag, 26. November 2010 10:32 10

Page 117: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1214

Index

WAITFOR 240, 588, 690Warteschlange 580Wartungsaufgabe 110Web Edition 28Webservices 873week 249weekday 249Well-known Binary 379Well-known Text 379Wertebereich 167Wertezuweisung 174

an eine Variable 224WGS 84 400WHEN 242Where 1111WHERE CURRENT OF 613WHERE-Klausel 187, 284WHILE 236Wiederherstellung beim Systemstart 671Wildcard 848Windowing-Funktion 808Windows Installer 30Windows PowerShell

allgemeiner Aufruf 151anwendbare Laufwerksbefehle 155Aufruf aus dem Management Studio 154Export der Konsoleneinstellungen 153Get-PSDrive 155ISE (Integrated Scripting Environment) 152ISE-Oberfläche 152Oberfläche 151Pfadangabe 156Quick Reference 150Registrierung der SQL-Server-Erweiterun-

gen 153Skriptsprache 150sqlps 153SQL-Server-Anbieter 152, 155SQL-Server-Cmdlets 152, 158SQL-Server-Integration 150, 152

Windows- und SQL-Server-Fehlerberichte senden 38

Windows-Freigabe 343WindowsIdentity-Eigenschaft 740WindowsIdentity-Klasse 740WindowsImpersonationContext-Klasse 740Windows-Systemsteuerung 146, 147WITH GRANT OPTION 455

WITH NOCHECK 361WITH PERMISSION_SET-Direktive 721WITH-Schlüsselwort 794WKB (Well-known Binary) 379WKT (Well-known Text) 379, 385Wochentag 249Workgroup Edition 28workload 642WorkstationID (Eigenschaft) 923Write-ahead-Protokoll 662Write-Methode 416WriteXmlSchema (Methode) 985

X

XACT_ABORT-Anweisung 801XDR-Schema (XML-Data Reduced) 868XML 825, 847, 873

ALTER XML SCHEMA COLLECTION 836Attribut 834CREATE XML INDEX 847CREATE XML SCHEMA COLLECTION 836Dokument 835DROP XML SCHEMA COLLECTION 836Element 834Fragment 835Indexerstellung 833Indextyp 847Indizierung von XML-Feldern 846Leerzeichen 834Namespace 834Node Table 847OPENXML 868PATH-Index 847Primärer Index 847primärer Index 847PROPERTY-Index 847Ressourcenverbrauch 834Schema Collection 836Sekundärer Index 847sekundärer Index 847Standardwerte definieren 835sys.xml_schema_collections 837sys.xml_schema_namespaces 837targetNamespace-Attribut 836typisiertes und untypisiertes XML 834Validierung 833VALUE-Index 847

9783836216937.book Seite 1214 Freitag, 26. November 2010 10:32 10

Page 118: SQL Server 2008 R2 - Amazon S3...5 Inhalt Vorwort ..... 25 1 Installation und Aktualisierung von SQL Server 2008 R2 .... 27 1.1 Überblick über die verfügbaren SQL-Server-2008-R2

1215

Index

Vor- und Nachteile der XML-Daten-speicherung 832

Wildcard 848Wildcards 848Wohlgeformtheit 834Wurzelelement 835XDR-Schema (XML-Data Reduced) 868XML DML 840XML DOM (XML Document Object Model)

869xml:base 845XML-Daten in einem relationalen Modell

speichern 868XML-Daten konvertieren 835XML-Datentyp verwenden 834XML-Feld anlegen 834XML-Feld füllen 835XML-Feld mit einem Schema verknüpfen

836, 837XML-Index 847xmlns 845XML-Schema 836XPath 840XQuery 840xsi:nil 845xsi:type 845

XML DMLafter 845before 845delete 846first 845insert 845into 845last 845replace value of 846

XMLDATA 868XML-Data Modification Language 840XML-Datenbank 825XML-Datentyp 831

exists() 841modify() 841nodes() 841

query() 841value() 841

XML-Dokumentspeicherung 833XML-Feld

indizieren 846XmlReader-Klasse 774XP 694XPath 825, 840XQuery 840

delete 846insert 846replace value of 846XQuery-Prozessor 847

XQuery-Prozessor 847XSD.exe 1045XSLT 825

Y

YEAR 250, 251year 249

Z

Zahlenwert 172Zählervariable 237Zeichen 167Zeichenfolgenfunktion 252Zeichenkette 120, 172, 252Zeichenkettenoperator 174Zeichenverkettung 174Zeile 264Zeilenendezeichen 165Zeilenkonstruktor 426Zeilennummer 239Zelle 64Zertifikat 330Zieldienst 581Zieltabelle 429Z-Methode 389z-Parameter (räumlicher Datentyp) 380Zwischenspeicher 662

9783836216937.book Seite 1215 Freitag, 26. November 2010 10:32 10