Problème :
Le transfert efficace de plusieurs éléments vers un seul enregistrement de base de données reste un défi persistant . Par exemple, l'attribution de plusieurs éléments à un rapport nécessite la mise à jour de la table ReportItems avec plusieurs enregistrements. Les approches conventionnelles impliquent un code complexe et une fonction auxiliaire pour traiter la liste d'éléments sous forme de chaîne.
Avec l'avènement de SQL Server 2008, les « paramètres table » introduisent un solution révolutionnaire à cette énigme.
La magie de TVP :
Les paramètres à valeur table vous permettent de transmettre une structure de type table en tant que paramètre à une procédure stockée. Dans notre cas, nous pouvons définir un TVP pour accepter un tableau d'ID d'articles entiers.
Code révisé :
Le code révisé devient beaucoup plus concis :
public void AddItemsToReport(string connStr, int Id, List<int> itemList) { Database db = DatabaseFactory.CreateDatabase(connStr); string sqlCommand = "AddItemsToReport" DbCommand dbCommand = db.GetStoredProcCommand(sqlCommand); // Convert the list to a DataTable (lightweight) DataTable table = itemList.ToDataTable(); // Create the TVP parameter db.AddParameter(dbCommand, "Items", table); // Execute the stored procedure db.ExecuteNonQuery(dbCommand); }
Procédure stockée améliorée :
La procédure stockée simplifie plus loin :
INSERT INTO ReportItem (ReportId,ItemId) SELECT @ReportId, Id FROM @Items
Conclusion :
Les paramètres table offrent un mécanisme élégant et efficace pour transférer plusieurs éléments vers des procédures stockées SQL. En éliminant le besoin de manipulations de chaînes complexes et de fonctions auxiliaires, les TVP rationalisent le processus de développement et améliorent la lisibilité du code.
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!