Maison >base de données >tutoriel mysql >Les procédures stockées peuvent-elles être exécutées pour chaque ligne du tableau sans curseurs ?

Les procédures stockées peuvent-elles être exécutées pour chaque ligne du tableau sans curseurs ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2025-01-05 21:05:45819parcourir

Can Stored Procedures Be Executed for Each Table Row Without Cursors?

Exécuter des procédures stockées pour chaque ligne de table sans avoir besoin de curseurs

Lorsque nous sommes confrontés à la tâche d'appeler une procédure stockée pour chaque ligne de un tableau, il est naturel d’envisager l’approche consistant à parcourir les lignes à l’aide d’un curseur. Cependant, il est possible de réaliser cette tâche sans compter sur des curseurs.

Utilisation d'une approche basée sur des ensembles

Dans une approche basée sur des ensembles, nous visons à trouver un moyen d’effectuer l’opération pour toutes les lignes simultanément. Par exemple, si notre objectif était de mettre à jour une colonne pour chaque ligne d'un tableau, nous pourrions exploiter une instruction UPDATE avec une clause WHERE appropriée pour modifier les enregistrements concernés en une seule fois.

Cas spécifique : Itération sur les colonnes de ligne

Cependant, lorsqu'il s'agit de scénarios dans lesquels les colonnes d'une ligne doivent être utilisées comme paramètres d'entrée pour une procédure stockée, une approche légèrement différente est requis. Comme décrit dans la réponse fournie :

  • Déclarer et initialiser les variables : définissez une variable pour suivre le client que nous traitons actuellement.
  • Itérer over Rows : utilisez une boucle WHILE avec une instruction SELECT pour récupérer et mettre à jour la variable CustomerID avec l'ID du client suivant dans le table.
  • Condition de sortie : Définissez une condition pour rompre la boucle lorsqu'il n'y a plus de clients.
  • Exécuter la procédure stockée : Pour chaque client, appelez la procédure stockée spécifiée avec le paramètre CustomerID.

Code Exemple

L'extrait de code fourni illustre comment cette approche peut être mise en œuvre :

-- Declare & initialize (2008 syntax)
DECLARE @CustomerID INT = 0

-- Iterate over all customers
WHILE (1 = 1) 
BEGIN  

  -- Get next customerId
  SELECT TOP 1 @CustomerID = CustomerID
  FROM Sales.Customer
  WHERE CustomerID > @CustomerId 
  ORDER BY CustomerID

  -- Exit loop if no more customers
  IF @@ROWCOUNT = 0 BREAK;

  -- call your sproc
  EXEC dbo.YOURSPROC @CustomerId

END

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