2014-07-08 5 views
10

पर सरणी पास करना मैं सी # का उपयोग कर एक SQL सर्वर संग्रहीत प्रक्रिया में एक सरणी चर कैसे पारित कर सकता हूं और सरणी मानों को पूरी पंक्ति में सम्मिलित कर सकता हूं?एसक्यूएल सर्वर संग्रहीत प्रक्रिया

अग्रिम धन्यवाद।

एसक्यूएल सर्वर तालिका:

ID | Product | Description 
------------------------------- 
8A3H | Soda | 600ml bottle 

सी # सरणी:

string[] info = new string[] {"7J9P", "Soda", "2000ml bottle"}; 

एसक्यूएल सर्वर संग्रहीत प्रक्रिया:

ALTER PROC INSERT 
    (@INFO_ARRAY ARRAY) 
AS 
BEGIN 
    INSERT INTO Products VALUES (@INFO_ARRAY) 
END 
+2

वहाँ किसी भी कारण है कि आप सिर्फ एक से अधिक पैरामीटर का उपयोग नहीं कर सकते हैं या यदि आप बस एक शॉर्टकट की तलाश कर रहे है? –

+4

इससे मदद मिल सकती है - http://stackoverflow.com/questions/11102358/how-to-pass-an-array-into-a-sql-server-stored-procedure?rq=1 –

+0

बस एक शॉर्टकट देख रहा है। @DStanley – user3658439

उत्तर

18

एसक्यूएल सर्वर 2008 और बाद के

,210

तो जैसे एसक्यूएल सर्वर में एक प्रकार बनाएँ:

ALTER PROC INSERT_SP 
@INFO_ARRAY AS dbo.ProductArray READONLY 
AS 
BEGIN 
    INSERT INTO Products SELECT * FROM @INFO_ARRAY 
END 

तो फिर तुम मूल्यों के साथ एक DataTable वस्तु बनाने के लिए सी # में उत्तीर्ण होना होगा:

CREATE TYPE dbo.ProductArray 
AS TABLE 
(
    ID INT, 
    Product NVARCHAR(50), 
    Description NVARCHAR(255) 
); 

एसक्यूएल सर्वर में अपने प्रक्रिया में परिवर्तन

मैंने:

DataTable dt = new DataTable(); 
//Add Columns 
dt.Columns.Add("ID"); 
dt.Columns.Add("Product"); 
dt.Columns.Add("Description"); 
//Add rows 
dt.Rows.Add("7J9P", "Soda", "2000ml bottle"); 

using (conn) 
{ 
    SqlCommand cmd = new SqlCommand("dbo.INSERT_SP", conn); 
    cmd.CommandType = CommandType.StoredProcedure; 
    SqlParameter dtparam = cmd.Parameters.AddWithValue("@INFO_ARRAY", dt); 
    dtparam.SqlDbType = SqlDbType.Structured; 
} 
+0

यह लगभग उत्तर के समान दिखता है मैंने ऊपर पोस्ट किए गए लिंक में। क्या आपने इसे स्वयं लिखा है या आपने यह जवाब बदल दिया है? –

+0

मैंने इसे यहां दिए गए एक लेख के आधार पर कुछ हफ्ते पहले लिखा था कोड पर आधारित लिखा: [link] (http://www.codeproject.com/Questions/631284/How-to-pass-an-array- टू-एसक्यूएल-सेवर-स्टोरेज-प्रो) – kerbasaurus

+0

मुझे संग्रहीत प्रक्रिया में एक त्रुटि है: "स्केलर वैरिएबल घोषित करना चाहिए" @INFO_ARRAY "" @kerbasaurus – user3658439

2

यहां एक तरह से सरल उदाहरण है जब तक मुझे यह linK नहीं मिला, तब तक सभी उदाहरणों और एसक्यूएल सर्वर से किसी भी सरणी को पास करने के उत्तरों के माध्यम से खोज कर रहा है, नीचे यह है कि मैंने इसे अपने प्रोजेक्ट पर कैसे लागू किया:

- निम्नलिखित कोड को ऐरे प्राप्त करने जा रहा है पैरामीटर और एक अन्य टेबल

Create Procedure Proc1 



@INFO_ARRAY ARRAY nvarchar(max) //this is the array your going to pass from C# code 

AS 

    declare @xml xml 

    set @xml = N'<root><r>' + replace(@INFO_ARRAY,',','</r><r>') + '</r></root>' 

    Insert into Products 
    select 
    t.value('.','varchar(max)') 


    from @xml.nodes('//root/r') as a(t) 
END 

आशा है कि आप का आनंद में है कि --array के मूल्यों सम्मिलित यह

+0

उपरोक्त, लेकिन टिप्पणी में 'ARRAY' होना चाहिए? – Panzercrisis

संबंधित मुद्दे