Inhalt | 6 |
Vorwort | 14 |
1 Der SQL Server 2017 stellt sich vor | 20 |
? 1.1 SQL Server – wer ist das? | 21 |
1.1.1 Der SQL Server im Konzert der Datenbanksysteme | 21 |
1.1.2 Entscheidungsszenarien für Datenbanksysteme | 24 |
1.1.3 Komponenten einer Datenbankanwendung | 26 |
1.1.4 SQL Server – das Gesamtkonzept | 29 |
? 1.2 Versionen und Editionen des SQL Servers | 31 |
? 1.3 SQL Server 2017 installieren | 36 |
? 1.4 Datenbanken installieren und nutzen | 60 |
? 1.5 Gratis: die Express Edition | 66 |
? 1.6 SQL Server Feature Pack | 68 |
2 Die grafischen Tools des SQL Server 2017 | 72 |
? 2.1 Die Tools im Überblick | 72 |
? 2.2 Das Management Studio | 75 |
? 2.3 Das Kommandozeilentool: SQLCMD | 95 |
? 2.4 Der Konfigurations-Manager | 97 |
? 2.5 Das SQL Server-Installationscenter | 100 |
? 2.6 Der Profiler | 101 |
? 2.7 Der Datenbankoptimierungsratgeber | 102 |
? 2.8 Die SQL Server Data Tools | 104 |
? 2.9 Der Import/Export-Assistent | 108 |
? 2.10 Der SQL Server Migration Assistant | 118 |
? 2.11 SQL Operations Studio | 122 |
3 Eine neue Datenbank erstellen | 124 |
? 3.1 Erstellen einer neuen Datenbank | 124 |
3.1.1 Bestandteile einer Datenbank | 124 |
3.1.2 Datenbank mit dem grafischen Tool anlegen | 128 |
3.1.3 Datenbank über eine SQL-Anweisung erstellen | 136 |
3.1.4 Datenbank mit Filestream ausstatten | 137 |
? 3.2 Tabellen in der Datenbank erstellen | 142 |
3.2.1 Tabellenfelder definieren | 143 |
3.2.2 Spalteneigenscha@en | 147 |
3.2.3 Constraints | 150 |
3.2.4 Indizierung | 160 |
3.2.5 Erste Daten erfassen | 168 |
? 3.3 Datenbankdiagramme einsetzen | 171 |
? 3.4 Richtlinien für Benennungsregeln | 175 |
einsetzen | 175 |
? 3.5 Was Sie noch wissen sollten ... | 180 |
3.5.1 Tabellen in anderen Dateigruppen speichern | 180 |
3.5.2 Tabellen direkt mit DDL-Anweisungen erstellen | 182 |
3.5.3 Gefahren der grafischen Oberfläche | 183 |
3.5.4 Berechnete Spalten integrieren | 187 |
3.5.5 Objekte und Datenbanken skripten | 190 |
? 3.6 Tabelle mit Filestream und FileTable | 193 |
3.6.1 Tabelle mit Filestream erstellen | 194 |
3.6.2 Objekte in einer FileTable speichern | 200 |
? 3.7 Beispieldatenbank generieren | 214 |
? 3.8 Speicheroptimierte Tabellen | 216 |
3.8.1 Datenbank mit In-Memory-Filegroup erstellen | 216 |
3.8.2 Speicheroptimierte Tabelle anlegen | 218 |
3.8.3 Index für speicheroptimierte Tabellen | 222 |
3.8.4 Speichernutzung beschränken | 227 |
4 SQL – Zugriff auf Daten | 230 |
? 4.1 Einsatz des Abfrage-Designers | 232 |
4.1.1 Die Bereiche des Abfrage-Designers | 232 |
4.1.2 Erstellen einer Abfrage | 238 |
? 4.2 Sichten für den Datenzugriff gestalten | 252 |
4.2.1 Gründe für den Einsatz von Sichten | 253 |
4.2.2 Erstellen einer Sicht | 254 |
4.2.3 Daten aus einer Sicht abrufen | 256 |
? 4.3 SQL-Anweisungen verwenden | 258 |
4.3.1 Data Query Language (DQL) | 259 |
4.3.2 Data Manipulation Language (DML) | 269 |
4.3.3 Die MERGE-Anweisung | 270 |
4.3.4 Den Abfrage-Designer im Abfrageeditor einsetzen | 275 |
? 4.4 Abfragen mit Geodaten | 277 |
4.4.1 Typen im Geodatenmodell | 278 |
4.4.2 Geodaten in Tabellen speichern und verwenden | 284 |
4.4.3 Index für räumliche Daten | 301 |
5 Transact-SQL – die Sprache zur Serverprogrammierung | 306 |
? 5.1 Bestandteile und Funktionalität | 308 |
von Transact-SQL | 308 |
5.1.1 Variablen und Datentypen | 308 |
5.1.2 Benutzerdefinierte Tabellentypen | 316 |
5.1.3 Funktionen | 318 |
5.1.4 Kontrollstrukturen | 355 |
5.1.5 Cursor für Datenzugriffe einsetzen | 372 |
? 5.2 Transaktionen gezielt steuern | 378 |
5.2.1 Automatische Transaktionen | 379 |
5.2.2 Explizite und implizite Transaktionen | 380 |
5.2.3 Benannte Transaktionen | 386 |
? 5.3 SET-Optionen verwenden | 387 |
? 5.4 Fehlerbehandlung in den Code einbauen | 395 |
? 5.5 Sequenzen | 401 |
? 5.6 Paging mit OFFSET und FETCH | 404 |
? 5.7 Window-Funktionen | 405 |
6 Gespeicherte Prozeduren, Funktionen und Trigger | 408 |
? 6.1 Gespeicherte Prozeduren programmieren | 409 |
6.1.1 Aufbau einer gespeicherten Prozedur | 411 |
6.1.2 Erzeugen einer gespeicherten Prozedur | 412 |
6.1.3 Einfache gespeicherte Prozeduren | 422 |
6.1.4 Gespeicherte Prozeduren mit Eingabeparametern | 425 |
6.1.5 Ergebnisrückgabe von Prozeduren | 428 |
6.1.6 Cursor in gespeicherten Prozeduren nutzen | 439 |
6.1.7 Transaktionen in Prozeduren | 447 |
6.1.8 Table-Valued Parameter einsetzen | 452 |
6.1.9 Systemintern kompilierte gespeicherte Prozeduren | 457 |
6.1.10 Gespeicherte Prozeduren aus Client-Anwendungen heraus | 468 |
aufrufen | 468 |
? 6.2 Mit Triggern automatisieren | 483 |
6.2.1 DML-Trigger: Insert, Update, Delete | 484 |
6.2.2 Triggerreihenfolge festlegen | 504 |
6.2.3 INSTEAD OF-Trigger | 506 |
6.2.4 Rekursive Trigger | 509 |
6.2.5 Trigger löschen | 521 |
6.2.6 Systemeigen kompilierte Trigger | 522 |
6.2.7 DDL-Trigger | 527 |
? 6.3 Benutzerdefinierte Funktionen implementieren | 534 |
6.3.1 Skalarwertfunktionen | 534 |
6.3.2 Inline-Funktionen | 540 |
6.3.3 Tabellenwertfunktionen | 542 |
6.3.4 Systemintern kompilierte benutzerdefinierte Funktionen | 548 |
? 6.4 Debuggen | 551 |
6.4.1 Voraussetzungen für das Debuggen | 551 |
6.4.2 Debuggen einer gespeicherten Prozedur | 553 |
6.4.3 Debuggen von Triggern | 558 |
6.4.4 Debuggen von Funktionen | 561 |
? 6.5 Praxistipps | 562 |
6.5.1 Fehleranalyse mit ERROR_MESSAGE() | 563 |
6.5.2 Fehler gezielt zur Ablaufsteuerung einsetzen | 565 |
6.5.3 Fehlerprotokoll führen | 568 |
6.5.4 Über Fehler benachrichtigen lassen | 570 |
6.5.5 Automatisierte Importe mit BULK INSERT | 574 |
7 SQL Server CLR-Integration | 580 |
? 7.1 Mit im Boot: .NET Framework | 581 |
7.1.1 Integration mit dem Visual Studio | 583 |
? 7.2 CLR-Aktivierung | 586 |
7.2.1 Code auf den Server bringen: Assembly | 589 |
? 7.3 .NET User-Defined Functions | 592 |
? 7.4 .NET Stored Procedures | 600 |
7.4.1 Datenzugriff aus der CLR heraus | 600 |
7.4.2 Prozeduren mit Werterückgabe | 601 |
7.4.3 Zugriff auf externe Daten | 608 |
? 7.5 .NET-Trigger | 615 |
? 7.6 User-Defined Aggregates (UDA) | 624 |
? 7.7 Externe Assemblys verwenden | 631 |
? 7.8 CLR-Sicherheitseinstellungen | 638 |
7.8.1 Assembly als vertrauenswürdig erklären | 639 |
7.8.2 Assembly signieren | 643 |
? 7.9 Verwalten des Servers mit SMO | 651 |
? 7.10 Übrigens: Debuggen | 657 |
7.10.1 Debuggen einer T-SQL Stored Procedure | 658 |
7.10.2 Debuggen einer .NET-Stored Procedure | 660 |
8 Data Tier Applications und SQL Server Data Tools | 664 |
? 8.1 Datenebenenanwendungen | 664 |
8.1.1 DAC über Management Studio erstellen | 665 |
8.1.2 Eine DAC auf dem SQL Server bereitstellen | 668 |
8.1.3 Aktualisieren einer DAC | 670 |
8.1.4 Entfernen einer DAC | 673 |
8.1.5 Von DACPAC zu BACPAC | 673 |
8.1.6 Erstellen einer DAC mit dem Visual Studio | 678 |
? 8.2 Die SQL Server Data Tools | 679 |
8.2.1 Ein neues Datenbankprojekt erstellen | 679 |
8.2.2 Datenbankobjekte erstellen | 681 |
8.2.3 Datenbankprojekt bereitstellen | 686 |
8.2.4 Schemavergleich | 689 |
8.2.5 Datenbank in ein Datenbankprojekt importieren | 694 |
8.2.6 Ersatz für das Management Studio? | 697 |
? 9.1 Anfügen und Trennen von Datenbanken | 700 |
9 Client-Server-Datenbank verwalten | 700 |
Unknown | 0 |
9.1.1 Trennen einer Datenbank | 701 |
9.1.2 Anfügen einer Datenbank | 704 |
9.1.3 Option „Automatisch schließen“ | 710 |
? 9.2 Datenbank sichern | 711 |
9.2.1 Sicherungsvarianten | 711 |
9.2.2 Sicherungsziele | 713 |
9.2.3 Sicherung mit dem Management Studio | 716 |
9.2.4 Sicherung über TRANSACT-SQL | 722 |
9.2.5 Zeitgesteuerte Sicherung mit dem SQL Server-Agent | 726 |
9.2.6 Zeitgesteuerte Sicherung mit der Express Edition | 730 |
9.2.7 Datenbank wiederherstellen | 734 |
9.2.8 Einsatz der Zeitachse beim Wiederherstellen | 738 |
9.2.9 Wiederherstellung über Transact-SQL | 743 |
9.2.10 Desaster Recovery | 744 |
9.2.11 Recovery mit FILESTREAM | 751 |
? 9.3 Datenänderungen protokollieren | 754 |
9.3.1 Change Data Capture | 754 |
9.3.2 Temporale Tabellen | 760 |
? 9.4 Mit mehreren Instanzen arbeiten | 786 |
9.4.1 Standardinstanzen und benannte Instanzen | 787 |
9.4.2 Zugriff auf Instanzen steuern | 789 |
10 Sicherheit und Zugriffsberechtigungen | 794 |
? 10.1 Authentifizierungsmodi – Anmeldungen | 794 |
und Benutzer | 794 |
10.1.1 Windows-Authentifizierung | 796 |
10.1.2 Gemischter Modus | 797 |
10.1.3 Anmeldung und Benutzer | 797 |
? 10.2 Berechtigungen | 799 |
? 10.3 Rollen | 800 |
10.3.1 Serverrollen | 800 |
10.3.2 Datenbankrollen | 803 |
10.3.3 Anwendungsrollen | 804 |
? 10.4 Anmeldeinformationen (Credentials) | 805 |
? 10.5 Schema | 807 |
? 10.6 Verwaltung im Management Studio | 809 |
10.6.1 Serveranmeldung hinzufügen | 809 |
10.6.2 Schema anlegen | 815 |
10.6.3 Datenbankbenutzer hinzufügen | 815 |
10.6.4 Rollen in einer Datenbank anlegen | 819 |
? 10.7 Berechtigungen vergeben | 821 |
10.7.1 Berechtigungen auf Datenbankebene | 821 |
10.7.2 Berechtigungen auf Serverebene | 829 |
? 10.8 Lösungen mit T-SQL | 830 |
10.8.1 Sicherheitsobjekte anlegen | 831 |
10.8.2 Generische Skripte | 837 |
? 10.9 Contained Databases | 837 |
? 10.10 Administratorzugriff wiederherstellen | 845 |
? 10.11 Indirekte Zugriffe verwalten | 849 |
10.11.1 Datenzugriffe über Sichten | 850 |
10.11.2 Sicherheit mit Prozeduren erhöhen | 851 |
? 10.12 Sicherheit auf Zeilenebene | 858 |
10.12.1 Bestandteile von Row Level Security (RLS) | 859 |
10.12.2 Sicherheitsfunktion erstellen | 862 |
10.12.3 Security Policy definieren | 865 |
10.12.4 Ändern von Sicherheitsrichtlinien | 868 |
? 10.13 Zugriff auf andere Server | 871 |
10.13.1 SQL Server als Verbindungsserver | 873 |
10.13.2 Verbindungsserver mit Fremdprodukten | 880 |
? 10.14 Daten verschlüsseln | 884 |
mit Always Encrypted | 884 |
10.14.1 Voraussetzungen für Always Encrypted | 885 |
10.14.2 Konfiguration von Always Encrypted | 886 |
10.14.3 Vorhandene Daten verschlüsseln | 893 |
10.14.4 Abfragen von verschlüsselten Daten | 896 |
10.14.5 Erstellen von Tabellen mit verschlüsselten Spalten | 900 |
10.14.6 Einfügen von Daten mit Verschlüsselung | 903 |
10.14.7 Treibereinsatz am Client | 906 |
? 11.1 Datenbank-E-Mail | 910 |
11 Sicherheit und Funktionalitäten | 910 |
Unknown | 0 |
11.1.1 Einrichten von Datenbank-E-Mail | 911 |
11.1.2 E-Mails aus der Anwendung heraus versenden | 918 |
11.1.3 Varianten des E-Mail-Versands | 920 |
11.1.4 Konfiguration über Systemprozeduren | 927 |
11.1.5 Mailbenachrichtigung für Agent-Au@räge | 933 |
? 11.2 Integration Services | 941 |
11.2.1 Datenabgleich mit IS | 942 |
11.2.2 Pakete ausführen und auf den Server bringen | 965 |
11.2.3 SSIS-Projekte auf den Server bringen | 967 |
12 SQL Server 2017 auf Linux | 974 |
? 12.1 Installation des SQL Servers | 976 |
? 12.2 Kommandozeilentools installieren | 981 |
12.2.1 SQLCmd mit ODBC | 981 |
12.2.2 mssql-cli | 985 |
? 12.3 Server-Agent ergänzen | 989 |
? 12.4 Integration Services | 990 |
? 12.5 Serverdienst starten | 991 |
? 12.6 Updates installieren | 992 |
? 12.7 Weitere Konfiguration | 994 |
? 12.8 Windows-Authentifizierung | 999 |
? 12.9 Linux auch am Client: | 1007 |
SQL Operations Studio | 1007 |
Anhang | 1012 |
? A.1 Die Tabellen der Datenbank WAWI | 1012 |
Index | 1024 |