Ich weiß, dass ich das schon vor Jahren getan habe, aber ich kann mich nicht an die Syntax erinnern und kann sie nirgendwo finden, weil ich Unmengen von Hilfedokumenten und Artikeln über "Massenimporte" abgerufen habe.
Hier ist, was ich tun möchte, aber die Syntax ist nicht genau richtig ... Bitte, jemand, der dies zuvor 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. Vielleicht brauche ich das Wort "BULK" oder etwas, an das ich mich nicht erinnern kann. Irgendeine Idee?
Ich brauche dies für eine SQL Server 2005-Datenbank. Ich habe diesen Code ausprobiert, ohne Erfolg:
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 bekomme Incorrect syntax near the keyword 'VALUES'.
INSERT INTO dbo.MyTable (ID, Name)
SELECT 123, 'Timmy'
UNION ALL
SELECT 124, 'Jonny'
UNION ALL
SELECT 125, 'Sally'
Für SQL Server 2008 können Sie dies in einer VALUES-Klausel tun gena gemäß der Anweisung in Ihrer Frage (Sie müssen nur ein Komma hinzufügen, um jede Werteanweisung zu trennen) ...
Ihre Syntax funktioniert fast in SQL Server 2008 (jedoch nicht in SQL Server 2005)1):
CREATE TABLE MyTable (id int, name char(10));
INSERT INTO MyTable (id, name) VALUES (1, 'Bob'), (2, 'Peter'), (3, 'Joe');
SELECT * FROM MyTable;
id | name
---+---------
1 | Bob
2 | Peter
3 | Joe
1 Als die Frage beantwortet wurde, wurde nicht ersichtlich, dass sich die Frage auf SQL Server 2005 bezog. Ich lasse diese Antwort hier, da ich glaube, dass sie immer noch relevant ist.
Wenn sich Ihre Daten bereits in Ihrer Datenbank befinden, haben Sie folgende Möglichkeiten:
INSERT INTO MyTable(ID, Name)
SELECT ID, NAME FROM OtherTable
Wenn Sie die Daten hart codieren müssen, können Sie mit SQL 2008 und späteren Versionen Folgendes tun ...
INSERT INTO MyTable (Name, ID)
VALUES ('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)
Sie könnten dies tun (hässlich, aber es funktioniert):
INSERT INTO dbo.MyTable (ID, Name)
select * from
(
select 123, 'Timmy'
union all
select 124, 'Jonny'
union all
select 125, 'Sally'
...
) x
Sie können eine Union verwenden:
INSERT INTO dbo.MyTable (ID, Name)
SELECT ID, Name FROM (
SELECT 123, 'Timmy'
UNION ALL
SELECT 124, 'Jonny'
UNION ALL
SELECT 125, 'Sally'
) AS X (ID, Name)
Dies sieht für SQL Server 2008 in Ordnung aus. Für SS2005 und frühere Versionen müssen Sie die VALUES-Anweisung wiederholen.
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy')
VALUES (124, 'Jonny')
VALUES (125, 'Sally')
EDIT :: Mein schlechtes. Sie müssen das 'INSERT INTO' für jede Zeile in SS2005 wiederholen.
INSERT INTO dbo.MyTable (ID, Name)
VALUES (123, 'Timmy')
INSERT INTO dbo.MyTable (ID, Name)
VALUES (124, 'Jonny')
INSERT INTO dbo.MyTable (ID, Name)
VALUES (125, 'Sally')
Ich habe folgendes benutzt:
INSERT INTO [TableName] (ID, Name)
values (NEWID(), NEWID())
GO 10
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 Fehler auslöst: Ein schwerwiegender Skriptfehler ist aufgetreten. Beim Analysieren von GO wurde eine falsche Syntax festgestellt.
USE YourDB
GO
INSERT INTO MyTable (FirstCol, SecondCol)
SELECT 'First' ,1
UNION ALL
SELECT 'Second' ,2
UNION ALL
SELECT 'Third' ,3
UNION ALL
SELECT 'Fourth' ,4
UNION ALL
SELECT 'Fifth' ,5
GO
INSERT INTO MyTable (FirstCol, SecondCol)
VALUES
('First',1),
('Second',2),
('Third',3),
('Fourth',4),
('Fifth',5)
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.
declare @test nvarchar(max)
set @test = '<topic><dialog id="1" answerId="41">
<comment>comment 1</comment>
</dialog>
<dialog id="2" answerId="42" >
<comment>comment 2</comment>
</dialog>
<dialog id="3" answerId="43" >
<comment>comment 3</comment>
</dialog>
</topic>'
declare @testxml xml
set @testxml = cast(@test as xml)
declare @answerTemp Table(dialogid int, answerid int, comment varchar(1000))
insert @answerTemp
SELECT ParamValues.ID.value('@id','int') ,
ParamValues.ID.value('@answerId','int') ,
ParamValues.ID.value('(comment)[1]','VARCHAR(1000)')
FROM @testxml.nodes('topic/dialog') as ParamValues(ID)
Entsprechend INSERT (Transact-SQL) (SQL Server 2005) können Sie INSERT INTO dbo.Blah
nicht auslassen und müssen es jedes Mal angeben oder eine andere Syntax/Methode verwenden.
Dies wird das erreichen, wonach Sie fragen:
INSERT INTO table1 (ID, Name)
VALUES (123, 'Timmy'),
(124, 'Jonny'),
(125, 'Sally');
Für zukünftige Entwickler können Sie auch aus einer anderen Tabelle einfügen:
INSERT INTO table1 (ID, Name)
SELECT
ID,
Name
FROM table2
Oder sogar aus mehreren Tabellen:
INSERT INTO table1 (column2, column3)
SELECT
t2.column,
t3.column
FROM table2 t2
INNER JOIN table3 t3
ON t2.ID = t3.ID
Dies funktioniert in SQL sehr schnell und effizient. Angenommen, Sie haben die Tabelle Sample with 4 column a,b,c,d where a,b,d are int and c column is Varchar(50)
.
CREATE TABLE [dbo].[Sample](
[a] [int] NULL,
[b] [int] NULL,
[c] [varchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[D] [int] NULL
)
Sie können also mit der folgenden Abfrage nicht mehrere Datensätze in diese Tabelle einfügen, ohne die Anweisung insert zu wiederholen.
DECLARE @LIST VARCHAR(MAX)
SET @LIST='SELECT 1, 1, ''Charan Ghate'',11
SELECT 2,2, ''Mahesh More'',12
SELECT 3,3,''Mahesh Nikam'',13
SELECT 4,4, ''Jay Kadam'',14'
INSERT SAMPLE (a, b, c,d) EXEC(@LIST)
Auch mit C # mit SqlBulkCopy bulkcopy = new SqlBulkCopy(con)
Sie können jeweils 10 Zeilen einfügen
DataTable dt = new DataTable();
dt.Columns.Add("a");
dt.Columns.Add("b");
dt.Columns.Add("c");
dt.Columns.Add("d");
for (int i = 0; i < 10; i++)
{
DataRow dr = dt.NewRow();
dr["a"] = 1;
dr["b"] = 2;
dr["c"] = "Charan";
dr["d"] = 4;
dt.Rows.Add(dr);
}
SqlConnection con = new SqlConnection("Connection String");
using (SqlBulkCopy bulkcopy = new SqlBulkCopy(con))
{
con.Open();
bulkcopy.DestinationTableName = "Sample";
bulkcopy.WriteToServer(dt);
con.Close();
}