Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Meluluskan Senarai Integer ke Prosedur Tersimpan SQL dengan Cekap?

Bagaimana untuk Meluluskan Senarai Integer ke Prosedur Tersimpan SQL dengan Cekap?

Patricia Arquette
Lepaskan: 2024-12-31 04:28:13
asal
805 orang telah melayarinya

How to Efficiently Pass a List of Integers to a SQL Stored Procedure?

Senarai Lulus to SQL Stored Procedure

Prosedur tersimpan SQL ialah cara mudah untuk mengumpulkan operasi pangkalan data, memastikan integriti data dan memudahkan proses pembangunan. Walau bagaimanapun, menghantar senarai nilai kepada prosedur tersimpan mungkin mencabar.

Pendekatan Semasa

Secara tradisinya, pembangun terpaksa menukar senarai menjadi rentetan bercantum dalam kod. Sebagai contoh, coretan kod yang disediakan berulang melalui senarai integer, menggabungkannya dengan pembatas (cth., "~") untuk mencipta rentetan tunggal. Rentetan ini kemudiannya dihantar sebagai parameter kepada prosedur tersimpan, yang menggunakan fungsi yang ditentukan pengguna untuk membahagikannya kepada jadual integer.

Walaupun pendekatan ini berfungsi, pendekatan ini boleh menjadi tidak cekap dan terdedah kepada ralat.

Parameter Bernilai Jadual

SQL Server 2008 memperkenalkan ciri yang dipanggil parameter bernilai jadual, yang menyediakan penyelesaian yang lebih elegan untuk masalah ini. Parameter bernilai jadual membolehkan anda menghantar jadual sebagai parameter kepada prosedur tersimpan. Ini menghapuskan keperluan untuk penggabungan rentetan dan fungsi yang ditentukan pengguna.

Kod Kemas Kini

Untuk menggunakan parameter bernilai jadual, kod dan prosedur tersimpan perlu dikemas kini:

Kod

public void AddItemsToReport(string connStr, int Id, List<int> itemList)
{
    Database db = DatabaseFactory.CreateDatabase(connStr);

    string sqlCommand = "AddItemsToReport"
    DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand);

    DataTable itemsTable = ToDataTable(itemList);

    // Add parameters
    db.AddInParameter(dbCommand, "ReportId", DbType.Int32, Id);
    db.AddTableParameter(dbCommand, "Items", itemsTable);
    db.ExecuteNonQuery(dbCommand);
}

private DataTable ToDataTable<T>(List<T> list)
{
    DataTable table = new DataTable();
    table.Columns.Add("Id", typeof(T));

    foreach (var item in list)
        table.Rows.Add(item);

    return table;
}
Salin selepas log masuk

Prosedur Tersimpan

INSERT INTO ReportItem (ReportId,ItemId)
SELECT  @ReportId,
          Id
FROM     @Items
Salin selepas log masuk

Dalam kod yang dikemas kini ini, senarai integer ditukar kepada Jadual Data dan diluluskan sebagai parameter bernilai jadual. Prosedur yang disimpan tidak lagi memerlukan fungsi tersuai untuk mengekstrak nilai.

Pendekatan ini memberikan beberapa faedah:

  • Peningkatan kecekapan
  • Mengurangkan kerumitan kod
  • Kebolehbacaan kod dipertingkat
  • Sokongan yang lebih baik untuk set data yang besar

Atas ialah kandungan terperinci Bagaimana untuk Meluluskan Senarai Integer ke Prosedur Tersimpan SQL dengan Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan