Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Meluluskan Senarai Rentetan kepada Prosedur Tersimpan Pelayan SQL Menggunakan Jenis Jadual Ditakrifkan Pengguna?

Bagaimana untuk Meluluskan Senarai Rentetan kepada Prosedur Tersimpan Pelayan SQL Menggunakan Jenis Jadual Ditakrifkan Pengguna?

Barbara Streisand
Barbara Streisandasal
2025-01-13 10:02:42131semak imbas

How to Pass a List of Strings to a SQL Server Stored Procedure Using a User-Defined Table Type?

Mengirimkan senarai rentetan kepada prosedur tersimpan SQL Server menggunakan jenis jadual yang ditentukan pengguna

Apabila memanggil prosedur tersimpan SQL Server daripada C#, anda mungkin perlu menghantar senarai rentetan sebagai parameter. Walaupun parameter standard mencukupi untuk mengendalikan jenis data mudah, untuk struktur data yang kompleks seperti senarai, pendekatan yang lebih canggih diperlukan.

Untuk lulus senarai rentetan, kami boleh memanfaatkan ciri Jenis Jadual Ditakrifkan Pengguna (UDTT) SQL Server. Ciri ini membolehkan kami membuat jenis data tersuai yang menyerupai jadual untuk menyimpan koleksi data.

Buat jenis jadual yang ditentukan pengguna

Pertama, kita perlu mencipta Jenis Jadual Ditakrifkan Pengguna (UDTT):

<code class="language-sql">CREATE TYPE [dbo].[StringList] AS TABLE(
    [Item] [NVARCHAR](MAX) NULL
);</code>

UDTT ini mentakrifkan satu lajur bernama "Item" untuk menahan rentetan.

Ubah suai prosedur tersimpan

Seterusnya, kami mengubah suai prosedur yang disimpan untuk menerima parameter UDTT:

<code class="language-sql">CREATE PROCEDURE [dbo].[sp_UseStringList]
    @list StringList READONLY
AS
BEGIN
    -- 只返回我们传入的项目
    SELECT l.Item FROM @list l;
END</code>

Mengisi UDTT dalam C#

Dalam C# kami menggunakan DataTable untuk mengisi UDTT:

<code class="language-csharp">using (var table = new DataTable()) {
    table.Columns.Add("Item", typeof(string));

    // ...此处添加循环填充字符串列表到DataTable的代码...

    SqlParameter pList = new SqlParameter("@list", SqlDbType.Structured);
    pList.Value = table;
}</code>

Lepaskan parameter UDTT kepada prosedur yang disimpan

Akhir sekali, kami menghantar parameter UDTT kepada prosedur yang disimpan:

<code class="language-csharp">using (var cmd = new SqlCommand("exec sp_UseStringList @list", con)) {
    cmd.Parameters.Add(pList);

    using (var dr = cmd.ExecuteReader()) {
        while (dr.Read())
            Console.WriteLine(dr["Item"].ToString());
    }
}</code>

Pendekatan ini membolehkan kami menghantar senarai rentetan dengan cekap kepada prosedur tersimpan SQL Server.

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Senarai Rentetan kepada Prosedur Tersimpan Pelayan SQL Menggunakan Jenis Jadual Ditakrifkan Pengguna?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn