2

我需要多次调用存储过程。我怎样才能把它放在一个循环中?

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

我需要@evcfolio在同一个循环中从 1 运行到 10。就像java中的for和evcfolio每个循环的值增加1。

谢谢你的时间。

4

2 回答 2

5
Declare @Counter int;
Declare @CounterText nvarchar(10);
Declare @return_value int,
                @sinresultado varchar(200),
                @svcmensaje varchar(200);
Set @Counter = 666;

While @Counter < 676
Begin
    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;
End
于 2012-08-13T15:04:26.990 回答
2

虽然我同意重组存储过程并让它处理循环(或 TVP 中的一个集合)而不是多次调用该过程是一种更好的方法,但与此同时,任何语言的循环都相当简单,你可以这样做像这样的东西:

DECLARE @i INT;
SET @i = 666;

WHILE @i <= 675
BEGIN
    EXEC ... @evcfolio = @i ...;
    SET @i += 1;
END
于 2012-08-13T15:04:21.317 回答