2009-07-10 74 views
0

我有一個存儲過程,創建一個數據庫(例如:sp_createDB)。以類似的方式,我必須使用該數據庫創建100個數據庫。所以我必須把它放在一個循環中。但我不知道如何做到這一點sqlserver。我如何在sqlserver中執行此操作。如何連續執行存儲過程?

在這方面幫助我。

感謝

回答

3

可以使用...

exec sprocName 
GO 100 

查看更多here。一般來說,它是...

GO [COUNT] 

請參閱,MSDN

+0

不會一個while循環會更好嗎? – Tetraneutron 2009-07-10 06:43:59

+0

嗨JP,看看我的答案如下 - http://stackoverflow.com/questions/1108017/how-to-execute-a-stored-procedure-continuosly/1108040#1108040 - 對於一個漏洞,如果你使用「GO [ COUNT]「方法。 – Kirtan 2009-07-10 06:45:10

3

JP's answer在技術上是正確的(GO [COUNT]可用於重複一批語句COUNT次),但是有一個邏輯錯誤。您的存儲過程將需要不同的參數,每次它執行(因爲它創造出獨特的DB,對吧?),所以你必須要圍繞循環使用WHILE這樣的 -

DECLARE @Counter INT 
SET @Counter = 1 

DECLARE @DBName VARCHAR(20) 

WHILE (@Counter <= 100) 
BEGIN 
    PRINT @Counter 
    @DBName = 'DB' + CAST(@Counter AS VARCHAR) 
    EXEC dbo.CreateDB @DBName 
END 
GO 
1

while循環將罰款稱之爲N次正如其他人的建議,但是...

不命名你的程序SP_ ...
不命名你的程序SP_ ...
不命名你的程序SP_ ...

在Sql Server中,「sp_ ...」是爲系統存儲過程保留的,可能會讓熟悉該約定的人感到困惑!如果Sql Server執行自己的「sp_createDB」過程,可能會導致問題。另外,如果存儲過程以sp_的前綴開頭,則它們的運行速度會稍慢一些。這是因爲SQL Server將首先查找系統存儲過程。因此,它不建議啓動存儲特效與前綴sp_