[置顶] SQL脚本批量建库,批量还原库,批量删除库

在我们的开发工作中,经常会面临这样的问题:为了测试需要建立n(n当然不是1,也不是2,而是100,甚至更大)多个与实际环境所使用的数据库相同的数据库。要是靠手工一个接一个的来建立我们所需要的库,当然是可以的。不过这种重复的体力劳动往往让人难以忍受。为了避免纯手工的建库操作,可以考虑使用SQL脚本来完成我们的工作。

使用SQL脚本完成的主要的工作包括:批量建n个库,使用备份文件批量还原n个库,测试完成后,批量删除测试库。

1、批量建库

批量建库的SQL脚本如下:

 

DECLARE @sql NVARCHAR(200)
DECLARE @dbname NVARCHAR(200)
DECLARE @count NVARCHAR(10)

DECLARE @n int
SET @n=1

WHILE @n<101
BEGIN 
SET @count=LTRIM(STR(@n))
SET @dbname='TESTDB_'+ @count
SET @sql='CREATE DATABASE '+@dbname
EXEC(@sql)
SET @n=@n+1
END

 

上面的批量建库脚本,使用循环建立了100个库,修改循环条件(@n<101)即可建立自己想要的个数的库。使用此脚本进行批量建库时,所建的库的名称都含有前缀'TESTDB_',只是后面的编号不同。且建立的库都被保存到SQL Server安装时默认的数据库文件保存文件夹下。要想建立的数据库保存到指定的文件夹下,可以采用下面的建库脚本。

 

DECLARE @sql NVARCHAR(200)
DECLARE @dbname NVARCHAR(200)
DECLARE @mdfname NVARCHAR(200)
DECLARE @ldfname NVARCHAR(200)
DECLARE @filename NVARCHAR(200)
DECLARE @logname NVARCHAR(200)
DECLARE @count NVARCHAR(10)

DECLARE @n int
SET @n=1

 
WHILE @n<101
BEGIN 
SET @count=LTRIM(STR(@n))
SET @dbname='TESTDB_'+ @count
SET @mdfname='TESTDB_0'
SET @ldfname='TESTDB_0_log'
SET @filename='E:\DBTest\DATA\'+@dbname+'.mdf'
SET @logname='E:\DBTest\DATA\'+@dbname+'.ldf'
SET @sql='CREATE DATABASE '+@dbname+' ON(NAME='''+@mdfname+''',FILENAME='''+@filename+''') LOG ON(NAME='''+@ldfname+''',FILENAME='''+@logname+''')'
EXEC(@sql)
SET @n=@n+1
END


执行上面的脚本,就将含有逻辑名'TESTDB_0'的数据库文件TESTDB_n.mdf 和含有逻辑名'TESTDB_0_log'的日志文件TESTDB_n_log.ldf将会被存储在'E:\DBTest\DATA\'路径下。关于逻辑文件名,将会在其他文章中进行介绍,敬请期待。

 

2、批量还原库

库建好后,就需要使用准备好的备份文件来批量还原库。具体脚本如下:

DECLARE @sql NVARCHAR(500)
DECLARE @dbname NVARCHAR(100)
DECLARE @dbname1 NVARCHAR(100)
DECLARE @dbname2 NVARCHAR(100)
DECLARE @sdbname1 NVARCHAR(100)
DECLARE @sdbname2 NVARCHAR(100)

DECLARE @path NVARCHAR(200)
DECLARE @dispath NVARCHAR(200)
DECLARE @dpath1 NVARCHAR(200)
DECLARE @dpath2 NVARCHAR(200)

DECLARE @count NVARCHAR(10)

DECLARE @n int
SET @n=1

SET @path='E:\DBTest\Backup\TRUEDB.bak'
SET @dispath='E:\DBTest\DATA\'
SET @sdbname1='TESTDB_0'
SET @sdbname2='TESTDB_0_log'

WHILE @n<101
BEGIN 
SET @count=LTRIM(STR(@n))
SET @dbname='TESTDB_'+ @count
SET @dbname1='TESTDB_'+ @count+'.mdf'
SET @dbname2='TESTDB_'+ @count+'_log.ldf'
SET @dpath1=@dispath+@dbname1
SET @dpath2=@dispath+@dbname2
SET @sql='restore database '+@dbname+' from disk='"+@path+"' with move '"+@sdbname1+"' to '"+@dpath1+"',move '"+@sdbname2+"' to '"+@dpath2+"' ,STATS=10,replace'
EXEC(@sql)
SET @n=@n+1
END
 

上面的脚本将'E:\DBTest\Backup\TRUEDB.bak'文件依次还原到我们所建的100个库中。

 

3、批量删除库

测试结束后,我们用下面的脚本批量删除库。

DECLARE @dname NVARCHAR(20)
DECLARE @sql NVARCHAR(200)
DECLARE @n int
SET @n=1
WHILE @n<101
BEGIN
SET @dname='TESTDB_'+LTRIM(STR(@n))
SET @sql='DROP DATABASE'+@dname
EXEC(@sql)
SET @n=@n+1
END


至此,批量建库,还原库,删除库的工作完成了。

 

 

你可能感兴趣的:([置顶] SQL脚本批量建库,批量还原库,批量删除库)