2012-08-13 46 views
2

我需要多次調用存儲過程。我怎樣才能把它放在一個循環?如何在SQL Server 2008 R2中調用存儲過程的循環?

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中一樣,並且在每個循環中增加1個值evcfolio

謝謝你的時間。

+2

不要。您通過在循環中調用存儲過程來嚮應用程序添加開銷。考慮更改設計,以便您可以傳入值列表以進行查詢,並且只運行一次該過程。閱讀[Table Valued Parameters](表值參數)(http://msdn.microsoft.com/zh-cn/library/bb510489.aspx)。 – Oded 2012-08-13 15:04:10

回答

4
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 
+0

'SET @Counter = 666;而@Counter <= 10'?有些東西不對,你永遠不會進入你的WHILE塊。 – 2012-08-13 15:10:08

+0

感謝您的更正,但是現在您將執行11次程序,而不是10次。 – 2012-08-13 15:28:32

2

儘管我同意重構存儲過程並讓它處理循環(或TVP中的一個集合)而不是多次調用該過程是一種更好的方法,但與此同時,任何語言的循環都相當簡單你可以做這樣的事情:

DECLARE @i INT; 
SET @i = 666; 

WHILE @i <= 675 
BEGIN 
    EXEC ... @evcfolio = @i ...; 
    SET @i += 1; 
END 
+0

謝謝!它幫助我 – AndresMontj 2012-08-13 15:11:36

相關問題