INSERT INTO ARTIKEL(A_NR, A_NAME, A_PREIS)
VALUES(12, 'Oberhemd', 39.80)
Dies fügt in die Tabelle Artikel die erste Zeile aus der Artikel.txt ein. Dies gelingt
allerdings nur deshalb, da die Spalte A_NR keine automatisch erzeugte fortlaufende Nummer enthält und deshalb der Wert
für den Primärschlüssel per Hand festgelegt werden muß.
- Für den Fall, daß die Tabelle einen automatisch erzeugten Wert enthält, muß weder die Spalte noch ein Wert
angegeben werden. Beispiel:
CREATE TABLE [Artikel-mit-Id]
(A_NR int Identity(1, 1) Primary Key,
A_Name varchar(50),
A_Preis money)
Dies erzeugt eine Tabelle, bei welcher
der ersten Spalte ein automatisch erstellter Wert zugewiesen wird
INSERT INTO [Artikel-mit-Id](A_NAME, A_PREIS)
VALUES ('Oberhemd', 39.80)
In die neue Tabelle wird eine Zeile eingetragen. Ist die Tabelle soeben neu erstellt worden,
so erhält die neue Zeile den Wert 1 als Primärschlüssel. INSERT INTO ARTIKEL(A_NR, A_NAME, A_PREIS)
SELECT 12, 'Oberhemd', 39.80
UNION
SELECT 22, 'Mantel', 360.00
UNION
SELECT 11, 'Oberhemd', 44.20
UNION
SELECT 13, 'Hose', 110.50
Dies fügt Daten ein, die über eine Dummy-Select-Anweisung mit UNION zusammengestellt wurden.
Beachten Sie, daß eine solche Konstruktion mit Ms-Access nicht gelingt. Dort kann man mit dem Einfügen einer Dummy-Tabelle
sowie der TOP 1 - Klausel erreichen, daß eine Zeile zurückgegeben wird. Die UNION-Anweisung läßt sich jedoch nicht direkt
in eine Tabelle einfügen, sie muß in einer Unterabfrage versteckt werden. Die folgende Anweisung ist möglich:
CREATE TABLE ATest(A_NR int, A_NAME varchar(50), A_PREIS money)
INSERT INTO ATest(A_Nr, A_NAME,A_PREIS)
SELECT A.A_Nr, A.A_Name, A.A_Preis
From (
SELECT Top 1 12 As A_NR, 'Oberhemd' AS A_NAME,
39.80 AS A_PREIS From Artikel
UNION
SELECT Top 1 22, 'Mantel', 360.00 From Artikel
UNION
SELECT Top 1 11, 'Oberhemd', 44.20 From Artikel
UNION
SELECT Top 1 13, 'Hose', 110.50 From Artikel
Order By A_Nr)
As A
INSERT INTO ARTIKEL(A_NR, A_NAME, A_PREIS)
SELECT A.A_NR + 100,
A.A_NAME,
A.A_PREIS * 1.1
FROM ARTIKEL As A
Dies fügt in die Tabelle Artikel vier neue Zeilen ein, die Artikel-Nummer ist um 100, der Artikelpreis um 10% erhöht.SELECT A.A_NR, A.A_NAME,
A.A_PREIS As Gesamt
INTO ArtikelAuswertung
FROM ARTIKEL As A
WHERE 0 = 1
INSERT INTO ArtikelAuswertung
(A_NR, A_NAME, Gesamt)
SELECT A.A_NR, A.A_NAME,
SUM(A.A_PREIS * U.A_STUECK)
FROM ARTIKEL As A INNER JOIN UMSATZ As U
On A.A_NR = U.A_NR
GROUP BY A.A_NR, A.A_NAME
Dies ist eine
typische Anwendung der INSERT-Anweisung, um Daten unabhängig von der Hauptdatenbank auswerten oder weiterverarbeiten zu können.
Zunächst wird die gewünschte Zieltabelle erstellt, indem eine passende SELECT-Anweisung mit INTO in eine neue Tabelle umgelenkt
und in diese mit '0 = 1' keine Daten übertragen werden. Anschließend werden die tatsächlich gewünschten Nutzdaten aggregiert
und kopiert. Eine solche Trennung anstelle eines direkten SELECT ... INTO ... FROM kann hilfreich sein, falls die Tabelle auf
jeden Fall erstellt werden soll, es jedoch bsp. zu Laufzeitfehlern bei der SELECT-Abfrage kommen kann, so daß
diese nicht ausgeführt wird.- Verwenden einer gespeicherten Prozedur mit Parametern zum Einfügen von Daten:
CREATE PROCEDURE up_ins_Artikel
@A_NR int,
@A_NAME nvarchar(50),
@A_PREIS money
As
INSERT INTO ARTIKEL(A_NR, A_NAME, A_PREIS)
VALUES (@A_NR, @A_NAME, @A_PREIS)
Execute up_ins_Artikel 50, 'Schlapphut', 49.90
Dies ist die Standard-Syntax zur Erzeugung gespeicherter Prozeduren mit
Parametern. Die Prozedur nutzt die Parameterwerte, um eine Zeile einzufügen. Ms-Access hat seine eigene Syntax. Hier dürfen -
bei der Verwendung über .NET - die Parameter nicht deklariert werden und sind nach Position anzusprechen. Mit ADO ist eine
Syntax möglich, wie sie innerhalb DAO verwendet wird:
PARAMETERS [@a_nr] int, [@a_name] nvarchar(50), [@a_preis] money;
CREATE ...
Kontaktformular:
Schreiben Sie mir und wir bauen gemeinsam Ihre neue Web-Datenbank!