Maison >base de données >tutoriel mysql >Comment puis-je transmettre efficacement une liste à une procédure stockée SQL ?

Comment puis-je transmettre efficacement une liste à une procédure stockée SQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-01 08:36:10959parcourir

How Can I Efficiently Pass a List to a SQL Stored Procedure?

Liste de passage vers une procédure stockée SQL de manière efficace

Traditionnellement, transmettre plusieurs éléments à une procédure stockée SQL impliquait une manipulation fastidieuse de chaînes et la concaténation d'ID séparés par des délimiteurs. Cette approche peut s’avérer sous-optimale en termes de performances et de flexibilité. Cependant, avec l'avènement de SQL Server 2008, une nouvelle fonctionnalité appelée « paramètres table » est apparue comme une solution supérieure.

En utilisant des paramètres table, les développeurs peuvent définir un type de table défini par l'utilisateur dans le base de données, puis transmettez une liste de valeurs de ce type en tant que paramètre unique à la procédure stockée. Cette approche élimine le besoin de concaténation manuelle des chaînes et offre plusieurs avantages :

  • Performances améliorées : Les paramètres table permettent à la base de données de gérer la manipulation des données plus efficacement, ce qui permet d'accélérer la manipulation des données. temps d'exécution.
  • Code simplifié : Le code devient plus concis et lisible, car il ne nécessite plus de manipulation complexe de chaînes opérations.
  • Flexibilité accrue : Les paramètres table prennent en charge des types de données plus complexes et permettent un traitement supplémentaire au sein de la procédure stockée.

Pour tirer parti des opérations table paramètres, les développeurs doivent créer un type de table défini par l'utilisateur dans la base de données, puis modifier la procédure stockée pour accepter ce type comme paramètre. L'extrait de code ci-dessous montre comment mettre en œuvre cette approche :

Code C# :

public void AddItemsToReport(string connStr, int Id, List<int> itemList)
{
    using (SqlConnection _connection = new SqlConnection(connStr))
    {
        using (SqlCommand _sqlcommand = new SqlCommand("AddItemsToReport", _connection))
        {
            _sqlcommand.CommandType = CommandType.StoredProcedure;

            _sqlcommand.Parameters.AddWithValue("ReportId", Id);
            _sqlcommand.Parameters.AddWithValue("Items", itemList);

            _connection.Open();
            _sqlcommand.ExecuteNonQuery();
        }
    }
}

Procédure stockée SQL :

CREATE PROCEDURE AddItemsToReport (@ReportId int, @Items IntArray)
AS
BEGIN
   -- Insert each item into ReportItem table
   INSERT INTO ReportItem (ReportId, ItemId)
   SELECT @ReportId, Item
   FROM @Items
END

Dans cet exemple, le type "IntArray" est un type de table défini par l'utilisateur qui correspond au Liste en C#. Le paramètre "@Items" peut alors accepter la liste des ID d'éléments comme une seule entité, améliorant à la fois les performances et 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!

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