Ich weiß, dass ich das vor Jahren getan habe, aber ich kann mich nicht an die Syntax erinnern, und ich kann sie nirgendwo finden, weil ich unzählige Hilfedokumente und Artikel über "Massenimporte" abgerufen habe.
Folgendes möchte ich tun, aber die Syntax stimmt nicht genau ... bitte, jemand, der dies bereits getan hat, hilft mir :)
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally')
Ich weiß, dass dies nahe an der richtigen Syntax liegt. Ich brauche vielleicht das Wort "BULK" oder etwas, an das ich mich nicht erinnern kann. Irgendeine Idee?
Ich benötige dies für eine SQL Server 2005-Datenbank. Ich habe diesen Code ohne Erfolg ausprobiert:
DECLARE @blah TABLE
(
ID INT NOT NULL PRIMARY KEY,
Name VARCHAR(100) NOT NULL
)
INSERT INTO @blah (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
SELECT * FROM @blah
Ich erhalte Incorrect syntax near the keyword 'VALUES'.
sql-server
tsql
sql-server-2005
insert
Timothy Khouri
quelle
quelle
INSERT INTO @blah (ID, Name) VALUES (123, 'Timmy'), (124, 'Jonny'), (125, 'Sally')
eingeben. "VALUES" wird nur einmal angezeigt und Sie benötigen Kommas zwischen den Sätzen.Antworten:
Kann dies für SQL Server 2008 in einer VALUES-Klausel genau gemäß der Anweisung in Ihrer Frage tun (Sie müssen nur ein Komma hinzufügen, um jede Werteanweisung zu trennen) ...
quelle
INSERT table (columnlist)
select
erstellen Sie eine Menge mit Spalten und Zeilen, und durch das Design können diese Zeilen seininsert
in eine andere Tabelle mit der gleichen Anzahl von Spalten umgewandelt werden. Sie können sogar eine Mischung aus Literalen und Werten verwenden. Wenn Sie beispielsweiseinsert
with verwenden, wirdselect 'A', ID from ATable
jedes Mal 'A' in die erste Spalte und der ID-Spaltenwert der entsprechenden Zeile von ATable in die zweite Spalte eingefügt.Ihre Syntax funktioniert fast in SQL Server 2008 (jedoch nicht in SQL Server 2005 1 ):
1 Als die Frage beantwortet wurde, wurde nicht klargestellt, dass sich die Frage auf SQL Server 2005 bezieht. Ich lasse diese Antwort hier, da ich glaube, dass sie immer noch relevant ist.
quelle
Wenn sich Ihre Daten bereits in Ihrer Datenbank befinden, können Sie Folgendes tun:
Wenn Sie die Daten hart codieren müssen, können Sie mit SQL 2008 und späteren Versionen Folgendes tun ...
quelle
Bei Verwendung der
INSERT INTO ... VALUES
Syntax wie in Daniel Vassallos Antwort gibt es eine ärgerliche Einschränkung:Der einfachste Weg, diese Einschränkung zu umgehen, ist die Verwendung abgeleiteter Tabellen wie:
LiveDemo
Dies funktioniert ab SQL Server 2008+
quelle
C. Specifying multiple values as a derived table in a FROM clause
Sie könnten dies tun (hässlich, aber es funktioniert):
quelle
Damit erreichen Sie, wonach Sie fragen:
Für zukünftige Entwickler können Sie auch aus einer anderen Tabelle einfügen :
Oder sogar aus mehreren Tabellen :
quelle
Sie können eine Gewerkschaft verwenden:
quelle
Dies sieht für SQL Server 2008 in Ordnung aus. Für SS2005 und früher müssen Sie die Anweisung VALUES wiederholen.
EDIT :: Mein schlechtes. Sie müssen das 'INSERT INTO' für jede Zeile in SS2005 wiederholen.
quelle
Es wäre einfacher, XML in SQL Server zum Einfügen mehrerer Zeilen zu verwenden, da dies sonst sehr mühsam wird.
Den vollständigen Artikel mit Code-Erklärungen finden Sie hier http://www.cyberminds.co.uk/blog/articles/how-to-insert-multiple-rows-in-sql-server.aspx
Kopieren Sie den folgenden Code in den SQL Server, um ein Beispiel anzuzeigen.
quelle
ODER SIE KÖNNEN EINEN ANDEREN WEG VERWENDEN
quelle
Ich habe Folgendes verwendet:
Es werden zehn Zeilen mit eindeutigen GUIDs für ID und Name hinzugefügt.
Hinweis: Beenden Sie die letzte Zeile (GO 10) nicht mit ';' weil es einen Fehler auslöst: Ein schwerwiegender Skriptfehler ist aufgetreten. Beim Parsen von GO ist eine falsche Syntax aufgetreten.
quelle
Entsprechend INSERT (Transact-SQL) (SQL Server 2005) können Sie es nicht auslassen
INSERT INTO dbo.Blah
und müssen es jedes Mal angeben oder eine andere Syntax / einen anderen Ansatz verwenden.quelle
Dies funktioniert sehr schnell und effizient in SQL. Angenommen, Sie haben eine Tabelle
Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.Sie können also nicht mehrere Datensätze in diese Tabelle mit der folgenden Abfrage einfügen, ohne die Anweisung insert zu wiederholen.
Auch mit C # mit
SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Sie können 10 Zeilen gleichzeitig einfügen
quelle
In einer multitablen Einfügung fügen Sie berechnete Zeilen, die aus den von der Auswertung einer Unterabfrage zurückgegebenen Zeilen abgeleitet wurden, in eine oder mehrere Tabellen ein.
Unbedingte INSERT ALL : - Um einer Tabelle mehrere Zeilen gleichzeitig hinzuzufügen, verwenden Sie die folgende Form der INSERT-Anweisung:
Geben Sie ALL gefolgt von mehreren insert_into_clauses an, um eine bedingungslose multitable Einfügung durchzuführen. Oracle Database führt jede insert_into_clause einmal für jede von der Unterabfrage zurückgegebene Zeile aus.
Abfrage zum Einfügen einer einzelnen Zeile
quelle
Andere hier haben einige Syntaxen für mehrere Datensätze vorgeschlagen. Um dies zu erläutern, schlage ich vor, dass Sie zuerst eine temporäre Tabelle einfügen und von dort aus Ihre Haupttabelle einfügen.
Der Grund dafür ist, dass das Laden der Daten aus einer Abfrage länger dauern kann und Sie möglicherweise die Tabelle oder Seiten länger als erforderlich sperren, wodurch andere Abfragen verlangsamt werden, die für diese Tabelle ausgeführt werden.
Außerdem sollten Ihre IDs wahrscheinlich Identität (1,1) sein und Sie sollten sie unter den allermeisten Umständen wahrscheinlich nicht einfügen. Lassen Sie SQL das für Sie entscheiden.
quelle