0

我編寫了以下過程來創建一系列20個數據庫。 但它並沒有創造它們。數據庫不會創建,即使我去我的H:驅動器,並沒有找到名爲bharath1 bharath2的ldf和mdf,如...如何在sqlserver中一次創建20個數據庫?

我做了什麼錯?

USE master 
GO 

DECLARE @command varchar(1000), @i int 

while @i < 5 

    SET @command = 'CREATE DATABASE Bharath' + CAST(@i AS varchar) + ' 
    ON (NAME = ''Bharath_dat'', 
    FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\Bharath' + 
    CAST(@i AS varchar) + '.mdf'', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5) 

    LOG ON (NAME = ''Bharath_log'', 
      FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\Bharath' + 
    CAST(@i AS varchar) + '.ldf'', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB)' 

    EXEC (@command) 

    SET @i = @i + 1 

GO 

我對SQL Server存儲過程沒有任何想法,因爲我的知識和有人支持我這樣做。但我沒有找到任何數據庫。

任何幫助非常感謝。

回答

4

好吧,在WHILE循環之後沒有看到BEGIN和END塊,這可能會導致SQL無限循環來運行SET @command語句。

你需要爲封裝與BEGIN和END的WHILE ...

DECLARE @command as varchar(1000), @i int 
SET @i = 0 
WHILE @i < 5 
BEGIN 
    SET @command = 'CREATE DATABASE Example' + CAST(@i AS varchar) 
    EXEC(@command) 
    SET @i = @i + 1 
END 

這對我的作品。 (SET @i = 0是必須的)

+0

甚至現在我做到了,我不能得到任何結果... – Cute 2009-07-17 06:37:31

2

你需要初始化@i,你的聲明後補充一點:

SET @i = 1 
2

有你已經錯過了一些東西 - 你首先需要把你想要反覆執行的幾個SQL命令放到BEGIN......END塊中。

二,您需要初始化您的@i計數器!否則,它會永遠不會首先進入WHILE循環。第三,你的CREATE DATABASE調用是錯誤的 - 你需要指定一個文件組在哪裏創建數據庫(CREATE DATABASE(name)ON(filegroup).......)。

這裏是我的代碼:

USE master 
GO 

DECLARE @command varchar(1000), @instanceName VARCHAR(100), @i int 

SET @i = 1 

WHILE @i <= 5 
BEGIN 
    SET @instanceName = 'Bharath' + CAST(@i AS VARCHAR(10)) 

    SET @command = 'CREATE DATABASE ' + @instanceName + 
    ' ON PRIMARY (NAME = N''' + @instanceName + ''', ' + 
    'FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\' + 
    @instanceName + '.mdf'', SIZE = 10, MAXSIZE = 50, FILEGROWTH = 5) ' + 
    'LOG ON (NAME = N''' + @instanceName + '_LOG'', ' + 
    'FILENAME = ''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\' + 
    @instanceName + '.ldf'', SIZE = 5MB, MAXSIZE = 25MB, FILEGROWTH = 5MB)' 

    EXEC (@command) 

    SET @i = @i + 1 
END 
GO 
相關問題