南风有翼 夜景阑珊
分类: 信息化
2013-04-18 12:48:25
原文地址:SQL脚本批量建库,批量复原库,批量删去库 作者:fpqqchao
在我们的开发作业中,常常会面临这样的疑问:为了检验需要建立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 至此,批量建库,恢复库,删去库的作业结束了。 ? ?