Itérer au sein d’un jeu de résultats à l’aide de Transact-SQL dans SQL Server
Cet article décrit différentes méthodes que vous pouvez utiliser pour itérer dans un jeu de résultats à l’aide de Transact-SQL dans SQL Server.
Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 111401
Résumé
Cet article décrit différentes méthodes que vous pouvez utiliser pour simuler une logique de type FETCH
-NEXT
curseur dans une procédure stockée, un déclencheur ou un lot Transact-SQL.
Utiliser des instructions Transact-SQL pour itérer au sein d’un jeu de résultats
Il existe trois méthodes que vous pouvez utiliser pour itérer dans un jeu de résultats à l’aide d’instructions Transact-SQL.
L’une des méthodes consiste à utiliser des tables temporaires. Avec cette méthode, vous créez un instantané de l’instruction initiale SELECT
et vous l’utilisez comme base pour le curseur. Par exemple :
/********** example 1 **********/
DECLARE @au_id char( 11 )
SET rowcount 0
SELECT * INTO #mytemp FROM authors
SET rowcount 1
SELECT @au_id = au_id FROM #mytemp
WHILE @@rowcount <> 0
BEGIN
SET rowcount 0
SELECT * FROM #mytemp WHERE au_id = @au_id
DELETE #mytemp WHERE au_id = @au_id
SET rowcount 1
SELECT @au_id = au_id FROM #mytemp
END
SET rowcount 0
Une deuxième méthode consiste à utiliser la min
fonction pour parcourir une table une ligne à la fois. Cette méthode intercepte les nouvelles lignes ajoutées après le début de l’exécution de la procédure stockée, à condition que la nouvelle ligne ait un identificateur unique supérieur à la ligne actuelle en cours de traitement dans la requête. Par exemple :
/********** example 2 **********/
DECLARE @au_id char( 11 )
SELECT @au_id = min( au_id ) FROM authors
WHILE @au_id IS NOT NULL
BEGIN
SELECT * FROM authors WHERE au_id = @au_id
SELECT @au_id = min( au_id ) FROM authors WHERE au_id > @au_id
END
Remarque
Les exemples 1 et 2 supposent qu’il existe un identificateur unique pour chaque ligne de la table source. Dans certains cas, aucun identificateur unique n’existe. Si c’est le cas, vous pouvez modifier la méthode de table temporaire pour utiliser une colonne clé nouvellement créée. Par exemple :
/********** example 3 **********/
SET rowcount 0
SELECT NULL mykey, * INTO #mytemp FROM authors
SET rowcount 1
UPDATE #mytemp SET mykey = 1
WHILE @@rowcount > 0
BEGIN
SET rowcount 0
SELECT * FROM #mytemp WHERE mykey = 1
DELETE #mytemp WHERE mykey = 1
SET rowcount 1
UPDATE #mytemp SET mykey = 1
END
SET rowcount 0
References
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour