Liste de passage
Les procédures stockées SQL sont un moyen pratique de regrouper les opérations de base de données, garantissant l'intégrité des données et simplifiant le processus de développement. Cependant, transmettre des listes de valeurs aux procédures stockées peut être difficile.
Approche actuelle
Traditionnellement, les développeurs ont recours à la conversion de listes en chaînes concaténées dans le code. Par exemple, l'extrait de code fourni parcourt une liste d'entiers, en les concaténant avec un délimiteur (par exemple, "~") pour créer une seule chaîne. Cette chaîne est ensuite transmise en tant que paramètre à la procédure stockée, qui utilise une fonction définie par l'utilisateur pour la diviser en un tableau d'entiers.
Bien que cette approche fonctionne, elle peut être inefficace et sujette aux erreurs.
Paramètres table
SQL Server 2008 a introduit une fonctionnalité appelée table paramètres, ce qui fournit une solution plus élégante à ce problème. Les paramètres table vous permettent de transmettre une table en tant que paramètre à une procédure stockée. Cela élimine le besoin de concaténation de chaînes et de fonctions définies par l'utilisateur.
Code mis à jour
Pour utiliser des paramètres table, le code et la procédure stockée devraient être mis à jour :
Code
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; }
Stocké Procédure
INSERT INTO ReportItem (ReportId,ItemId) SELECT @ReportId, Id FROM @Items
Dans ce code mis à jour, la liste d'entiers est convertie en DataTable et passée en tant que paramètre table. La procédure stockée n'a plus besoin de fonction personnalisée pour extraire les valeurs.
Cette approche offre plusieurs avantages :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!