2014-07-08 12 views
10

Wie kann ich eine Arrayvariable an eine gespeicherte SQL Server-Prozedur übergeben, indem Sie C# verwenden und Arraywerte in eine ganze Zeile einfügen?Übergeben eines Arrays an eine gespeicherte SQL Server-Prozedur

Vielen Dank im Voraus.

SQL Server-Tabelle:

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

C# Array:

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

SQL Server gespeicherte Prozedur:

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

gibt es einen Grund, warum Sie nicht nur mehrere Parameter verwenden können, oder suchen Sie nur für eine Verknüpfung? –

+4

Dies könnte helfen - http://stackoverflow.com/questions/11102358/how-to-pass-an-array-into-a-sql-server-stored-procedure?rq=1 –

+0

Suche nur nach einer Verknüpfung. @ DStanley – user3658439

Antwort

18

In SQL Server 2008 und später

einen Typ in SQL Server erstellen wie folgt:

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

Prozedur in SQL Server Alter:

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

Dann brauchen Sie ein DataTable Objekt mit Werten erstellen in C# zu übergeben:

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

Das sieht fast identisch mit der Antwort in dem Link, den ich oben gepostet habe. Hast du das selbst geschrieben oder hast du diese Antwort geändert? –

+0

Ich schrieb dies basierend auf Code schrieb ich vor ein paar Wochen zurück, basierend auf einem Artikel, den ich hier gefunden: [Link] (http://www.codeproject.com/Questions/631284/How-to-pass-an-array- to-SQL-SERVER-stored-pro) – kerbasaurus

+0

Ich habe einen Fehler in der Stored Procedure: "Muss eine skalare Variable" @INFO_ARRAY "" @kerbasaurus – user3658439

2

hier ist ein Weg, einfacheres Beispiel:

ich habe Ich habe alle Beispiele und Antworten durchgelesen, wie man irgendein Array an SQL Server weitergibt, bis ich dieses linK gefunden habe, unten ist, wie ich es auf mein Projekt angewendet habe:

- Der folgende Code wird ein Array als erhalten Parameter und setzen Sie die Werte dieser --array in eine andere Tabelle

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 

Hoffnung genießen Sie sie

+0

Upvoted, aber sollte 'ARRAY' in einem Kommentar stehen? – Panzercrisis

Verwandte Themen