Stored procedures 如何在SQLServer2008R2中创建调用存储过程的循环?

Stored procedures 如何在SQLServer2008R2中创建调用存储过程的循环?,stored-procedures,sql-server-2008-r2,Stored Procedures,Sql Server 2008 R2,我需要多次调用存储过程。我怎样才能把这个循环 DECLARE @return_value int, @sinresultado varchar(200), @svcmensaje varchar(200) EXEC @return_value = [dbo].[ppocfdcancelacionwsejecuta] @evcrfcemisor = N'BBA940707IE1',

我需要多次调用存储过程。我怎样才能把这个循环

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


谢谢您的时间。

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

DECLARE @i INT;
SET @i = 666;

WHILE @i <= 675
BEGIN
    EXEC ... @evcfolio = @i ...;
    SET @i += 1;
END
声明@i INT;
设置@i=666;
而@i
声明@Counter int;
声明@CounterText nvarchar(10);
声明@return\u value int,
@sinresultado varchar(200),
@svcmensaje-varchar(200);
设置@计数器=666;
而@Counter<676
开始
设置@CounterText=Cast(@Counter为nvarchar(10));
exec@return_value=[dbo].[ppocfdcancelacionwsejecta]
@evcrfcemisor=N'BBA940707IE1',
@evcserie=N'XXAABB',
@evcfolio=@CounterText,
@sinresultado=@sinresultado输出,
@svcmensaje=@svcmensaje输出
设置@Counter=@Counter+1;
终点

不要这样做。通过在循环中调用存储过程,您正在给应用程序增加开销。考虑更改设计,这样您就可以传递一个值列表来进行查询,并且只运行一次程序。读取。
SET@Counter=666;尽管@Counter感谢您的更正,但是现在您将执行该过程11次,而不是10次。
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