2 votes

Comment créer une boucle appelant une procédure stockée dans SQL Server 2008 R2 ?

Je dois appeler une procédure stockée plusieurs fois. Comment puis-je mettre cela dans une boucle?

DECLARE @return_value int,
                @sinresultado varchar(200),
                @svcmensaje varchar(200)

EXEC    @return_value = [dbo].[ppocfdcancelacionwsejecuta]
                @evcrfcemisor = N'BBA940707IE1',
                @evcserie = N'XXAABB',
                @evcfolio = N'666',
                @sinresultado = @sinresultado OUTPUT,
                @svcmensaje = @svcmensaje OUTPUT

Je dois faire en sorte que @evcfolio s'exécute de 1 à 10 dans la même boucle. Comme un for en Java et la valeur de evcfolio augmente de 1 à chaque boucle.

Merci pour votre temps.

5voto

Thomas Points 42973
Déclarer @Counter int ;
Déclarer @CounterText nvarchar(10);
Déclarer @return_value int,
                @sinresultado varchar(200),
                @svcmensaje varchar(200);
Set @Counter = 666;

Tant que @Counter < 676
Commencer
    Set @CounterText = Cast(@Counter As nvarchar(10));
    exec @return_value = [dbo].[ppocfdcancelacionwsejecuta]
                    @evcrfcemisor = N'BBA940707IE1',
                    @evcserie = N'XXAABB',
                    @evcfolio = @CounterText,
                    @sinresultado = @sinresultado OUTPUT,
                    @svcmensaje = @svcmensaje OUTPUT
    Set @Counter = @Counter + 1;
Fin

2voto

Aaron Bertrand Points 116343

Alors que je suis d'accord avec le fait que restructurer la procédure stockée et lui faire gérer la boucle (ou un ensemble dans un TVP) au lieu d'appeler la procédure plusieurs fois est une meilleure approche, en attendant, les boucles dans n'importe quel langage sont assez simples et vous pouvez faire quelque chose comme ceci :

DÉCLARER @i INT;
SET @i = 666;

TANT QUE @i <= 675
DÉBUT
    EXEC ... @evcfolio = @i ...;
    SET @i += 1;
FIN

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X