Heim >Backend-Entwicklung >C++ >Wie übergebe ich eine C#-Stringliste an die IN-Klausel einer gespeicherten SQL Server-Prozedur?

Wie übergebe ich eine C#-Stringliste an die IN-Klausel einer gespeicherten SQL Server-Prozedur?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-04 15:55:39463Durchsuche

How to Pass a C# String List to an SQL Server Stored Procedure's IN Clause?

Ü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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn