SqlServer 数据库 分离复制备份然后附加回数据库 sql代码


工作中,我们经常需要把数据库进行分离,复制数据库到另一个地方,再将原数据库文件附加回数据库 。

当然通过鼠标操作的步骤比较麻烦:

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) 





你可能感兴趣的:(sql数据库,复制,附加,迁移,分离,备份)