Maison > base de données > tutoriel mysql > Comment transmettre efficacement une liste d'entiers à une procédure stockée SQL ?

Comment transmettre efficacement une liste d'entiers à une procédure stockée SQL ?

Patricia Arquette
Libérer: 2024-12-31 04:28:13
original
800 Les gens l'ont consulté

How to Efficiently Pass a List of Integers to a SQL Stored Procedure?

Liste de passage à la procédure stockée SQL

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;
}
Copier après la connexion

Stocké Procédure

INSERT INTO ReportItem (ReportId,ItemId)
SELECT  @ReportId,
          Id
FROM     @Items
Copier après la connexion

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 :

  • Efficacité accrue
  • Complexité de code réduite
  • Lisibilité améliorée du code
  • Meilleure prise en charge des grands ensembles de donné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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal