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 ?

Comment les paramètres table peuvent-ils améliorer la transmission de listes aux procédures stockées SQL ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-01 11:39:11168parcourir

How Can Table-Valued Parameters Improve Passing Lists to SQL Stored Procedures?

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 :

  • Simplifie et rationalise le code
  • Améliore les performances en réduisant la surcharge d'insertion des paramètres
  • Améliore l'intégrité des données en garantissant la les éléments de la liste sont du type correct

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn