Mit dieser Anweisung fügen Sie eine einzelne Zeile (Syntax 1) oder eine Reihe von Zeilen von einer anderen Stelle in der Datenbank (Syntax 2) in eine Tabelle ein.
INSERT [ INTO ] [ Eigentümer.]Tabellenname [ ( Spaltenname, ... ) ] [ ON EXISTING { ERROR | SKIP | UPDATE [ DEFAULTS { ON | OFF } ] } ] { DEFAULT VALUES | VALUES ( [ Ausdruck | DEFAULT, ...) ] } [ OPTION( Abfrage-Hint, ... ) ]
INSERT [ INTO ] [ Eigentümer.]Tabellenname [ ( Spaltenname, ... ) ] [ ON EXISTING { ERROR | SKIP | UPDATE [ DEFAULTS { ON | OFF } ] } ] [ WITH AUTO NAME ] Select-Anweisung [ OPTION( Abfragen-Hint, ... ) ]
Abfrage-Hint : MATERIALIZED VIEW OPTIMIZATION Optionswert | FORCE OPTIMIZATION | FORCE NO OPTIMIZATION | Optionsname = Optionswert
Optionsname : Bezeichner
Optionswert : Hostvariable (Bezeichner zulässig), Zeichenfolge, Bezeichner oder Zahl
VALUES-Klausel Verwenden Sie die VALUES-Klausel, um die einzufügenden Werte anzugeben. Wenn Sie die für die Spalten definierten Standardwerte eingeben möchten, geben Sie DEFAULT VALUES an. Sie können auch VALUES () angeben. Dies ist DEFAULT VALUES gleichwertig.
WITH AUTO NAME-Klausel WITH AUTO NAME gilt nur für Syntax 2. Wenn Sie WITH AUTO NAME angeben, bestimmen die Namen der Elemente in der SELECT-Anweisung, welche Spaltendaten dazugehören. Die Elemente der SELECT-Anweisung müssen Spaltenreferenzen oder Aliasausdrücke sein. Zielspalten, die in der SELECT-Anweisung nicht angegeben sind, erhalten ihren Standardwert. Dies ist sinnvoll, wenn die Anzahl von Spalten in der Zieltabelle sehr groß ist.
ON EXISTING-Klausel Die ON EXISTING-Klausel der INSERT-Anweisung gilt für beide Syntaxen. Bestehende Zeilen werden in einer Tabelle basierend auf einer Primärschlüsselschleife mit neuen Spaltenwerten aktualisiert. Diese Klausel kann nur bei Tabellen angewendet werden, die einen Primärschlüssel besitzen. Der Versuch, diese Klausel bei Tabellen ohne Primarschlüssel anzuwenden, generiert einen Syntaxfehler. Sie können keine Werte in eine Proxytabelle mit der ON EXISTING-Klausel einlesen.
Wenn es voraussichtlich viele Zeilen gibt, die der ON EXISTING-Bedingung entsprechen, kann es sinnvoll sein, stattdessen die MERGE-Anweisung zu verwenden. Die MERGE-Anweisung bietet mehr Kontrolle über die Aktionen, die Sie bei übereinstimmenden Zeilen durchführen können. Sie stellt auch eine ausgefeiltere Syntax zur Verfügung um festzulegen, was eine Übereinstimmung ausmacht. Weitere Hinweise finden Sie unter MERGE-Anweisung.
Wenn Sie die ON EXISTING-Klausel angeben, führt der Datenbankserver eine Primärschlüsselsuche für jede Eingabezeile durch. Wenn die entsprechende Zeile in der Tabelle nicht bereits existiert, wird die neue Zeile eingefügt. Für Zeilen, die in der Tabelle bereits existieren, können Sie sich dafür entscheiden, die Eingabezeile stillschweigend zu ignorieren (SKIP), eine Fehlermeldung aufgrund doppelter Schlüsselwerte auszugeben (ERROR) oder die alten Werte mit den Werte aus der Eingabezeile zu aktualisieren (UPDATE). Wenn Sie nicht ON EXISTING definieren, führt die Einfügung von Zeilen in eine Tabelle, in der diese Zeilen bereits existieren, standardmäßig zur Ausgabe der Fehlermeldung über doppelte Schlüsselwerte, was der Verwendung der ON EXISTING ERROR-Klausel entspricht.
Wenn Sie die ON EXISTING UPDATE-Klausel verwenden, wird die Eingabezeile mit der gespeicherten Zeile verglichen. Spaltenwerte, die in der Eingabezeile explizit angeführt sind, ersetzen die entsprechenden Spaltenwerte in der gespeicherten Zeile. Spaltenwerte, die nicht explizit in der Eingabezeile angegeben sind, führen hingegen zu keiner Änderung der entsprechenden Werte in der gespeicherten Zeile. Ausgenommen davon sind Spalten mit Standardwerten. Wenn Sie die ON EXISTING UPDATE-Klausel mit Spalten verwenden, die Standardwerte umfassen (einschließlich DEFAULT AUTOINCREMENT-Spalten), können Sie zusätzlich angeben, ob die Spaltenwerte mit den Standardwerten aktualisiert werden sollen, indem Sie ON EXISTING UPDATE DEFAULTS ON angeben, oder ob der Spaltenwert so wie er ist belassen werden soll, indem Sie ON EXISTING UPDATE DEFAULTS OFF angeben. Wenn keine Angaben gemacht werden, ist das Standardverhalten ON EXISTING UPDATE DEFAULTS OFF.
DEFAULTS ON- und DEFAULTS OFF-Parameter wirken sich nicht auf Werte in DEFAULT TIMESTAMP, DEFAULT UTC TIMESTAMP oder DEFAULT LAST USER aus. Bei diesen Spalten wird der Wert in der gespeicherten Zeile immer während des UPDATE aktualisiert.
CREATE TABLE t1( c1 INT PRIMARY KEY, c2 INT DEFAULT AUTOINCREMENT ); INSERT INTO t1( c1 ) ON EXISTING SKIP VALUES( 20 ); INSERT INTO t1( c1 ) ON EXISTING SKIP VALUES( 20 ); INSERT INTO t1( c1 ) ON EXISTING SKIP VALUES( 30 ); |
Die in der ersten INSERT-Anweisung definierte Zeile wird eingefügt und c2 wird auf 1 gesetzt. Die in der zweiten INSERT-Anweisung definierte Zeile wird übersprungen, weil sie mit der bestehenden Zeile übereinstimmt. Der autoincrement-Zähler allerdings zählt auf 2 hoch (ohne Auswirkung auf die existierende Zeile). Die in der dritten INSERT-Anweisung definierte Zeile wird eingefügt und der Wert von c2 wird auf 3 gesetzt. Daher sind die im vorigen Beispiel eingefügten Werte die folgenden:
20,1 30,3 |
Wenn Sie SQL Remote verwenden, dürfen Sie DEFAULT LAST USER-Spalten nicht replizieren. Wenn die Spalte repliziert wird, wird der Spaltenwert auf den SQL Remote-Benutzer, und nicht auf den replizierten Wert gesetzt.
OPTION-Klausel Verwenden Sie diese Klausel, um Hints für das Ausführen der Anweisung anzugeben. Die folgenden Hints werden unterstützt:
Eine Beschreibung dieser Optionen finden Sie bei der OPTIONS-Klausel unter SELECT-Anweisung.
Die INSERT-Anweisung wird verwendet, um Zeilen in eine Datenbanktabelle einzufügen.
Da Textindizes und materialisierte Ansichten von Änderungen an den darunterliegenden Tabellendaten betroffen sind, ist es sinnvoll, abhängige Textindizes oder materialisierte Ansichten vor dem Massenimport von Daten (LOAD TABLE, INSERT, MERGE) in die Basistabellen zu kürzen. Weitere Hinweise finden Sie unter TRUNCATE-Anweisung und TRUNCATE TEXT INDEX-Anweisung.
Syntax 1 Fügt eine einzelne Zeile mit den angegebenen Ausdruckswerten für die Spalte ein. Das Schlüsselwort DEFAULT kann verwendet werden, um den Standardwert für die Spalte einzufügen. Wenn die optionale Liste der Spaltennamen angegeben ist, werden die Werte einzeln in die angegebenen Spalten eingefügt. Wird keine Liste für die Spaltennamen definiert, werden die Werte in der Reihenfolge in die Tabelle eingefügt, in der sie generiert werden (dieselbe Reihenfolge wie mit SELECT *). Die Zeile wird an einer beliebigen Stelle in die Tabelle eingefügt. (In relationalen Datenbanken werden Tabellen nicht sortiert.)
Syntax 2 Führt eine Masseneinfügung in eine Tabelle mit den Ergebnismengen einer vollständigen allgemeinen SELECT-Anweisung aus. Einfügungen werden in einer beliebigen Reihenfolge vorgenommen, es sei denn, die SELECT-Anweisung enthält eine ORDER BY-Klausel. Weitere Hinweise finden Sie unter SELECT-Anweisung.
Die Spalten aus der Auswahlliste werden ordinal den in der Spaltenliste angegebenen Spalten oder sequentiell in der Reihenfolge, in der die Spalten erstellt wurden, zugeordnet.
INSERT-Anweisungen können in Ansichten ausgeführt werden, wenn die Abfragespezifikation, die die Ansicht definiert, aktualisierbar ist. Weitere Hinweise zur Erkennung von Ansichten, die inhärent nicht aktualisierbar sind, finden Sie unter Mit regulären Ansichten arbeiten.
In Tabellen eingefügte Zeichenfolgen werden immer in der gleichen Schreibung (groß oder klein) gespeichert, in der sie eingegeben wurden, unabhängig davon, ob die Datenbank die Groß-/Kleinschreibung berücksichtigt oder nicht. So wird z.B. die Zeichenfolge Value, die in eine Tabelle eingegeben wurde, in der Datenbank immer mit einem großen V und dem Rest in Kleinbuchstaben gespeichert. SELECT-Anweisungen geben die Zeichenfolge als Value zurück. Wenn die Datenbank die Groß-/Kleinschreibung jedoch nicht berücksichtigt, ist Value dasselbe wie value, VALUE usw. Wenn außerdem ein Primärschlüssel für eine Spalte einen Eintrag mit Value enthält, wird ein INSERT von value zurückgewiesen, da der Primärschlüssel dann nicht eindeutig wäre.
Das Einfügen großer Datenmengen mit der INSERT-Anweisung aktualisiert auch die Spaltenstatistiken.
Wenn Sie mehrere Zeilen in eine Tabelle einfügen möchten, ist es effektiver, einen Cursor zu deklarieren, wo dies möglich ist, als viele getrennte INSERT-Anweisungen auszuführen. Bevor Sie Daten einfügen, können Sie den Prozentsatz des Speicherplatzes festlegen, der für spätere Updates frei bleiben soll. Weitere Hinweise finden Sie unter ALTER TABLE-Anweisung.
INSERT-Berechtigung für die Tabelle ist erforderlich.
Wenn die Klausel ON EXISTING UPDATE angegeben ist, sind zusätzlich UPDATE-Berechtigungen für die Tabelle erforderlich.
Keine.
SQL/2003 Kernfunktion. INSERT … ON EXISTING ist eine Erweiterung des Herstellers.
Fügen Sie "Eastern Sales department" zur Datenbank hinzu:
INSERT INTO Departments ( DepartmentID, DepartmentName ) VALUES ( 230, 'Eastern Sales' ); |
Erstellen Sie die Tabelle 'DepartmentHead' mit den Namen der Abteilungsleiter (department heads) und ihren Abteilungen (departments) unter Verwendung der Syntax WITH AUTO NAME:
CREATE TABLE DepartmentHead( pk INT PRIMARY KEY DEFAULT AUTOINCREMENT, DepartmentName VARCHAR(128), ManagerName VARCHAR(128) ); INSERT INTO DepartmentHead WITH AUTO NAME SELECT GivenName || ' ' || Surname AS ManagerName, DepartmentName FROM Employees JOIN Departments ON EmployeeID = DepartmentHeadID; |
Erstellen Sie die Tabelle 'MyTable5' und fügen Sie mithilfe der WITH AUTO NAME-Syntax Daten ein.
CREATE TABLE MyTable5( pk INT PRIMARY KEY DEFAULT AUTOINCREMENT, TableName CHAR(128), TableNameLen INT ); INSERT INTO MyTable5 WITH AUTO NAME SELECT length(t.table_name) AS TableNameLen, t.table_name AS TableName FROM SYS.SYSTAB t WHERE table_id <= 10; |
Fügen Sie eine neue Abteilung ein, wobei Sie die Anweisung auf Isolationsstufe 3 ausführen und nicht die aktuelle Isolationsstufeneinstellung der Datenbank verwenden.
INSERT INTO Departments (DepartmentID, DepartmentName, DepartmentHeadID) VALUES(600, 'Foreign Sales', 129) OPTION( isolation_level = 3 ); |
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |