Di SQL Server 2008+ ada cara yang lebih mudah untuk menyisipkan beberapa baris dalam satu pernyataan. Misalnya sintaks ini valid:
INSERT dbo.table(col1, col2) VALUES
(1, 2),
(2, 3),
(3, 4);
Di atas akan menyisipkan tiga baris. Pada versi yang lebih lama, Anda dapat melakukan hal-hal yang sedikit lebih bertele-tele seperti:
INSERT dbo.table(col1, col2)
SELECT 1, 2
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 4;
Tentu saja ExecuteNonQuery
. Anda tidak harus menjadi satu perintah, Anda dapat meneruskan ini sebagai satu string dan itu akan tetap berfungsi:
INSERT dbo.table(col1, col2) VALUES(1, 2);
INSERT dbo.table(col1, col2) VALUES(2, 3);
INSERT dbo.table(col1, col2) VALUES(3, 4);
Jika Anda ingin melakukan ini dalam prosedur tersimpan, Anda dapat dengan mudah melakukan pemisahan pada parameter multi-nilai, misalnya jika Anda memasukkan string berikut:
1,2;2,3;3,4
Anda dapat memproses nilai-nilai tersebut menggunakan fungsi seperti yang saya posting di sini:
Membagi pasangan nilai dan membuat tabel menggunakan UDF
Jadi prosedur Anda mungkin terlihat seperti ini:
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
Dan Anda akan menyebutnya menggunakan C# yang setara dengan:
EXEC dbo.AddOrderLineItems @LineItems = '1,2;2,3;3,4';
Atau Anda bisa menggunakan parameter bernilai tabel seperti yang disarankan oleh Alexey. Contoh singkat:
CREATE TYPE OrderLineItem AS TABLE
(
Product INT,
Quantity INT
);
Kemudian Anda dapat membuat prosedur:
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
Kemudian buat TVP yang setara dalam kode C# Anda (saya bukan orang yang Anda inginkan; Anda dapat melihat contoh di sini ).
Namun ada beberapa peringatan, silakan lihat pertanyaan ini:
Membuat generalized ketik untuk digunakan sebagai parameter nilai tabel