1、执行
restore filelistonly FROM disk='E:\ChinaValue_db_200612250200.BAK'
获得当前备份文件的逻辑名
2、使用windows账户或者sa登陆执行以下SQL语句:
restore DATABASE [ ChinaValue ] FROM disk = ' E:\ChinaValue_db_200612250200.BAK ' WITH file = 1 , move ' ChinaValueTemp ' TO ' F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Data.MDF ' , move ' ChinaValueTemp_Log ' TO ' F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Log.LDF ' restore DATABASE [ 还原目的数据库 ] FROM disk = ' E:\ChinaValue_db_200612250200.BAK ' -- 备份文件的路径 WITH file = 1 , -- 文件的编号 move ' ChinaValueTemp ' TO ' F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Data.MDF ' , -- 数据库逻辑名 to 还原到的物理文件名 move ' ChinaValueTemp_Log ' TO ' F:\Server\SqlData\MSSQL\Data\ChinaValueTemp_Log.LDF ' -- 日志逻辑名 to 还原到的物理文件名
-- 首先创建存储过程 CREATE proc p_validatelogin @dbname sysname, -- 孤立用户所在的数据库名 @loginame sysname -- 孤立用户名 AS IF db_id ( @dbname ) IS NULL begin print ' 无此数据库 ' RETURN end declare @s nvarchar ( 4000 ), @sid BINARY ( 16 ) IF EXISTS ( SELECT * FROM master..sysxlogins WHERE name = @loginame ) begin -- 如果已经有该登录,则直接修改系统表 exec sp_configure ' allow updates ' , 1 reconfigure WITH override SELECT @sid = sid FROM master..syslogins WHERE name = @loginame SET @s = ' update [ ' + REPLACE ( @dbname , ' ] ' , ' ]] ' ) + ' ]..sysusers set sid=@sid where name=@loginame and islogin=1 ' exec sp_executesql @s ,N ' @sid binary(16),@loginame sysname ' , @sid , @loginame exec sp_configure ' allow updates ' , 0 reconfigure WITH override end else begin -- 如果没有该登录,则创建登录 SET @s = ' SELECT @sid=sid FROM [ ' + REPLACE ( @dbname , ' ] ' , ' ]] ' ) + ' ]..sysusers WHERE islogin=1 and name=@loginame ' exec sp_executesql @s ,N ' @sid binary(16) out,@loginame sysname ' , @sid out, @loginame exec sp_addlogin @loginame = @loginame , @sid = @sid end go -- 执行存储过程 exec p_validatelogin ' ChinaValueBbs ' , ' chinavaluebbs ' go -- 执行重新配置 RECONFIGURE