一、sql server 無法覆蓋文件 'xxxx' 數據庫 'xxx' 正在使用該文件。
sqlserver 還原時候經常遇到這個問題
解決方案:
使用SSMS工具操作時候,還原是選擇 關閉現有數據庫鏈接
二、如果使用 restore database命令操作時候,則先分離數據庫,然後執行還原操作
--1.定義數據庫
declare @dbName nvarchar(1000)='[QL.MiniMall.HA_AM07]';
declare @dbFullName nvarchar(1000)='F:\xxx\xxxx.bak';
--2 t-sql 分離數據庫
exec(N'SP_DETACH_DB '+@dbName+',TRUE');
--3 .執行還原語句
restore database @dbName from disk=@dbFullName
with replace --覆蓋現有的數據庫
知識點: 分離數據庫
分離數據庫(TSQL)
EXEC sp_detach_db '數據庫名稱', 'true';
更靠譜的語句
--1.定義數據庫
declare @dbName nvarchar(1000)='QL.MiniMall.HA_AM07';
declare @dbFullName nvarchar(1000)='F:\zzy\QL.MiniMall.HA_AM07\Api\wwwroot\file\backup\QL.MiniMall.HA_AM07_2021_01_04_055951.bak';
--1.2結束鏈接進程
DECLARE @kid varchar(max)
SET @kid=''
SELECT @kid=@kid+'KILL '+CAST(spid as Varchar(10)) FROM master..sysprocesses
WHERE dbid=DB_ID(@dbName) ;
EXEC(@kid) ;
--2 t-sql 分離數據庫
declare @sql nvarchar(1000)=N'SP_DETACH_DB @dbName,TRUE';
exec sp_executesql
@stmt=@sql,
@params=N'@dbName as nvarchar(100)',
@dbName=@dbName;
--3 .執行還原語句
restore database @dbName from disk=@dbFullName
with replace --覆蓋現有的數據庫
更多參考:
https://blog.csdn.net/weixin_30555753/article/details/96618675