sql server 结束指定数据库所有进程

这篇博客提供了一个存储过程`StopLogin`,用于在SQL Server中结束指定数据库的所有进程。如果未指定数据库,则默认结束除`master`数据库外的所有数据库进程。作者通过游标和动态SQL实现该功能,确保所有相关连接被终止。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

USE [master]
GO
/****** Object:  StoredProcedure [dbo].[StopLogin]    Script Date: 2015/5/7 9:15:48 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
 -- =============================================
-- Author: 李晓蒙
-- Create date: 2015-05-05
-- Description: 结束指定数据库的所有进程,如未指定,则结束掉除master库以外所有库进程
-- =============================================
ALTER PROCEDURE [dbo].[StopLogin] @Dname VARCHAR(50)
AS 
    DECLARE @name VARCHAR(50) ,
        @s VARCHAR(1000)
    BEGIN
        IF ( @Dname = '' ) 
            BEGIN
                DECLARE DataName CURSOR
                FOR
                    SELECT  name
                    FROM    sysdatabases
                    WHERE   name NOT IN ( 'master' )
                OPEN DataName
                FETCH NEXT FROM DataName
       INTO @name
                WHILE ( @@FETCH_STATUS = 0 ) 
                    BEGIN  
                        DECLARE tb CURSOR local
                        FOR
                            SELECT  N'kill   ' + CAST(spid AS VARCHAR)
                            FROM    master..sysprocesses
                            WHERE   dbid = DB_ID(@name)  
                        OPEN tb    
                        FETCH NEXT FROM tb INTO @s  
                        WHILE @@FETCH_STATUS = 0 
                            BEGIN  
                                EXEC(@s)  
                                FETCH NEXT FROM tb INTO @s  
                            END  
                        CLOSE tb  
                        DEALLOCATE tb
                   
                        FETCH NEXT FROM DataName
           INTO @name
                    END
                CLOSE DataName
                DEALLOCATE DataName
            END
        ELSE 
            BEGIN
                DECLARE tb CURSOR local
                FOR
                    SELECT  N'kill   ' + CAST(spid AS VARCHAR)
                    FROM    master..sysprocesses
                    WHERE   dbid = DB_ID(@Dname)  
                OPEN tb   
                FETCH NEXT FROM tb INTO @s 
                WHILE @@FETCH_STATUS = 0 
                    BEGIN  
                        EXEC(@s)  
                        FETCH NEXT FROM tb INTO @s  
                    END  
                CLOSE tb  
                DEALLOCATE tb
            END
    END
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值