使用SQL语句还原数据库 2012.3.20

--返回由备份集内包含的数据库和日志文件列表组成的结果集。
--主要获得逻辑文件名
USE master
RESTORE FILELISTONLY
   FROM DISK = 'g:ack.Bak' 
Go
************************************************
/**//*
利用bak恢复数据库,强制还原(REPLACE)
STATS = 10 每完成10%显示一条记录
DBTest和DBTest_log是上面g:ack.Bak里的逻辑文件
*/
USE master
RESTORE DATABASE DB 
   FROM DISK = 'g:ack.Bak'
   WITH MOVE 'DBTest' TO 'E:Program FilesMicrosoft SQL Server2005DataDB.mdf', 
   MOVE 'DBTest_log' TO 'E:Program FilesMicrosoft SQL Server2005DataDB_log.ldf',
STATS = 10, REPLACE
GO
++++++++++++++++++++++++++++++++

/**//*
备份数据DB 到.bak文件。然后利用此bak文件恢复一个新的数据库DBTest。
*/
USE master
BACKUP DATABASE DB 
  TO DISK = 'g:DBBack0930.bak' 
RESTORE FILELISTONLY 
  FROM DISK = 'g:DBBack0930.bak' 
RESTORE DATABASE DBTest 
  FROM DISK = 'g:DBBack0930.bak' 
  WITH MOVE 'DBTest' TO 'E:Program FilesMicrosoft SQL Server2005DataDBTest.mdf', 
  MOVE 'DBTest_log' TO 'E:Program FilesMicrosoft SQL Server2005DataDBTest_log.ldf'
GO 
---******************************
存储过程
SET ANSI_NULLS ON
SET QUOTED_IDENTIFIER ON
go
/*可以强制还原数据库,也可以利用备份文件重新创建一个数据库*/
ALTER PROCEDURE [dbo].[restoreDB]
    (
      --@path NVARCHAR(32) ,
      @name NVARCHAR(64) ,--数据库备份的名称
      @mdfName NVARCHAR(64) ,--物理文件mdf的名称
      @ldfName NVARCHAR(64)--物理文件ldf的名称
    )
AS 
    BEGIN
        DECLARE @path NVARCHAR(64)--数据库备份的地址
        DECLARE @mdfPath NVARCHAR(64)--mdf文件的存放地址
        DECLARE @ldfPath NVARCHAR(64)--ldf文件的存放地址
        SET @path = 'E:DB' + @name + '.bak'
        SET @mdfPath = 'E:DB' + @mdfName + '.mdf'
        SET @ldfPath = 'E:DB' + @ldfName + '.ldf'
        --RESTORE FILELISTONLY FROM DISK = @path --获取逻辑文件的名称
        RESTORE DATABASE @mdfName FROM DISK=@path WITH STATS = 10,REPLACE,--replace表示强制替换,STATS = 10表示每进行10%提示一下,@mdfName 就是DB的name
        MOVE 'Relaship' TO @mdfPath,
        MOVE 'Relaship_log' TO @ldfPath
    END
原文地址:https://www.cnblogs.com/changshuo/p/3434417.html