use  master 
go
create  proc  killspid  (@dbname  varchar(20))  
as  
begin  
declare  @sql  nvarchar(500),@temp varchar(1000)
declare  @spid  int  
set  @sql='declare  getspid  cursor  for    
select  spid  from  sysprocesses  where  dbid=db_id('''+@dbname+''')'  
exec  (@sql)  
open  getspid  
fetch  next  from  getspid  into  @spid  
while  @@fetch_status  <  >-1  
begin  
  set @temp='kill  '+rtrim(@spid)
  exec(@temp)
fetch  next  from  getspid  into  @spid  
end  
close  getspid  
deallocate  getspid  
end  --用法  
use  master  
exec  killspid  '数据库名'

解决方案 »

  1.   

    SQL里没有提供这个功能,但是可以用变通的方法实现,1、创建一个SA以外的用户,
    2、在应用程序端已这个用户对数据进行访问
    3、要暂停访问的时候,将这个用户对某个库的访问权限去掉,这样,就没有用户可以访问
       你 要备份还原的数据库了,除了SA外
    4、你用SA用户登陆,进行数据库备份还原操作测试通过
      

  2.   

    txlicenhe(马可&不做技术高手) 的方法可以做到暂停一次,但是如果你的数据库是实施访问比较频繁的话,是实现不了的,同时数据库也备份还原不了
      

  3.   

    TO:CrazyFor(蚂蚁) 
    数据库分离或脱机。有用户访问不可脱机。
      

  4.   

    TO:txlicenhe(马可&不做技术高手)
    老大,用你的方法实现了。可否请教,为何用@SQL 和@TEMP 两个
    变量存储命令,直接运行不行吗???
      

  5.   

    进入企业管理器=》实例名=》数据库名=》右键=》属性=》选项面板=》访问=》限制访问,这样一般用户都访问不了,你就可以把它Detach,恢复。;)
      

  6.   

    TO:txlicenhe(马可&不做技术高手)
    是不是和事务的执行有关?
      

  7.   

    用@SQL 和@TEMP 两个
    变量存储命令,直接运行不行吗???因为直接写不支持啊.