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