/*----------------------------------------------------------------------
说明:可以一次性将同目录下的多个BAK文件进行还原(还原前有无数据库都可以)
1.修复了数据库在使用时不能还原的问题。
2.修复了一个BAK文件有多个备份集时不能还原的问题。
(一个BAK文件有多个备份集时,取最后一个备份集来还原)
3.修复了不支持sql 2012的问题。
4.自动判断SQL 版本
5.对于有些备份库文件很大的在还原时会报错,此时只能对该报错库进行单独手动还原!!!
-------------------------------------------------------------------------*/
USE master
GO
DECLARE @bkpath NVARCHAR(1000),@bkfile NVARCHAR(4000), @dbpath NVARCHAR(260), @overexist BIT,@killuser BIT,@SQLVersion INT;
-- BAK 文件所在路径
SET @bkpath = 'H:\数据库\SQLTest\SQLTEST\';
-- 还原后的数据库存放目录,不指定则为SQL的默认数据目录
SET @dbpath = 'H:\数据库\SQL2008实例\奥园数据库\';
--------------------- 以下变量值默认就好 ------------------------------------
SET @bkfile = ''; -- 定义要恢复的备份文件名,不含扩展名
SET @overexist = 1; -- 是否覆盖已经存在的数据库,仅@retype为'DB'/'DBNOR'是有效
SET @killuser = 1; -- 是否关闭用户使用进程,仅@overexist=1时有效
-- 自动判断SQL 版本
--SET @SQLVersion = 1; -- 1:SQL Server 2005; 2: SQL Server 2008; 3:SQL Server 2012
IF @@VERSION LIKE '%Server 2005%'
BEGIN
SET @SQLVersion = 1;
END
ELSE IF @@VERSION LIKE '%Server 2008%'
BEGIN
SET @SQLVersion = 2;
END
ELSE IF @@VERSION LIKE '%Server 2012%'
BEGIN
SET @SQLVersion = 3;
END
ELSE -- sql server 2014或其它版本暂时视为SQL Server 2012来处理
BEGIN
SET @SQLVersion = 3;
END
DECLARE @sql VARCHAR(8000),@dbname sysname;
-- 备份文件所在目录
IF ISNULL(@bkpath,'') = ''
BEGIN
SELECT @bkpath = RTRIM(REVERSE([filename]))
FROM [master].[dbo].[sysfiles]