1.问题引入
在SQL Server中备份/还原/分离/脱机/删除指定数据库时, 如果有其他用户正在使用此数据库时, SQL Server为了防止数据异常, 会报错而终止你的操作.
当然, 在SQL 2005/2008里, 在做[分离/删除]数据库时提供了一个选项[关闭所以连接]供勾选(SQL 2000好像没有哦), 然而[备份/还原]操作却没有此选择, 也许你会说可以先[脱机数据库]再做[备份还原]操作, 对, 但你会发现[脱机]处理太慢了J, 那在SQL2005以及SQL 2008下有哪些方法可以解决此问题呢???
USE master
go
IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[p_killspid]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
DROP PROCEDURE [dbo].[p_killspid]
go
create proc p_killspid
@dbname varchar(200) --要关闭进程的数据库名
as
declare @programName nvarchar(200),
@spid nvarchar(20)
declare cDblogin cursor for
select cast(spid as varchar(20)) AS spid from master..sysprocesses where dbid=db_id(@dbname)
open cDblogin
fetch next from cDblogin into @spid
while @@fetch_status=0
begin
--防止自己终止自己的进程
--否则会报错不能用KILL 来终止您自己的进程。
IF @spid <> @@SPID
exec( 'kill '+@spid)
fetch next from cDblogin into @spid
end
close cDblogin
deallocate cDblogin
go
exec p_killspid '数据库名'