SHUTDOWN 立即停止 Microsoft® SQL Server™。语法 SHUTDOWN [ WITH NOWAIT ]参数 WITH NOWAIT立即关闭 SQL Server 而不在每个数据库内执行检查点。在尝试终止所有用户进程后退出 SQL Server,并对每个活动事务执行回滚操作。注释 除非 sysadmin 固定服务器角色成员指定 WITH NOWAIT 选项,否则 SHUTDOWN 尝试关闭 SQL Server 时的顺序方式为: 禁用登录(sysadmin 固定服务器角色成员除外)。若要查看所有当前用户的列表,请执行 sp_who。 等待当前正在执行的 Transact-SQL 语句或存储过程执行完毕。若要查看所有活动进程和锁的列表,请执行 sp_lock 和 sp_who。 在每个数据库内执行检查点。 当 sysadmin 固定服务器角色成员重新启动 SQL Server 时,使用 SHUTDOWN 语句可以将需要做的自动恢复工作减到最小。还可以使用下面这些工具和方法停止 SQL Server。每个工具或方法都在所有数据库内执行检查点。从数据高速缓存中刷新所有提交的数据后,通过下列工具和方法停止服务器: 使用 SQL Server 企业管理器。 在命令提示符下使用 net stop mssqlserver。 使用"控制面板"中的"服务"应用程序。 使用 SQL Server 服务管理器。 如果是从命令提示符下启动的 sqlservr.exe,按 CTRL+C 键可关闭 SQL Server。然而,按 CTRL+C 键将不执行检查点。说明 通过 Server 企业管理器、net stop、控制面板和 SQL Server 服务管理器停止 SQL Server 的方法所生成的服务控制消息与使用 SERVICE_CONTROL_STOP 停止 SQL Server 所生成的相同。 权限 SHUTDOWN 权限默认授予 sysadmin 和 serveradmin 固定服务器角色的成员且不可转让。
--没必要停掉整个 sql server use master --ALTER DATABASE test set online declare @ varchar(200) set @ = '' select @ = @ +' kill '+ cast(spid as varchar) from master..sysprocesses where dbid=db_id('Test') exec(@) ALTER DATABASE test set offline
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 '数据库名'
the best way: alter database db_name set single_user go restore you database go alter database db_name set multi_user go
我是这样地: create PROCEDURE dbo.sp_dropconn @db_name varchar(255) AS /* */ declare @spid int , @execsour varchar(8000) --------------------------------------------------------------------------------------- create table #tmp_login (spid int,ecid int,status varchar(255),loginname varchar(255),hostname varchar(255),blk varchar(255),dbname varchar(255),cmd varchar(255)) insert into #tmp_login exec master..sp_who declare tmp_l cursor for select spid from #tmp_login where dbname=@db_name open tmp_l fetch next from tmp_l into @spid while @@fetch_status=0 begin set @execsour=convert(varchar(300),@spid) set @execsour='kill '+@execsour exec (@execsour ) fetch next from tmp_l into @spid end close tmp_l deallocate tmp_l
ALTER DATABASE test set offline
然后杀掉所有连接进程,
当然最后要自杀!
ALTER DATABASE test set online
restore ....脱机数据库 即可!
重起服务影响其他数据库!
虽有错误,但可以实现
立即停止 Microsoft® SQL Server™。语法
SHUTDOWN [ WITH NOWAIT ]参数
WITH NOWAIT立即关闭 SQL Server 而不在每个数据库内执行检查点。在尝试终止所有用户进程后退出 SQL Server,并对每个活动事务执行回滚操作。注释
除非 sysadmin 固定服务器角色成员指定 WITH NOWAIT 选项,否则 SHUTDOWN 尝试关闭 SQL Server 时的顺序方式为: 禁用登录(sysadmin 固定服务器角色成员除外)。若要查看所有当前用户的列表,请执行 sp_who。
等待当前正在执行的 Transact-SQL 语句或存储过程执行完毕。若要查看所有活动进程和锁的列表,请执行 sp_lock 和 sp_who。
在每个数据库内执行检查点。
当 sysadmin 固定服务器角色成员重新启动 SQL Server 时,使用 SHUTDOWN 语句可以将需要做的自动恢复工作减到最小。还可以使用下面这些工具和方法停止 SQL Server。每个工具或方法都在所有数据库内执行检查点。从数据高速缓存中刷新所有提交的数据后,通过下列工具和方法停止服务器: 使用 SQL Server 企业管理器。
在命令提示符下使用 net stop mssqlserver。
使用"控制面板"中的"服务"应用程序。
使用 SQL Server 服务管理器。
如果是从命令提示符下启动的 sqlservr.exe,按 CTRL+C 键可关闭 SQL Server。然而,按 CTRL+C 键将不执行检查点。说明 通过 Server 企业管理器、net stop、控制面板和 SQL Server 服务管理器停止 SQL Server 的方法所生成的服务控制消息与使用 SERVICE_CONTROL_STOP 停止 SQL Server 所生成的相同。
权限
SHUTDOWN 权限默认授予 sysadmin 和 serveradmin 固定服务器角色的成员且不可转让。
use master
--ALTER DATABASE test set online
declare @ varchar(200)
set @ = ''
select @ = @ +' kill '+ cast(spid as varchar)
from master..sysprocesses
where dbid=db_id('Test')
exec(@)
ALTER DATABASE test set offline
Sorder(剑客)的方案也可以不过,数据库服务器停止的话影响其他数据库
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 '数据库名'
alter database db_name set single_user
go
restore you database
go
alter database db_name set multi_user
go
create PROCEDURE dbo.sp_dropconn
@db_name varchar(255)
AS
/*
*/
declare @spid int
, @execsour varchar(8000)
---------------------------------------------------------------------------------------
create table #tmp_login
(spid int,ecid int,status varchar(255),loginname varchar(255),hostname varchar(255),blk varchar(255),dbname varchar(255),cmd varchar(255))
insert into #tmp_login exec master..sp_who
declare tmp_l cursor for select spid from #tmp_login where dbname=@db_name
open tmp_l
fetch next from tmp_l into @spid
while @@fetch_status=0
begin
set @execsour=convert(varchar(300),@spid)
set @execsour='kill '+@execsour
exec (@execsour ) fetch next from tmp_l into @spid
end
close tmp_l
deallocate tmp_l