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