进程 ID 'x' 不是活动进程 ID

Sql*_*Sql 2 sql t-sql sql-server-2008-r2

我需要将 trans 日志文件恢复到每 1 小时处于待机模式的数据库 DBrestore 中。所以我创建了一个作业,它首先杀死所有进程,然后将日志文件恢复到数据库中,但有时作业失败并给出以下错误:进程 ID '71' 不是活动进程 ID,进程 ID 每次都会更改它失败。我使用这个查询来终止进程

declare @sql as varchar(20), @spid as int
select @spid = min(spid)  from master..sysprocesses  
 where dbid = db_id('DBrestore') 
 and spid != @@spid    

while (@spid is not null)
begin
print 'Killing process ' + cast(@spid as varchar) + ' ...'
set @sql = 'kill ' + cast(@spid as varchar)
exec (@sql)

select 
    @spid = min(spid)  
from 
    master..sysprocesses  
where 
    dbid = db_id('DBrestore') 
    and spid != @@spid
end 
Run Code Online (Sandbox Code Playgroud)

我需要在此查询中进行哪些更改以确保它仅采用处于活动状态的进程 ID。

提前致谢

Eri*_*ric 5

在下面链接中提供的文档中,它提到通过状态捕获“活动”进程。如果您将其添加到 where 条件中,它应该将您的查询限制为活动进程。

declare @sql as varchar(20), @spid as int
select @spid = min(spid)  from master..sysprocesses  
 where dbid = db_id('DBrestore') 
 and spid != @@spid    

while (@spid is not null)
begin
print 'Killing process ' + cast(@spid as varchar) + ' ...'
set @sql = 'kill ' + cast(@spid as varchar)
exec (@sql)

select 
    @spid = min(spid)  
from 
    master..sysprocesses  
where 
    dbid = db_id('DBrestore') 
    and spid != @@spid
    and status = 'running'
end 
Run Code Online (Sandbox Code Playgroud)

https://docs.microsoft.com/en-us/sql/relational-databases/system-compatibility-views/sys-sysprocesses-transact-sql