2013-11-28 41 views
0

我有一个数据库,其中包含所有需要的表,这些数据库完全可用。但为了测试目的,我需要制作数据库的副本,比如说100次。 (我的应用程序将在每个数据库上循环执行一些脚本)。制作数据库的副本

生成的数据库当然应该有不同的名称。要使用Backup/Restore或甚至Detach/Copy/Attach 100次是不可行的。所以我想知道是否有一个脚本可以循环复制/恢复数据库多次不同的名称?

感谢

+1

为什么你声称'备份/恢复'是不可能的?这可能是解决这一挑战的最有效和最简单的解决方案! –

+0

我不是说它不可能,但想象做这个100-200次?!这需要一整天.. –

+0

只需编写脚本 - 您可以轻松创建'BACKUP DATABASE ...'和'RESTORE ...'作为脚本,让它无人值守运行..... –

回答

0

好吧发现东西是为我工作,通过简单的WHILE LOOP;

DECLARE @index int 
DECLARE @dbName varchar(25) 
declare @HRNET varchar(200) 
declare @HRNET_LOG varchar(200) 
declare @sql varchar(2000) 
SET @index = 5 

WHILE (@index < 200) 
BEGIN 

-- Construct db name and corresponding files name 
SET @dbName = 'BDName' + Right('0000' + CONVERT(NVARCHAR, @index), 4) 
set @MDF = '''C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008\MSSQL\DATA\' + @dbName + '.mdf''' 
SET @LDF = '''C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008\MSSQL\DATA\' + @dbName + '_1.ldf''' 

-- Restore db from backup bak file 
SELECT @sql = 'RESTORE DATABASE ' + @dbName + ' 
FROM DISK = ''C:\DB Backup\DBName1919.bak'' 
WITH FILE = 1, 
MOVE ''WEEKLY_UK_CO_E_REPORTING_Data'' TO ' + @MDF + ', 
MOVE ''WEEKLY_UK_CO_E_REPORTING_Log'' TO ' + @LDF + 
', NOUNLOAD, STATS = 10' 

exec(@sql) 


SET @index = @index + 1 

END 
GO 

检索备份路径位置(MDF & LDF),只需要运行以下;

RESTORE FILELISTONLY 
FROM DISK = N'C:\DB Backup\DBName1919.bak'