工作中,我们经常需要把数据库进行分离,复制数据库到另一个地方,再将原数据库文件附加回数据库 。
当然通过鼠标操作的步骤比较麻烦:
1、 右键数据库 --------任务------分离
2、打开数据库文件所在目录,复制数据库
3、打开要复制到的目录进行粘贴
4、再回到数据库 右键 ----附加 ----选择路径 ……
懒人们实在受不了这样的操作^_^ 因此写下下面代码 偷懒用
DECLARE @DATABaseName VARCHAR(500)
DECLARE @DATABaseFile VARCHAR(500)
DECLARE @DATALogFile VARCHAR(500)
DECLARE @DATACopyPath VARCHAR(500)
DECLARE @CMD VARCHAR(500)
USE [XXHX030C] --要复制备份的数据库名称。多个数据库复制备份的话,每备份完一个数据库后,只用改此名称即可。
SET @DATACopyPath = 'D:\dataDB\' --要复制备份到的目录
SELECT @DATABaseName = DB_NAME()
SELECT @DATABaseFile = physical_name
FROM sys.database_files
WHERE physical_name LIKE'%.mdf%'
SELECT @DATALogFile = physical_name
FROM sys.database_files
WHERE physical_name LIKE'%.ldf%'
PRINT @DATABaseFile + ' ' + @DATALogFile
USE [master]
IF DB_ID('' + @DATABaseName + '') IS NOT NULL
SET @Cmd = (
'ALTER DATABASE ' + @DATABaseName +
' SET SINGLE_USER WITH ROLLBACK IMMEDIATE '
)
EXEC (@CMD)
EXEC sp_detach_db @DATABaseName
SET @CMD = (
'master.dbo.xp_cmdshell ''copy ' + @DATABaseFile + ' ' + @DATACopyPath +
'' + @DATABaseName + '.mdf'' '
)
PRINT @CMD
EXEC (@CMD)
SET @Cmd = (
'master.dbo.xp_cmdshell ''copy ' + @DATALogFile + ' ' + @DATACopyPath +
'' + @DATABaseName + '.ldf'' '
)
EXEC (@CMD)
IF DB_ID('' + @DATABaseName + '') IS NULL
SET @CMD = (
'CREATE DATABASE ' + @DATABaseName + ' ON (FILENAME = ''' + @DATABaseFile
+ ''') FOR ATTACH_REBUILD_LOG'
)
EXEC (@CMD)