Maison >base de données >tutoriel mysql >Comment les paramètres table peuvent-ils améliorer la transmission de listes aux procédures stockées SQL ?
Liste de passage<> à la procédure stockée SQL : une meilleure approche
Comme souvent rencontré, le chargement de plusieurs éléments dans un enregistrement de base de données particulier peut présenter des défis. Prenons un scénario dans lequel une page Web permet aux utilisateurs de sélectionner des éléments pour un rapport, et ces éléments correspondent à des enregistrements dans une base de données (tables Rapport et Élément, respectivement). Lors de la soumission, la base de données est mise à jour avec les éléments sélectionnés ajoutés à la table ReportItems (ReportId, ItemId).
Traditionnellement, la gestion de cela implique une commande SQL et une procédure stockée. Cependant, l'introduction des paramètres table (TVP) dans SQL Server 2008 fournit une solution supérieure.
Paramètres table
Les TVP permettent de transmettre une liste d'éléments à une procédure stockée sous la forme d'un ensemble de données unique, éliminant ainsi le besoin de concaténation de chaînes et d'insertions répétées de paramètres. Au lieu de cela, le TVP est défini comme un type de table et reçu dans la procédure stockée.
Implémentation du code
Dans votre code, la méthode AddItemsToReport peut être modifiée pour utiliser un TVP comme suit :
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); }
Dans le stocké procédure :
INSERT INTO ReportItem (ReportId, ItemId) SELECT ReportId, ItemId FROM @Items
Avantages
Les TVP offrent plusieurs avantages par rapport à l'approche précédente :
Considérations de compatibilité
Notez que la prise en charge de TVP dans SQL Server 2008 est limitée à cette version et aux versions ultérieures. Si vous utilisez des versions antérieures de SQL Server, des solutions alternatives, telles que des paramètres XML ou des fonctions définies par l'utilisateur, devront peut-être être envisagées.
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!