Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

SQL Grundkurs 2: Aufgaben und Lösungen

Lösung zu Beispiel 6 mit MS SQL Server

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Microsoft SQL Server unterstützt Identities und Sequenzen zum Generieren von neuen Nummern. Dieser Film erläutert, wie Sie diese zur Lösung von Beispiel 6 einsetzen.

Transkript

In diesem Video zeige ich Ihnen nun die Lösung, für das sechste DML-Beispiel. hier geht es darum eine Bestellung und einen Wareneingang einzufügen. Ich beginne mit der Lösung für den Microsoft SQL Server, denn hier gibt es doch den einen oder anderen Unterschied bei den unterschiedlichen Systemen. Wenn Sie möchten, können Sie hier, um das Ganze eventuell rückgängig machen zu können, später mit BEGIN TRANSACTION eine explizite Transaktion bei dem Microsoft SQL Server starten. Der erste Schritt ist das Einfügen einer neuen Bestellung in die Tabelle "bestellungen". Nachdem die Bestellnummer automatisch, ebenso der Status als auch das Bestelldatum, über Default-Werte vergeben werden, ist es vollkommen ausreichend, die Lieferantennummer und die Personalnummer des Bearbeiters beim INSERT einzufügen. Als Lieferantennummer haben wir "1.001" und ich habe die "452" als Personalnummer des Einkäufers ausgewählt. Und ich füge nun diesen Datensatz in die Tabelle "bestellungen" ein. Eine Zeile wurde eingefügt. Nachdem nun entsprechende Bestellpositionen folgen werden, müssen wir natürlich feststellen, welche Bestellnummer automatisch vergeben worden ist. Das können wir beim Microsoft SQL Server mit der Funktion SCOPE IDENTITY definieren. Diese liefert mir den, in diesem Kontext vergebenen Identitätswert, aus der aktuellen Session aus. Ich führe die Anweisung aus und sehe, dass die Bestellnummer "1008" vergeben worden ist. Diese verwende ich nun zum Einfügen. Wir möchten ja die Artikel mit den Artikelnummern "1499" bis "1504" einfügen. Dazu verwenden wir diese SELECT-Anweisung und wir müssen natürlich darauf achten, dass die Zeilen, in dem Fall sind das sechs Zeilen die zurückgegeben werden, auch entsprechend fortlaufend eine Positionsnummer bekommen, denn diese sind Vorraussetzung für das fehlerfreie Einfügen in die Bestellposition. Dafür verwenden wir beim Microsoft SQL Server die Funktion ROW_NUMBER. ROW_NUMBER liefert uns eine laufende Zeilennummer, wir müssen dazu aber eine Sortierung mit definieren, hinter dem Schlüsselwort "OVER" über (ORDER BY), und ich habe hier die Artikelnummer definiert. Dann wird in dieser ansteigenden Reihenfolge diese Nummer vergeben. Zusätzlich verwenden wir die Artikelnummer und die Bezeichnung, die sollen in der Spalte "Text" und "Artikel" eingefügt werden. Fix definieren wir "12" als Menge, und den Einkaufspreis vergeben wir für die Bestellung. Entweder lassen Sie den Rabatt frei, oder wir sind großzügig und definieren zehn Prozent als Rabatt und fügen diesen in die Spalte ein. Wir lesen diese aus der Tabelle "artikel" aus und mit diesem INSERT werden diese Positionen nun in die Bestellung eingefügt. Ich führe die Anweisung aus und wir sehen, dass sechs Zeilen von dieser Anweisung betroffen sind. Zur Kontrolle betrachten wir die Ergebnisse einerseits in der Tabelle "bestellungen", hier haben wir eine neue Bestellung mit dem Status "1", "1" steht da mal für erfasst, ist noch nicht abgeschlossen, den angegebenen Lieferant und Bearbeiter, der automatisch definierten Bestellnummer und der aktuellen Systemzeit, die hier als Standard für das Bestelldatum definiert wurde. Und in den Bestellpositionen finden wir eben die entsprechenden Einträge in der Position, die fortlaufend vergebene Positionsnummer, genauso, wie das SELECT uns das zurückgegeben hat. wie wir das schon vorher betrachtet haben. Das ist der erste Teil der Aufgabenstellung. Pausieren Sie nun das Video und lösen Sie die Aufgabe. Wenn Sie damit fertig sind, fahren Sie mit dem Video fort und sehen Sie sich meine Musterlösung an. Fahren wir nun mit der Lösung für das Erstellen des neuen Wareneingangs fort. Die Idee war ja, dass wir eine Bestellung geliefert bekommen und genau das was bestellt wurde wird auch geliefert uns soll deshalb als Wareneingang erfasst werden. Die Wareneingangsnummer werden wir beim Microsoft SQL Server auch diesmal über eine Sequenz einfügen. Dafür gibt es eine vorbereitete Sequenz mit dem Namen "wae_seq". Die Sequenz ist ein neues Feature ab dem SQL Server in der Version 2012, früher gab es dieses noch nicht. Deshalb, wenn Sie eine ältere Version verwenden, dann wird die Wareneingangsnummer hier über eine IDENTITY definiert. Ab 2012 können Sie also diese Lösungsvariante wählen. Die Wareneingangsnummer wird also explizit über einen Wert, der aus der Sequenz geliefert wird, befüllt. Das passiert mit der Anweisung NEXT VALUE FOR, und dem Namen der Sequenz. Als Lieferantennummer definieren wir wieder "1001", und die von mir angegebene Lieferscheinnummer. Als Bearbeiter habe ich die Personalnummer "799" ausgewählt. Mit dieser Anweisung werde ich nun diese Zeile in die Tabelle "wareneingang" einfügen. Ähnlich wie bei der Bestellposition, brauchen wir ja auch die vergebene Sequenznummer für das Erfassen oder das Ergänzen von Wareneingangspositionen. Das können wir aus der Systemtabelle auslesen, mit dieser Anweisung, "SELECT current_value" ist das entscheidend und ich gebe die anderen Spalten auch aus, "FROM sys.sequences" "WHERE name =" gefolgt vom Namen der Sequenz, in dem Fall "wae_seq". Ich führe diese Anweisung aus und wir sehen, dass "current_value", d. h. das ist die entsprechende Wareneingangsnummer, die jetzt von der Sequenz erzeugt wurde. Man kann sich diese natürlich auch hier unten gleich einmal markieren und mit "Strg" + "C" in die Zwischenablage kopieren, und nun sollen die Positionen übernommen werden. Das heißt hier fügen wir, sofern das, ich habe das hier schon vorbereitet, nicht die korrekte Nummer ist, die neue Wareneingangsnummer ein. und dieses SELECT-Statement liefert uns von der Bestellung mit der vorher definierten Nummer alle Positionen. Ich führe dieses SELECT einmal ohne das INSERT vorweg aus, und wir sehen, dass ist das, was als Wareneingangspositionen übernommen werden soll Wir verwenden die neue Wareneingangsnummer, die Positionsnummer wird eins zu eins von der Bestellung übernommen. Die kann hier gleichbleiben und muss nicht neu generiert werden. Die Spalten "artikel" und "text", tragen hier den gleichen Namen bei "bestellung" und "bestellposition". die können wir übernehmen, die Menge auch und als Ziellager für den Wareneingang geben wir einfach einmal die Lagernummer "1" ein. Mit dieser Anweisung führen wir aus und übernehmen die Wareneingangsposition. Ähnlich wie bei der Bestellung, können wir nun das Ergebnis betrachten. Wir haben hier einen neuen Wareneingang erfasst, wieder mit aktuellem Datum, und den übrigen Werten wie definiert. Und auch die Wareneingangspositionen, sind von der Bestellung übernommen, und hier eingetragen worden. Zum Abschluss können wir die Transaktion noch mit einem COMMIT bestätigen, und damit alle Änderungen festschreiben. Wir haben hier also Werte in neue Tabellen eingefügt, entweder über eine VALUES-Klausel, wenn es um den Bestellkopf oder den Wareneingangskopf gegangen ist, die Positionen jeweils über ein SELECT gefolgt an das INSERT INTO. Das besondere an diesem Beispiel war, dass wir einmal die Nummer, den Primärschlüsselwert über eine IDENTITY vergeben haben, und den vergebenen Wert konnten wir mit der Funktion SCOPE_IDENTITY auslesen. Beim zweiten Mal haben wir die neuere Variante beim SQL Server über eine Sequenz verwendet, Über "NEXT VALUE FOR, Name der Sequenz" kann diese ausgelesen werden. Aus der Systemtabelle "sys.sequences", kann der vergebene Sequenzwert eruiert werden, weil den benötigen wir für das Einfügen der Position. Ich hoffe dieses Beispiel war noch nicht allzu schwierig für Sie. Die Lösung für Oracle und MySQL finden Sie in einem jeweils separaten Video.

SQL Grundkurs 2: Aufgaben und Lösungen

Vertiefen Sie Ihre SQL-Kenntnisse. In diesem Workshop erhalten Sie zahlreiche Beispielaufgaben, die Sie selbst lösen können. Anschließend zeigt Ihnen der Trainer die Lösung.

7 Std. 41 min (61 Videos)
Derzeit sind keine Feedbacks vorhanden...
 

Dieses Training setzt SQL-Kenntnisse voraus, wie sie beispielsweise in „SQL lernen und anwenden“ vermittelt werden.

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!