SQL Server 2016

Das Programmierhandbuch. Inkl. ADO.NET Entity Framework
Buch | Hardcover
1296 Seiten
2016 | 7., aktualisierte Auflage
Rheinwerk (Verlag)
978-3-8362-4063-5 (ISBN)

Lese- und Medienproben

SQL Server 2016 - Dirk Mertins, Jörg Neumann, Andreas Kühnel
69,90 inkl. MwSt
  • Titel ist leider vergriffen, Neuauflage unbestimmt
  • Artikel merken
  • Installation, Migration, Datenbankmodellierung
  • T-SQL, .NET-Programmierung, XML und Webservices
  • Einsatz als Programmierplattform und Datenbankmanagement-Server

Vom ersten Datenbankentwurf und den SQL-Grundlagen, der Migration von SQL Server 2014 oder SQL Server 2012 bis hin zu den neuen Features und konkreten Programmierbeispielen beschreiben die Autoren alles, um SQL Server 2016 als Programmierplattform und Datenmanagement-Server zu nutzen.
Dieses bewährte, umfassende Handbuch richtet sich sowohl an Einsteiger als auch an erfahrene Datenbank-Entwickler, die auf praxisorientierte und anschauliche Weise die Programmierung von SQL Server 2016 erlernen und sich die vielfältigen Möglichkeiten vollständig erschließen möchten.

Sicherer Umgang mit SQL Server 2016
Erfahren Sie alles über die Installation und den Entwurf einer gut strukturierten Datenbank. Anschauliche Listings ermöglichen Ihnen den Einstieg in die SQL-Programmierung.

SQL Server 2016 als Laufzeitumgebung für .NET
Programmieren Sie serverseitig mit einer beliebigen .NET-Sprache, indem Sie die integrierte Common Language Runtime nutzen. Hierdurch können Sie Ihren Programmier-Code um .NET-Funktionalität anreichern.

Setzen Sie Transact SQL, XML und Webservices ein
Implementieren Sie mit T-SQL serverseitige Logik in SQL Server. Verwenden Sie z. B. XML in der Datenbank oder SOAP als Schnittstelle und speichern Sie XML-Daten nativ in der Datenbank.

Verwenden Sie ADO.NET, LINQ und ADO.NET Entity Framework
Am Beispiel von C# sehen Sie, wie Sie mit ADO.NET Daten abrufen und aktualisieren können. Lernen Sie die Vorteile von Language Integrated Query (LINQ) und ADO.NET Entity Framework kennen.

Themen sind insbesondere:
Installation und Migration
Datenbankgrundlagen
Oberfläche von SQL Server
Datenbankentwurf
Benutzerverwaltung
Räumliche und hierarchische Datentypen
Gespeicherte Prozeduren
Benutzerdefinierte Funktionen
Einsatz von Triggern
Event Notification
Indizes und Transaktionen
Grundlagen T-SQL-Programmierung

Dirk Mertins ist Microsoft Certified Solution Developer (MCSD) und Microsoft Certified Database Administrator (MCDBA). Er ist freiberuflicher Trainer für die Themen SQL-Programmierung und Datenbanken.

Jörg Neumann ist Principal Consultant bei der Acando GmbH in Hamburg, Associate bei thinktecture und Microsoft MVP im Bereich Client App Dev. Er berät seit vielen Jahren Unternehmen bei der Technologieauswahl und der Architektur komplexer Anwendungen. Sein Fokus liegt hierbei auf Client-Technologien wie WPF, Silverlight und Windows 8. Darüber hinaus vermittelt er sein Wissen regelmäßig in Form von Büchern, Artikeln sowie als Referent auf Entwicklerkonferenzen. headwriteline.blogspot.com. Jörg Neumann berät seit vielen Jahren Unternehmen bei Technologieauswahl und Architektur komplexer Anwendungen.

Andreas Kühnel studierte in den 80ern in Aachen Luft- und Raumfahrttechnik. Sein Interesse tendierte zur Programmierung und ab 1995 machte er sein Hobby zum Beruf, erwarb die Zertifizierungen "Microsoft Certified Solution Developer (MCSD)" und seitdem tätig als "Microsoft Certified Trainer (MCT)". Er unterrichtet Visual Basic, COM/COM, Datenbanktechnologien, .NET-Programmierung und C sharp. Der Autor lebt in Aachen.

  Vorwort ... 35

TEIL I.  Grundlagen ... 37

  1.  Installation und Aktualisierung von SQL Server 2016 ... 39
       1.1 ... Überblick über die verfügbaren SQL-Server-2016-Versionen ... 39
       1.2 ... Installationsvoraussetzungen ... 40
       1.3 ... Installation von SQL Server 2016 ... 41
       1.4 ... Installation des Management Studios ... 49
       1.5 ... Installation der SQL-Server-Beispieldatenbank ... 51
       1.6 ... Aktualisierung auf SQL Server 2016 ... 55

  2.  Datenbankgrundlagen ... 61
       2.1 ... Server und Client ... 61
       2.2 ... Relationale Datenbanken ... 62
       2.3 ... Datenbankmanagementsystem ... 80
       2.4 ... Integritätsarten ... 83

  3.  Logischer Datenbankentwurf ... 85
       3.1 ... Grundlagen des Datenbankentwurfs ... 85
       3.2 ... Normalisierungsregeln (Normalformen) ... 86
       3.3 ... Normalisierung in der Praxis ... 93
       3.4 ... Denormalisierung ... 96
       3.5 ... Entity-Relationship-Diagramme ... 97

  4.  Die Oberfläche von SQL Server 2016 ... 101
       4.1 ... Das SQL Server Management Studio ... 101
       4.2 ... Das Bearbeiten von SQL-Anweisungen im Management Studio ... 118
       4.3 ... SQL-Server-Dokumentation und Hilfen zur Programmierung ... 130
       4.4 ... Überblick über die SQL-Server-Dienste ... 138
       4.5 ... Das Dienstprogramm »sqlcmd« ... 139
       4.6 ... SQL-Server-Integration in die Windows PowerShell ... 142

TEIL II.  SQL-Programmierung ... 151

  5.  Grundlegende Abfragetechniken ... 153
       5.1 ... Einführung in SQL ... 153
       5.2 ... SQL-Grundlagen ... 154
       5.3 ... Grundlegende Operatoren ... 163
       5.4 ... Einfache Abfragen ... 167
       5.5 ... Auswahloperatoren ... 181
       5.6 ... Aggregatfunktionen ... 189
       5.7 ... Unterabfragen ... 192
       5.8 ... Zusammenfassung, Gruppierung und Beschränkung von Abfrageergebnissen ... 198
       5.9 ... Die Mengen-Operatoren »EXCEPT« und »INTERSECT« ... 209
       5.10 ... Ausgaben mit »PRINT« und »SELECT« ... 211

  6.  Grundlagen der SQLProgrammierung ... 213
       6.1 ... Das Stapeltrennzeichen »GO« ... 213
       6.2 ... (Lokale) Variablen ... 215
       6.3 ... Ablaufsteuerung ... 223
       6.4 ... Fallunterscheidungen ... 233
       6.5 ... Funktionen ... 241
       6.6 ... Dynamische SQL-Anweisungen ... 261
       6.7 ... Fehler in SQL Server und ihre Behandlung ... 263
       6.8 ... Fehlerbehandlung ... 266

  7.  Mehrtabellenabfragen ... 287
       7.1 ... Tabellen verknüpfen (»JOIN«-Anweisung) ... 287
       7.2 ... Abfragen unter Verwendung mehrerer Server ... 296

  8.  Erstellen und Ändern von Datenbanken ... 299
       8.1 ... Erstellen einer einfachen Datenbank ... 299
       8.2 ... Einfluss der »model«-Datenbank auf das Erstellen neuer Datenbanken ... 306
       8.3 ... Löschen von Datenbanken ... 308
       8.4 ... Erstellen einer Datenbank mit mehreren Dateien ... 308
       8.5 ... Nachträgliche Änderungen an Datenbankdateien ... 311
       8.6 ... Erstellen einer Datenbank mit mehreren Dateigruppen ... 313
       8.7 ... Datenbanken verkleinern ... 316
       8.8 ... Datenbankdateien verkleinern ... 318
       8.9 ... Gespeicherte Systemprozeduren (Stored Procedures) zur Datenbankverwaltung ... 319
       8.10 ... Datenbank-Momentaufnahmen ... 320
       8.11 ... Transparente Datenverschlüsselung ... 329

  9.  Erstellen von Tabellen ... 333
       9.1 ... Die grundlegende Syntax zur Tabellenerstellung ... 333
       9.2 ... Tabellen ändern ... 350
       9.3 ... Löschen von Tabellen ... 352
       9.4 ... Implementierung der Datenintegrität ... 353
       9.5 ... Anwendungsbeispiel zu Einschränkungen ... 360
       9.6 ... Nachträgliche Definition von Einschränkungen ... 362
       9.7 ... Verwaltung von Einschränkungen ... 363
       9.8 ... Temporäre Tabellen ... 365
       9.9 ... Partitionierung von Tabellen ... 367

10.  Speicherung von Daten in FileTables ... 377
       10.1 ... Voraussetzungen für die Verwendung von FileTables ... 377
       10.2 ... Erstellung einer FileTable ... 380
       10.3 ... Zugriff auf eine FileTable ... 382
       10.4 ... Sichten zur Abfrage vorhandener FileTables in einer Datenbank ... 384

11.  Verwendung der räumlichen und hierarchischen Datentypen ... 385
       11.1 ... Räumliche Datentypen ... 385
       11.2 ... Der hierarchische Datentyp ... 419

12.  Daten verwalten ... 429
       12.1 ... Grundlegende Befehle zur Datensatzmanipulation ... 429
       12.2 ... Verwendung des Zeilenkonstruktors ... 438
       12.3 ... Kombinierte Auswahl-/Einfügeanweisungen ... 439
       12.4 ... Die »MERGE«-Anweisung ... 441
       12.5 ... Massenkopierprogramme ... 448

13.  Benutzerverwaltung und Schemas ... 451
       13.1 ... Authentifizierung am Server ... 452
       13.2 ... Datenbankzugriff erteilen ... 456
       13.3 ... Zusammenfassung von Benutzern zu Rollen ... 458
       13.4 ... Rechtevergabe an Benutzer und Rollen ... 465
       13.5 ... Deaktivierung und Aktivierung von Logins und Datenbankbenutzern ... 471
       13.6 ... Vordefinierte Konten auf Server- und Datenbankebene ... 473
       13.7 ... Schema ... 476

14.  Eigenständige Datenbanken ... 483
       14.1 ... Das Konzept der eigenständigen Datenbanken ... 483
       14.2 ... Konfiguration des Servers zur Verwendung eigenständiger Datenbanken ... 483
       14.3 ... Erstellung einer eigenständigen Datenbank ... 484
       14.4 ... Identifizierung eigenständiger Datenbanken ... 485
       14.5 ... Besonderheiten der Benutzerverwaltung eigenständiger Datenbanken ... 486
       14.6 ... Verbindungsaufbau zu einer eigenständigen Datenbank ... 487
       14.7 ... Konvertierung einer Datenbank in eine eigenständige Datenbank ... 489
       14.8 ... Migration einer eigenständigen Datenbank auf einen anderen Server ... 492

15.  Sichten ... 495
       15.1 ... Einsatz von Sichten ... 496
       15.2 ... Verwalten von Sichten ... 498
       15.3 ... Datenmanipulationsanweisungen auf eine Sicht ... 500
       15.4 ... Systemsichten von SQL Server ... 506

16.  Programmierung von gespeicherten Prozeduren ... 509
       16.1 ... Überblick über die Verwendung von gespeicherten Prozeduren in SQL Server ... 509
       16.2 ... Erstellung und Aufruf von gespeicherten Prozeduren ... 513
       16.3 ... Tabellenübergabe an eine gespeicherte Prozedur ... 530
       16.4 ... Optionen von gespeicherten Prozeduren ... 532

17.  Programmierung von benutzerdefinierten Funktionen ... 539
       17.1 ... Überblick über benutzerdefinierte Funktionen ... 539
       17.2 ... Skalare Funktionen (Skalarwertfunktionen) ... 540
       17.3 ... Inlinefunktionen (Tabellenwertfunktionen) ... 544
       17.4 ... Tabellenwertfunktion mit mehreren Anweisungen ... 547
       17.5 ... Ändern und Löschen von benutzerdefinierten Funktionen ... 549
       17.6 ... Verwendung des Datentyps »table« als lokale Variable ... 550

18.  Programmierung und Einsatz von Triggern ... 555
       18.1 ... DML-Trigger ... 555
       18.2 ... DDL-Trigger ... 576

19.  Nachverfolgung von Datenänderungen ... 583
       19.1 ... Die Möglichkeiten zur Nachverfolgung von Datenänderungen: Change Data Capture und die Änderungsnachverfolgung ... 583
       19.2 ... Change Data Capture ... 584
       19.3 ... Änderungsnachverfolgung ... 598

20.  Temporal tables ... 603
       20.1 ... Die Funktionsweise von temporal tables ... 603
       20.2 ... Erstellung von temporal tables ... 604
       20.3 ... Verwaltung der Einträge in der temporal und history table ... 608
       20.4 ... Abfragen von temporal tables ... 611
       20.5 ... Löschen von temporal tables ... 615

21.  Dynamische Datenmaskierung ... 617
       21.1 ... Funktionen zur Maskierung von Spalteninhalten ... 617
       21.2 ... Beispiel zur Erstellung einer Tabelle mit dynamischer Datenmaskierung ... 618
       21.3 ... Zugriff auf dynamisch maskierte Spalteninhalte ... 620

22.  Verschlüsselung von Spalten mit Always Encrypted ... 621
       22.1 ... Voraussetzungen einer Client-Applikation für die Verwendung von Always Encrypted ... 622
       22.2 ... Beispiel für die Konfiguration von Always Encrypted ... 622
       22.3 ... Schlüsselmanagement ... 632

23.  Zeilenbasierte Sicherheit ... 633
       23.1 ... Das Prinzip der zeilenbasierten Sicherheit ... 633
       23.2 ... Beispiel für die Implementierung der zeilenbasierten Sicherheit ... 634

24.  Ereignisbenachrichtigungen (Event Notifications) ... 641
       24.1 ... Konfiguration einer Datenbank zur Nutzung des Service Brokers ... 642
       24.2 ... Konfiguration des Zieldienstes ... 643
       24.3 ... Erstellen einer Ereignisbenachrichtigung ... 645
       24.4 ... Auslösen und Empfangen einer Ereignisbenachrichtigung ... 646
       24.5 ... Service-Broker-Aktivierung ... 647
       24.6 ... Löschen der erstellten Objekte ... 651

25.  Erstellung und Einsatz eines Cursors ... 653
       25.1 ... Funktionsweise eines Cursors ... 653
       25.2 ... Erstellung eines Cursors ... 655
       25.3 ... Öffnen eines Cursors ... 657
       25.4 ... Das Abrufen von Datensätzen aus einem Cursor ... 658
       25.5 ... Schließen und Löschen eines Cursors ... 666
       25.6 ... Schleifenprogrammierung zum automatischen Durchlaufen eines Cursors ... 667
       25.7 ... Daten in der Cursorauswahl aktualisieren und löschen ... 672

26.  Sequenzen ... 675
       26.1 ... Erstellung einer Sequenz mit Standardeinstellungen ... 675
       26.2 ... Informationen zu den vorhandenen Sequenzen in einer Datenbank ... 676
       26.3 ... Abrufen von Sequenzwerten ... 676
       26.4 ... Die Verwendung der Parameter »AS«, »START«, »INCREMENT«, »MINVALUE«, »MAXVALUE«, »CYCLE« und »CACHE« ... 678

27.  Indizes ... 685
       27.1 ... Der nicht gruppierte Index auf einem Heap ... 686
       27.2 ... Der gruppierte Index ... 689
       27.3 ... Der nicht gruppierte Index auf einem gruppierten Index ... 693
       27.4 ... Der Columnstore-Index ... 696
       27.5 ... Erstellung von Indizes ... 696
       27.6 ... Verwaltung von Indizes ... 700
       27.7 ... Statistiken ... 704
       27.8 ... Planung des Einsatzes von Indizes ... 709
       27.9 ... Weitere Optimierungsmöglichkeiten mithilfe von Indizes ... 718

28.  Columnstore-Indizes ... 727
       28.1 ... Das Grundprinzip von Columnstore-Indizes ... 727
       28.2 ... Erstellung eines nicht gruppierten Columnstore-Index ... 729
       28.3 ... Erstellung eines gruppierten Columnstore-Index ... 734
       28.4 ... Abfragen von Informationen über vorhandene Columnstore-Indizes ... 737

29.  Transaktionen ... 739
       29.1 ... Einführung in Transaktionen ... 739
       29.2 ... ACID ... 741
       29.3 ... Interne Transaktionsverarbeitung ... 744
       29.4 ... Verhalten bei Systemfehlern ... 745
       29.5 ... Programmierung expliziter Transaktionen ... 747
       29.6 ... Implizite Transaktionen ... 750
       29.7 ... Sperren ... 752
       29.8 ... Isolationsstufen auf Verbindungsebene ... 755
       29.9 ... Sperrhinweise auf Tabellenebene ... 764
       29.10 ... Informationen zu Sperren ... 766
       29.11 ... Deadlocks ... 766

30.  Speicheroptimierte Tabellen ... 771
       30.1 ... Grundlagen der speicheroptimierten Tabellen ... 771
       30.2 ... Beständigkeit speicheroptimierter Tabellen ... 772
       30.3 ... Konfiguration einer Datenbank zur Verwendung speicheroptimierter Tabellen ... 773
       30.4 ... Erstellung speicheroptimierter Tabellen ... 777
       30.5 ... Vergleich des Verhaltens beider Arten von speicheroptimierten Tabellen ... 779

31.  Indizierung speicheroptimierter Tabellen ... 781
       31.1 ... Unterschiede zwischen der Indizierung speicheroptimierter und dateibasierter Tabellen ... 781
       31.2 ... Indexarten für die Verwendung mit speicheroptimierten Tabellen ... 782
       31.3 ... Überlegungen zur Verwendung nicht gruppierter Indizes oder nicht gruppierter Hash-Indizes ... 787
       31.4 ... Abfragen zu Indizes speicheroptimierter Tabellen ... 787

32.  Systemintern kompilierte gespeicherte Prozeduren ... 789
       32.1 ... Überblick über systemintern kompilierte gespeicherte Prozeduren und deren Verwendung ... 789
       32.2 ... Erstellung systemintern kompilierter gespeicherter Prozeduren ... 790
       32.3 ... Ändern einer systemintern kompilierten gespeicherten Prozedur ... 794
       32.4 ... Informationen zum Speicherort und den geladenen DLL-Dateien ... 795

TEIL III.  .NET-Programmierung ... 797

33.  SQL Server als Laufzeitumgebung für .NET ... 799
       33.1 ... Die Programmiermodelle im Vergleich ... 799
       33.2 ... Die CLR-Integration im Detail ... 803
       33.3 ... Der Hosting-Layer ... 807
       33.4 ... Verwaltung von Assemblies ... 809
       33.5 ... Sicherheitsstufen ... 811

34.  .NET-Programmierung ... 813
       34.1 ... CLR-Unterstützung aktivieren ... 813
       34.2 ... CLR-Prozeduren und Funktionen ... 815
       34.3 ... Gespeicherte Prozeduren ... 820
       34.4 ... Benutzerdefinierte Funktionen ... 828
       34.5 ... Serverseitiger Datenzugriff mit ADO.NET ... 836
       34.6 ... Pipes ... 838
       34.7 ... Impersonalisierung ... 845
       34.8 ... Benutzerdefinierte Typen ... 850
       34.9 ... Benutzerdefinierte Aggregate ... 866
       34.10 ... Benutzerdefinierte Trigger ... 873
       34.11 ... Administration und Monitoring von CLR-Objekten ... 880

35.  T-SQL: erweiterte Themen ... 885
       35.1 ... Kompatibilität festlegen ... 885
       35.2 ... Änderungen der Kompatibilität ab SQL Server 2008 ... 886
       35.3 ... Änderungen bei nicht ANSI-konformen Abfragen ... 887
       35.4 ... »CROSS APPLY« und »OUTER APPLY« ... 888
       35.5 ... Kreuztabellen mit »PIVOT« erstellen ... 890
       35.6 ... Common Table Expressions ... 897
       35.7 ... Fehlerbehandlung ... 905
       35.8 ... Ranking- und Windowing-Funktionen ... 912
       35.9 ... Die »OUTPUT«-Klausel ... 919
       35.10 ... Die »TABLESAMPLE«-Klausel ... 921
       35.11 ... »EXCEPT«- und »INTERSECT«-Statement ... 923
       35.12 ... Tabellenwertparameter ... 925

36.  Einsatz von XML und JSON in der Datenbank ... 931
       36.1 ... Warum XML? ... 932
       36.2 ... HTML und XML ... 932
       36.3 ... XML-Fähigkeiten von SQL Server ... 936
       36.4 ... Der XML-Datentyp ... 937
       36.5 ... Auf gespeicherte XML-Daten zugreifen ... 943
       36.6 ... Darstellung von Abfrageergebnissen im XML-Format ... 954
       36.7 ... XML-Schema ermitteln ... 970
       36.8 ... XML-Daten in einem relationalen Modell speichern ... 972
       36.9 ... Bereitstellung von Daten im JSON-Format ... 975

37.  Datenbankzugriff mit ADO.NET ... 989
       37.1 ... Einleitung ... 989
       37.2 ... Die Datenprovider ... 992
       37.3 ... Die Verbindung zu einer Datenbank herstellen ... 993
       37.4 ... Die Datenbankabfrage ... 1015
       37.5 ... Das »SqlDataReader«-Objekt ... 1021
       37.6 ... Parametrisierte Abfragen ... 1029
       37.7 ... Der »SqlDataAdapter« ... 1043
       37.8 ... Daten im lokalen Speicher -- das »DataSet« ... 1056
       37.9 ... Mit mehreren Tabellen arbeiten ... 1081
       37.10 ... Aktualisieren der Datenbank ... 1089

38.  LINQ ... 1119
       38.1 ... Was ist LINQ? ... 1119
       38.2 ... LINQ to Objects ... 1125
       38.3 ... Die Abfrageoperatoren ... 1129

39.  Einführung in das ADO.NET Entity Framework ... 1155
       39.1 ... Kritische Betrachtung von ADO.NET ... 1156
       39.2 ... Ein erstes Entity Data Model (EDM) erstellen ... 1158
       39.3 ... Das Entity Data Model im Designer ... 1163
       39.4 ... Der Aufbau des Entity Data Models ... 1168
       39.5 ... Die Klassen des Entity Data Models (EDM) ... 1172
       39.6 ... Die Architektur des Entity Frameworks ... 1180

40.  Abfragen mit .NET 4 Framework-ObjectContext ... 1183
       40.1 ... Abfragen mit LINQ to Entities ... 1184
       40.2 ... Abfragen mit Entity SQL ... 1207
       40.3 ... Der EntityClient-Provider ... 1212
       40.4 ... Abfrage-Generator-Methoden (QueryBuilder-Methoden) ... 1215
       40.5 ... SQL-Direktabfragen ... 1216

41.  Entitätsaktualisierung und Zustandsverwaltung ... 1219
       41.1 ... Aktualisieren von Entitäten ... 1219
       41.2 ... Der Lebenszyklus einer Entität im Objektkontext ... 1228
       41.3 ... Das »ObjectStateEntry«-Objekt ... 1236
       41.4 ... Die Klasse »EntityKey« ... 1241
       41.5 ... Komplexere Szenarien ... 1243

42.  Konflikte behandeln ... 1249
       42.1 ... Allgemeine Betrachtungen ... 1249
       42.2 ... Konkurrierende Zugriffe mit dem Entity Framework ... 1251

43.  Die DbContext-API ... 1259
       43.1 ... Datenabfragen mit »DbContext« ... 1259
       43.2 ... Ändern von Entitäten ... 1269
       43.3 ... Change Tracking (Änderungsnachverfolgung) ... 1274
       43.4 ... Kontextlose Entitäten ändern ... 1280

  Index ... 1287

Erscheinungsdatum
Reihe/Serie Rheinwerk Computing
Verlagsort Bonn
Sprache deutsch
Maße 168 x 240 mm
Gewicht 2186 g
Einbandart gebunden
Themenwelt Informatik Datenbanken SQL Server
Mathematik / Informatik Informatik Netzwerke
Informatik Programmiersprachen / -werkzeuge NET Programmierung
Informatik Programmiersprachen / -werkzeuge XML
Informatik Software Entwicklung SOA / Web Services
Schlagworte Azure • Datenbank • Dotnet • Microsoft BackOffice • Microsoft SQL Server • Microsoft SQL Server 2016; Handbuch/Lehrbuch • .NET • Programmierung • SharePoint • SQL • SQL Server • SQL Server 2016 • T-SQL • WebServices • XML
ISBN-10 3-8362-4063-7 / 3836240637
ISBN-13 978-3-8362-4063-5 / 9783836240635
Zustand Neuware
Haben Sie eine Frage zum Produkt?
Mehr entdecken
aus dem Bereich