怎么把bak转换成MDB
发布网友
发布时间:2022-04-19 09:44
我来回答
共2个回答
热心网友
时间:2023-07-03 19:01
好像不可以吧,那样在运行的时候好像不能执行
网上找的我也不太懂!
--恢复数据库
/*--调用示例
--完整恢复数据库
EXEC procRestoreDb @byvBkFile='c:\db_20031015_db.bak',@byvBbName='db'
--差异备份恢复
EXEC procRestoreDb @byvBkFile='c:\db_20031015_db.bak',@byvBbName='db',@byvType='DBNOR'
EXEC p_backupdb @byvBkFile='c:\db_20031015_df.bak',@byvBbName='db',@byvType='DF'
--日志备份恢复
EXEC procRestoreDb @byvBkFile='c:\db_20031015_db.bak',@byvBbName='db',@byvType='DBNOR'
EXEC p_backupdb @byvBkFile='c:\db_20031015_log.bak',@byvBbName='db',@byvType='LOG'
--*/
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[procRestoreDb]') AND OBJECTPROPERTY(id, N'IsProcere') = 1)
DROP PROC [dbo].[procRestoreDb]
GO
CREATE PROC procRestoreDb
@byvBkFile nvarchar(1000), --定义要恢复的备份文件名
@byvBbName sysname='', --定义恢复后的数据库名,默认为备份的文件名
@byvBbPath nvarchar(260)='', --恢复后的数据库存放目录,不指定则为SQL的默认数据目录
@byvType nvarchar(10)='DB', --恢复类型:'DB'完整,'DBNOR' 为差异,日志恢复进行完整恢复, DF' 差异备份的恢复,'LOG' 日志恢复
@byvFileNo int=1, --恢复的文件号
@byvOverSign bit=1, --是否覆盖已经存在的数据库,仅@byvType为'DB'/'DBNOR'是有效
@byvKillSign bit=1 --是否关闭用户使用进程,仅@byvOverSign=1时有效
AS
DECLARE @vchSql varchar(8000)
--得到恢复后的数据库名
IF ISNULL(@byvBbName,'')=''
SELECT @vchSql=REVERSE(@byvBkFile)
,@vchSql= CASE WHEN CHARINDEX('.',@vchSql)=0 THEN @vchSql
ELSE SUBSTRING(@vchSql,CHARINDEX('.',@vchSql)+1,1000) END
,@vchSql= CASE WHEN CHARINDEX('\',@vchSql)=0 THEN @vchSql
ELSE LEFT(@vchSql,CHARINDEX('\',@vchSql)-1) END
,@byvBbName=REVERSE(@vchSql)
--得到恢复后的数据库存放目录
IF ISNULL(@byvBbPath,'')=''
BEGIN
SELECT @byvBbPath=rtrim(REVERSE(filename)) FROM master..sysfiles WHERE name='master'
SELECT @byvBbPath=REVERSE(substring(@byvBbPath,charindex('\',@byvBbPath),4000))
END
--生成数据库恢复语句
SET @vchSql='restore '+ CASE @byvType WHEN 'LOG' THEN 'log ' ELSE 'database ' END+@byvBbName
+' FROM disk='''+@byvBkFile+''''
+' with file='+CAST(@byvFileNo as varchar)
+ CASE WHEN @byvOverSign=1 AND @byvType in('DB','DBNOR') THEN ',replace' ELSE '' END
+ CASE @byvType WHEN 'DBNOR' THEN ',NORECOVERY' ELSE ',RECOVERY' END
--添加移动逻辑文件的处理
IF @byvType='DB' or @byvType='DBNOR'
BEGIN
--从备份文件中获取逻辑文件名
DECLARE @lfn nvarchar(128),@tp char(1),@i int
--创建临时表,保存获取的信息
CREATE TABLE #tb(ln nvarchar(128),pn nvarchar(260),tp char(1),fgn nvarchar(128),sz numeric(20,0),Msz numeric(20,0))
--从备份文件中获取信息
INSERT INTO #tb EXEC('restore filelistonly FROM disk='''+@byvBkFile+'''')
DECLARE #f CURSOR FOR SELECT ln,tp FROM #tb
OPEN #f
FETCH NEXT FROM #f INTO @lfn,@tp
SET @i=0
WHILE @@FETCH_STATUS=0
BEGIN
SELECT @vchSql=@vchSql+',move '''+@lfn+''' to '''+@byvBbPath+@byvBbName+CAST(@i as varchar)
+ CASE @tp WHEN 'D' THEN '.mdf''' ELSE '.ldf''' END
,@i=@i+1
FETCH NEXT FROM #f into @lfn,@tp
END
CLOSE #f
DEALLOCATE #f
END
--关闭用户进程处理
IF @byvOverSign=1 AND @byvKillSign=1
BEGIN
DECLARE @spid varchar(20)
DECLARE #spid cursor for
SELECT spid=cast(spid as varchar(20)) FROM master..sysprocesses WHERE dbid=db_id(@byvBbName)
OPEN #spid
FETCH NEXT FROM #spid into @spid
WHILE @@FETCH_STATUS=0
BEGIN
EXEC('kill '+@spid)
FETCH NEXT FROM #spid into @spid
END
CLOSE #spid
DEALLOCATE #spid
END
--恢复数据库
EXEC(@vchSql)
GO
热心网友
时间:2023-07-03 19:01
copy a.mdb a.bak
或者
move a.mdb a.bak
如果在Windows中,直接鼠标右键改名即可。