In SQL Server 2008+ gibt es einfachere Möglichkeiten, mehrere Zeilen in eine einzelne Anweisung einzufügen. Beispielsweise ist diese Syntax gültig:
INSERT dbo.table(col1, col2) VALUES
(1, 2),
(2, 3),
(3, 4);
Das Obige fügt drei Zeilen ein. In älteren Versionen können Sie etwas ausführlichere Dinge tun, wie zum Beispiel:
INSERT dbo.table(col1, col2)
SELECT 1, 2
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 4;
Natürlich Ihr ExecuteNonQuery
muss kein einzelner Befehl sein, Sie können dies als einzelnen String übergeben und es wird trotzdem funktionieren:
INSERT dbo.table(col1, col2) VALUES(1, 2);
INSERT dbo.table(col1, col2) VALUES(2, 3);
INSERT dbo.table(col1, col2) VALUES(3, 4);
Wenn Sie dies in einer gespeicherten Prozedur tun möchten, können Sie einfach eine Aufteilung auf mehrwertige Parameter durchführen, indem Sie beispielsweise die folgende Zeichenfolge übergeben:
1,2;2,3;3,4
Sie könnten diese Werte mit einer Funktion verarbeiten, wie ich sie hier gepostet habe:
Teilen Sie Wertepaare und erstellen Sie eine Tabelle mit UDF
Ihre Prozedur könnte also so aussehen:
CREATE PROCEDURE dbo.AddOrderLineItems
@LineItems VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.OrderItems(Product, Quantity)
SELECT Product, Quantity FROM dbo.MultiSplit(@LineItems);
END
GO
Und Sie würden es mit dem C#-Äquivalent von:
aufrufenEXEC dbo.AddOrderLineItems @LineItems = '1,2;2,3;3,4';
Oder Sie könnten Tabellenwertparameter verwenden, wie von Alexey vorgeschlagen. Ein kurzes Beispiel:
CREATE TYPE OrderLineItem AS TABLE
(
Product INT,
Quantity INT
);
Dann können Sie eine Prozedur erstellen:
CREATE PROCEDURE dbo.AddOrderLineItems
@LineItems OrderLineItem READONLY
-- other parameters
AS
BEGIN
SET NOCOUNT ON;
INSERT dbo.OrderItems(Product, Quantity)
SELECT Product, Quantity FROM @LineItems;
END
GO
Erstellen Sie dann das entsprechende TVP in Ihrem C#-Code (ich bin nicht der Typ, der das tun soll; Sie können einen Beispiel hier ).
Es gibt jedoch einige Vorbehalte, bitte sehen Sie sich diese Frage an:
Erstellen eines generalisierten Typ zur Verwendung als Tabellenwertparameter