SQLShack (Deutsch)
Dieser Artikel behandelt die SQL SELECT INTO-Anweisung einschließlich Syntax. Parameter und Verwendung mit mehreren Tabellen, Dateigruppen und einer WHERE-Bedingung
Wir fügen regelmäßig Daten entweder aus einer Anwendung oder direkt in SSMS in SQL Server-Tabellen ein. Wir können Daten mit der Anweisung INSERT INTO einfügen. Dazu sollte bereits eine Tabelle zum Einfügen von Daten vorhanden sein, da wir mit Insert in die Anweisung keine Tabelle erstellen können.
Die folgenden Aufgaben müssen mit der INSERT INTO-Anweisung ausgeführt werden.
- Erstellen Sie eine Tabellenstruktur mit geeigneten Datentypen.
- Fügen Sie Daten ein
Die gute Nachricht ist jedoch, dass wir beide Aufgaben ausführen können elegant zusammen mit der SQL SELECT INTO-Anweisung. Es wird eine Tabellenstruktur für die von der Select-Anweisung zurückgegebenen Spalten erstellt.
Angenommen, wir möchten viele Datensätze in einer Tabelle aktualisieren. Mit der Anweisung SELECT INTO können wir eine Sicherungstabelle mit der vorhandenen Struktur ab Quelltabelle erstellen. Lassen Sie uns das SELECT INTO in diesem Artikel untersuchen.
SELECT INTO-Anweisungssyntax
1
2
3
4
|
SELECT Spalte1, Spalte2 .. .ColumnN
INTO New_table
FROM-Tabellen
;
|
Parameter in der SELECT INTO-Anweisung
- Spaltenliste: Wir müssen eine Spalte angeben, die wir abrufen und in eine neue Tabelle einfügen möchten.
- Neue_Tabelle: Hier können wir den neuen Tabellennamen angeben. SQL Server erstellt eine neue Tabelle mit Spalten, die in der Spaltenliste aufgeführt sind. Wir können eine vorhandene Tabelle damit nicht ersetzen. Der Tabellenname sollte eindeutig sein.
- Tabellen: Er enthält eine Tabelle, von der Datensätze abgerufen werden sollen. Wir können hier auch mehrere Tabellen mit der richtigen Join-Klausel definieren.
- WHERE-Bedingungen: Wir können Datensätze mit der Where-Klausel filtern. Dies ist eine optionale Klausel.
Lassen Sie uns die SQL SELECT INTO-Anweisung anhand von Beispielen untersuchen.
Umgebung:
In diesem Beispiel verwenden wir Beispieldatenbank AdventureWorks2017. Angenommen, wir möchten Datensätze aus der Tabelle auswählen und erstellen mit der Anweisung SELECT INTO eine neue Tabelle. Wir möchten ausgewählte Spalten nur in der neuen Tabelle. Lassen Sie uns eine select-Anweisung für die Employee-Tabelle mit den gewünschten Spalten ausführen.
Bevor wir SQL SELECT INTO ausführen Mit dem Befehl sp_help können wir überprüfen, ob die Employee_Demo-Tabelle in der AdventureWorks2017-Datenbank nicht vorhanden ist.
1
|
sp_help „..“
|
Im folgenden Screenshot sehen wir, dass die Employee_Demo-Tabelle in meiner Datenbank nicht vorhanden ist.
Führen Sie die folgende Abfrage aus, um mit der Anweisung SELECT INTO eine neue Tabelle zu erstellen.
In Azure Data Studio wird die folgende Ausgabemeldung angezeigt. Sie können feststellen, dass die Anzahl der betroffenen Zeilen 10 beträgt. In der Abfrage haben wir die 10 besten Datensätze aus einer Employee-Tabelle ausgewählt.
Wir können auf Daten aus der neu erstellten Tabelle Employee_Demo zugreifen und überprüfen, ob sie dieselben Datensätze enthalten wie unsere frühere select-Anweisung.
In der SQL SELECT INTO-Anweisung wurden keine Spalteneigenschaften angegeben. Vergleichen wir die Spalten der Quell- und Zieltabelle und ihre Eigenschaften.
Wir können den Befehl sp_help tablename sowohl für die Tabelle Employee als auch für die Tabelle Employee_Demo ausführen. Ich habe die Ausgabe beider Tabellen in Excel kopiert (für ausgewählte Spalten). Im folgenden Screenshot sehen Sie, dass der Spaltendatentyp und seine Eigenschaften ähnlich sind.
In der vorherigen SQL SELECT INTO-Anweisung Wir haben eine Zieltabelle (Employee_Demo) aus einigen Spalten in der Quelltabelle (Employee) vorbereitet.
Erstellen wir eine weitere Tabelle mit allen Spalten in einer Employee-Tabelle mit der folgenden Abfrage.
In der Ausgabe sehen wir, dass 290 Zeilen in die Employee_All-Tabelle eingefügt wurden.
Wir haben überprüft, dass SELECT INTO Anweisung erstellt eine neue Tabelle mit Spalten, die in der Spaltenliste angegeben sind. Es wird auch ein ähnlicher Datentyp in der Zieltabelle erstellt.
Angenommen, die Quelltabelle enthält Primär- und Fremdschlüssel. Erstellt es einen Primärschlüssel und einen Fremdschlüssel ähnlich der Quelltabelle? Nein, die SQL SELECT INTO-Anweisung erstellt keine Schlüssel in der Zieltabelle. Wenn wir möchten, können wir Schlüssel in der Zieltabelle definieren. Lassen Sie uns dies im folgenden Abschnitt überprüfen.
In meinem früheren Beispiel enthält die Employee-Tabelle den darauf definierten Primär- und Fremdschlüssel. Mit der Ansicht INFORMATION_SCHEMA können wir eine Liste der vorhandenen Schlüssel abrufen. Führen Sie den folgenden Code aus und er gibt vorhandene Primär- und Fremdschlüssel in der Employee-Tabelle zurück.
Wir können sehen, dass die Employee-Tabelle Primär- und Fremdschlüssel enthält.
Wir haben alle Spalten in Employee_All aus der Employee-Tabelle kopiert. Wir müssen jetzt den Primär- und Fremdschlüssel in der Zieltabelle überprüfen.
Wir können sehen, dass er keinen Schlüssel in der Zieltabelle enthält. Es gibt uns Flexibilität, Schlüssel in der Zieltabelle zu definieren.
SQL SELECT INTO – Daten aus mehreren Tabellen einfügen
In den vorherigen Beispielen haben wir eine Tabelle erstellt Verwenden der Anweisung SELECT INTO aus einer einzelnen Tabelle Employee. Wir können auch mehrere Tabellen verbinden und mit der Anweisung SELECT INTO auch eine neue Tabelle mit Daten erstellen. In diesem Abschnitt möchten wir mehrere Tabellen miteinander verbinden. In der folgenden Abfrage haben wir die folgenden Tabellen in AdventureWorks2017 zusammengefügt.
Führen Sie die folgende Abfrage aus. Es gibt Ergebnisse aus mehreren Tabellen basierend auf den angegebenen Verknüpfungsbedingungen und Spalten.
Führen Sie eine Abfrage aus, und wir folgen der Ausgabe der SQL-Anweisung SELECT INTO.
Wir möchten eine Tabelle mit Daten erstellen, die unter Verwendung der obigen Tabelle zurückgegeben werden. Führen Sie die SQL-Anweisung SELECT INTO aus.
Sie wird erstellt. Tabelle und fügen Sie Daten ein. Wir können Datensätze in dieser Tabelle anhand der select-Anweisung überprüfen.
Sie können sehen, dass Sie mehrere Tabellen miteinander verbinden und eine Ausgabe erstellen können Tabelle mit der Anweisung SELECT INTO.
Wir müssen uns nicht darum kümmern, Datentypen für die Zieltabelle zu definieren. Wenn wir eine Tabelle manuell erstellen möchten, müssen wir den Datentyp jeder Spalte betrachten und den Datentyp entsprechend definieren. Wenn zwischen den Datentypen eine Nichtübereinstimmung besteht, wird möglicherweise die folgende Fehlermeldung angezeigt.
Fehler 1: Aufgrund einer Nichtübereinstimmung der Datentypen
Nachricht 245, Ebene 16, Status 1 , Zeile 1
Die Konvertierung ist fehlgeschlagen, wenn der Varchar-Wert GG in den Datentyp int konvertiert wurde.
Fehler 2: Nachricht 8152, Ebene 16, Status 30, Zeile 2
Zeichenfolge oder Binärdaten werden abgeschnitten.
Diese Fehler werden beim Einfügen von Daten mit der SQL-Anweisung SELECT INTO nicht angezeigt. Mit dieser Methode können wir jedoch keine Daten in vorhandene Tabellen einfügen.
SELECT INTO – Dateigruppe angeben
In den vorherigen Abschnitten haben wir untersucht, dass wir eine neue Tabelle erstellen und Daten in diese einfügen können Verwenden der SQL SELECT INTO-Anweisung aus vorhandenen Tabellen. Es wird nur eine Tabelle in der Standard-Dateigruppe erstellt. Wir können eine bestimmte Dateigruppe erst in SQL Server 2016 angeben. In SQL Server 2017 können wir eine bestimmte Dateigruppe angeben, in der eine neue Tabelle erstellt werden soll. SQL Server erstellt eine neue Tabelle in dieser bestimmten Dateigruppe „Tabelle überprüfen“. Wenn in SQL Server 2017 und höher keine Dateigruppen angegeben werden, wird eine Tabelle in der Standard-Dateigruppe erstellt.
Hinweis: In SQL SELECT INTO für SQL Server 2016 und früher können keine Dateigruppen angegeben werden. P. >
Fügen wir eine neue Dateigruppe in die AdventureWorks2017-Datenbank ein. Klicken Sie mit der rechten Maustaste auf die Datenbank und gehen Sie zu Dateigruppen.
Klicken Sie auf dieser Dateigruppenseite auf Dateigruppe hinzufügen und geben Sie einen Namen für die Dateigruppe an.
Klicken Sie nun auf Dateien und es werden vorhandene Datenbankdateien (Daten- und Protokolldatei) aufgelistet. Fügen Sie auf dieser Seite eine neue Datendatei hinzu und geben Sie FileGroup aus der Dropdown-Liste an. Es sollte FileGroup sein, die wir gerade erstellt haben.
Wir möchten eine SQL-Tabelle in INSERTFILE Filegroup erstellen. Wir haben diese Dateigruppe nicht als Standard-Dateigruppe festgelegt.
In der folgenden Abfrage sehen Sie, dass wir den Namen der Dateigruppe mithilfe der ON-Klausel angegeben haben. Es funktioniert ähnlich wie eine reguläre SQL SELECT INTO-Anweisung mit einem Unterschied in einer Dateigruppe.
1
2
3
|
Wählen Sie * in person.person_temp
ON INSERTFILE –FILEGROUP NAME
von person.person
|
Führen Sie nach dem Erstellen der Tabelle einen Befehl sp_help für diese neu erstellte Tabelle aus. Im folgenden Screenshot können wir überprüfen, ob sich die Tabelle in INSERTFILE FileGroup befindet. Dies ist die zuvor erstellte Dateigruppe.
Wir können dies auch anhand der Tabelleneigenschaften überprüfen. Klicken Sie mit der rechten Maustaste auf eine Tabelle in SSMS. Im Abschnitt Speicher sehen wir die gewünschte Dateigruppe.
SELECT INTO mit einer Where-Bedingung
Angenommen, wir möchten eine Tabelle mit einer SQL SELECT INTO-Anweisung mit wenigen Datensätzen erstellen. Wir können eine Where-Klausel verwenden, die einer select-Anweisung ähnelt.In der folgenden Abfrage möchten wir eine person.person_WC-Tabelle für die Person mit dem Nachnamen erstellen, die% Duf% entspricht.
1
2
3
4
|
select * in person.person_WC
ON INSERTFILE – Überprüfen Sie die Tabelle Dateigruppe
von person.person
, wobei Nachname wie „% Duf%“
|
Schlussfolgerung
In diesem Artikel haben wir uns mit SQL befasst SELECT INTO-Anweisung und ihre Verwendungsszenarien. Es ist ein nützlicher Befehl, eine Kopie einer Tabelle zu erstellen, ohne Datentypen anzugeben.
- Autor
- Letzte Beiträge
Mit seiner 50-teiligen Serie zu SQL Server Always On Availability Groups ist er der Schöpfer einer der größten kostenlosen Online-Artikelsammlungen zu einem einzigen Thema. Aufgrund seines Beitrags zur SQL Server-Community wurde er mit verschiedenen Preisen ausgezeichnet, darunter der renommierte „Beste Autor des Jahres“ in den Jahren 2020 und 2021 bei SQLShack.
Raj ist immer an neuen Herausforderungen interessiert, wenn Sie also Beratung benötigen Hilfe zu jedem Thema, das in seinen Schriften behandelt wird, kann unter [email protected] erreicht werden.
Alle Beiträge von Rajendra Gupta anzeigen
- Durchführen kleinerer und größerer Versions-Upgrades für AWS RDS SQL Server – 29. Januar 2021
- Bereitstellen von AWS RDS PostgreSQL-Instanzen – 27. Januar 2021
- Migrieren Ihrer lokalen SQL-Datenbanken zu AWS RDS SQL Server mithilfe von AWS DMS – 25. Januar , 2021