Übergabe von Listen an gespeicherte SQL Server-Prozeduren von C#
Im angegebenen C#-Code wird eine gespeicherte Prozedur mit verschiedenen Parameterwerten aufgerufen, einschließlich einer Liste von Zeichenfolgen. Die Abfrage innerhalb der gespeicherten Prozedur erfordert jedoch, dass die Liste als Teil der IN-Klausel übergeben wird.
Lösung: Verwendung benutzerdefinierter Tabellentypen (SQL Server 2008)
SQL Server 2008 führte benutzerdefinierte Tabellentypen ein, eine Funktion, die die strukturierte Übergabe von Datensammlungen an gespeicherte Prozeduren ermöglicht. So implementieren Sie diese Lösung:
1. Erstellen Sie einen benutzerdefinierten Tabellentyp
Erstellen Sie einen Tabellentyp, der der Liste der Zeichenfolgen entspricht. Zum Beispiel:
CREATE TYPE [dbo].[StringList] AS TABLE( [Item] [NVARCHAR](MAX) NULL );
2. Ändern Sie die gespeicherte Prozedur
Passen Sie die gespeicherte Prozedur an, um den Tabellentyp als Eingabeparameter zu akzeptieren:
CREATE PROCEDURE [dbo].[sp_UseStringList] @list StringList READONLY AS BEGIN -- Query using the table type SELECT l.Item FROM @list l; END
3. Füllen Sie den Tabellentyp in C#
Erstellen Sie in C# ein DataTable-Objekt und füllen Sie es mit der Liste der Zeichenfolgen. Definieren Sie dann einen Parameter, um die Datentabelle an die gespeicherte Prozedur zu übergeben.
using (var table = new DataTable()) { table.Columns.Add("Item", typeof(string)); for (int i = 0; i < 10; i++) table.Rows.Add("Item " + i.ToString()); var pList = new SqlParameter("@list", SqlDbType.Structured); pList.TypeName = "dbo.StringList"; pList.Value = table; cmd.Parameters.Add(pList); }
4. Führen Sie die gespeicherte Prozedur aus
Führen Sie die gespeicherte Prozedur mit dem ausgefüllten SqlParameter-Objekt aus.
Beispielverwendung:
using (var con = new SqlConnection(connstring)) { con.Open(); using (SqlCommand cmd = new SqlCommand("exec sp_UseStringList @list", con)) { using (var dr = cmd.ExecuteReader()) { while (dr.Read()) Console.WriteLine(dr["Item"].ToString()); } } }
Das obige ist der detaillierte Inhalt vonWie übergebe ich eine C#-Stringliste an die IN-Klausel einer gespeicherten SQL Server-Prozedur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!