Senarai Lulus
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; }
Prosedur Tersimpan
INSERT INTO ReportItem (ReportId,ItemId) SELECT @ReportId, Id FROM @Items
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:
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!