Rumah >pangkalan data >tutorial mysql >Bagaimanakah Parameter Bernilai Jadual Boleh Meningkatkan Senarai Lulus kepada Prosedur Tersimpan SQL?

Bagaimanakah Parameter Bernilai Jadual Boleh Meningkatkan Senarai Lulus kepada Prosedur Tersimpan SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-01 11:39:11195semak imbas

How Can Table-Valued Parameters Improve Passing Lists to SQL Stored Procedures?

Senarai Lulus<> to SQL Stored Procedure: A Better Approach

Seperti yang sering dihadapi, memuatkan berbilang item ke rekod pangkalan data tertentu boleh menimbulkan cabaran. Pertimbangkan senario di mana halaman web membenarkan pengguna memilih item untuk laporan, dan item ini sepadan dengan rekod dalam pangkalan data (Laporan dan jadual Item, masing-masing). Selepas penyerahan, pangkalan data mengemas kini dengan item yang dipilih ditambahkan pada jadual ReportItems (ReportId, ItemId).

Secara tradisinya, pengendalian ini melibatkan arahan SQL dan prosedur tersimpan. Walau bagaimanapun, pengenalan Parameter Bernilai Jadual (TVP) dalam SQL Server 2008 menyediakan penyelesaian yang unggul.

Parameter Bernilai Jadual

TVP membenarkan menghantar senarai item kepada prosedur tersimpan sebagai set data tunggal, menghapuskan keperluan untuk penggabungan rentetan dan sisipan parameter berulang. Sebaliknya, TVP ditakrifkan sebagai jenis jadual dan diterima dalam prosedur tersimpan.

Pelaksanaan Kod

Dalam kod anda, kaedah AddItemsToReport boleh diubah suai untuk menggunakan TVP seperti berikut:

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

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

    // Create TVP DataTable
    DataTable itemTable = new DataTable("Items");
    itemTable.Columns.Add("ItemId", typeof(int));

    // Fill TVP DataTable
    foreach (int item in itemList)
        itemTable.Rows.Add(item);

    // Add TVP parameter
    db.AddParameter(dbCommand, "Items", DbType.Object, itemTable);
    db.ExecuteNonQuery(dbCommand);
}

Dalam disimpan prosedur:

INSERT INTO ReportItem (ReportId, ItemId)
SELECT  ReportId,
          ItemId
FROM     @Items

Faedah

TVP menawarkan beberapa faedah berbanding pendekatan sebelumnya:

  • Memudahkan dan memperkemas kod
  • Meningkatkan prestasi dengan mengurangkan sisipan parameter overhead
  • Meningkatkan integriti data dengan memastikan item dalam senarai adalah daripada jenis yang betul

Pertimbangan Keserasian

Perhatikan bahawa sokongan TVP dalam SQL Server 2008 terhad kepada versi itu dan kemudiannya. Jika berurusan dengan versi SQL Server yang lebih awal, penyelesaian alternatif, seperti parameter XML atau fungsi yang ditentukan pengguna, mungkin perlu dipertimbangkan.

Atas ialah kandungan terperinci Bagaimanakah Parameter Bernilai Jadual Boleh Meningkatkan Senarai Lulus kepada Prosedur Tersimpan SQL?. 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