Chinaunix首页 | 论坛 | 博客
  • 博客访问: 158408
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 250
  • 用 户 组: 普通用户
  • 注册时间: 2013-04-17 15:56
个人简介

南风有翼 夜景阑珊

文章分类

全部博文(37)

文章存档

2015年(1)

2014年(30)

2013年(6)

分类: 信息化

2013-04-18 12:48:25

在我们的开发作业中,常常会面临这样的疑问:为了检验需要建立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 至此,批量建库,恢复库,删去库的作业结束了。 ? ?  
阅读(903) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~