Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何在sqlserver中一次创建20个数据库?_Sql Server_Sql Server 2005_Sql Server 2008_Stored Procedures - Fatal编程技术网

Sql server 如何在sqlserver中一次创建20个数据库?

Sql server 如何在sqlserver中一次创建20个数据库?,sql-server,sql-server-2005,sql-server-2008,stored-procedures,Sql Server,Sql Server 2005,Sql Server 2008,Stored Procedures,我编写了以下过程来创建一系列20个数据库。 但它并没有创造它们。即使当我转到我的H:驱动器,没有找到名为bharath1 bharath2的ldf和mdf时,数据库也没有创建 我做错了什么 USE master GO DECLARE @command varchar(1000), @i int while @i < 5 SET @command = 'CREATE DATABASE Bharath' + CAST(@i AS varchar) + ' ON ( NAME

我编写了以下过程来创建一系列20个数据库。 但它并没有创造它们。即使当我转到我的H:驱动器,没有找到名为bharath1 bharath2的ldf和mdf时,数据库也没有创建

我做错了什么

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
使用master
去
声明@command varchar(1000),@i int
而@i<5
SET@command='CREATE DATABASE Bharath'+CAST(@i AS varchar)+'
在(名称=“Bharath_dat”,
文件名=''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\Bharath'+
强制转换(@i AS varchar)+'.mdf',大小=10,最大大小=50,文件增长=5)
登录(名称为“Bharath_日志”,
文件名=''H:\MSSQL10.MSSQLSERVER\MSSQL10.MSSQLSERVER\MSSQL\DATA\Bharath'+
强制转换(@i AS varchar)+'.ldf'',大小=5MB,最大大小=25MB,文件增长=5MB)'
EXEC(@command)
设置@i=@i+1
去
据我所知,我对SQL Server存储过程没有任何概念,在某人的支持下,我做到了这一点。但我没有找到任何数据库


非常感谢您的帮助。

好的,我没有看到WHILE循环之后的BEGIN和END块,这可能会导致SQL执行一个无休止的循环,只运行SET@command语句

你需要把WHILE用BEGIN和END括起来

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
将@command声明为varchar(1000),@i int
设置@i=0
而@i<5
开始
SET@command='CREATE DATABASE Example'+CAST(@i AS varchar)
EXEC(@command)
设置@i=@i+1
终止

这对我有用(必须设置@i=0)

您需要初始化@i,在声明后添加此项:

SET @i = 1

有几件事你错过了——你首先需要把你想要反复执行的几个SQL命令放到一个
BEGIN……END
块中

第二,你需要初始化你的
@i
计数器!否则,它将永远不会首先进入WHILE循环

第三,您的CREATEDATABASE调用是错误的-您需要指定一个文件组,在其中创建数据库(CREATEDATABASE(name)(文件组)…)

这是我的密码:

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
使用master
去
声明@command varchar(1000),@instanceName varchar(100),@i int
设置@i=1
而@i