SQL Server 2008+ में एक ही कथन में एकाधिक पंक्तियों को सम्मिलित करने के आसान तरीके हैं। उदाहरण के लिए यह सिंटैक्स मान्य है:
INSERT dbo.table(col1, col2) VALUES
(1, 2),
(2, 3),
(3, 4);
उपरोक्त तीन पंक्तियाँ सम्मिलित करेगा। पुराने संस्करणों पर आप कुछ और क्रियात्मक चीजें कर सकते हैं जैसे:
INSERT dbo.table(col1, col2)
SELECT 1, 2
UNION ALL SELECT 2, 3
UNION ALL SELECT 3, 4;
बेशक आपका ExecuteNonQuery
एक ही कमांड होना जरूरी नहीं है, आप इसे एक स्ट्रिंग के रूप में पास कर सकते हैं और यह अभी भी काम करेगा:
INSERT dbo.table(col1, col2) VALUES(1, 2);
INSERT dbo.table(col1, col2) VALUES(2, 3);
INSERT dbo.table(col1, col2) VALUES(3, 4);
यदि आप इसे एक संग्रहीत कार्यविधि में करना चाहते हैं, तो आप आसानी से बहु-मूल्यवान मापदंडों पर विभाजन कर सकते हैं, उदाहरण के लिए यदि आप निम्न स्ट्रिंग में पास करते हैं:
1,2;2,3;3,4
आप मेरे द्वारा यहां पोस्ट किए गए फ़ंक्शन का उपयोग करके उन मानों को संसाधित कर सकते हैं:
स्प्लिट वैल्यू पेयर और एक क्रिएट टेबल यूडीएफ का उपयोग करना
तो आपकी प्रक्रिया कुछ इस तरह दिख सकती है:
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
और आप इसे C# के समतुल्य का उपयोग करके कहेंगे:
EXEC dbo.AddOrderLineItems @LineItems = '1,2;2,3;3,4';
या आप एलेक्सी द्वारा सुझाए गए तालिका-मूल्यवान पैरामीटर का उपयोग कर सकते हैं। एक त्वरित उदाहरण:
CREATE TYPE OrderLineItem AS TABLE
(
Product INT,
Quantity INT
);
फिर आप एक प्रक्रिया बना सकते हैं:
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
फिर अपने सी# कोड में समकक्ष टीवीपी बनाएं (मैं वह व्यक्ति नहीं हूं जिसे आप करना चाहते हैं; आप एक उदाहरण यहां )।
हालांकि कुछ चेतावनी हैं, कृपया इस प्रश्न को देखें:
एक सामान्यीकृत बनाना तालिका मान पैरामीटर के रूप में उपयोग के लिए टाइप करें