我想知道是否有办法终止 Microsoft SQL DB 上的一系列 SQL 连接。
如果我想终止单个会话 ID,我可以使用kill [session-id]; go;
。
如果我想终止所有会话,我可以使用以下命令切换数据库模式ALTER DATABASE [DB-NAME] SET SINGLE_USER WITHROLLBACK IMMEDIATE
但是,如果我想终止会话 ID 范围为 60-100 的会话,或者来自特定主机名或特定用户名的所有会话,该怎么办?有没有简单的方法?我没有找到使用“kill”命令的解决方案。有什么想法吗?
答案1
我实际上不会亲自执行此操作。;)然而。
Declare @procid int,
@SQL nvarchar(max)
SET @procid=60
WHILE @procid < 100
BEGIN
set @SQL='kill ' + CONVERT(nvarchar,@procid)
EXEC SP_EXECUTESQL @SQL
SET @procid=@procid+1
END
对于来自特定主机名或用户名的进程:
DECLARE @Table TABLE(
SPID INT,
Status VARCHAR(MAX),
LOGIN VARCHAR(MAX),
HostName VARCHAR(MAX),
BlkBy VARCHAR(MAX),
DBName VARCHAR(MAX),
Command VARCHAR(MAX),
CPUTime INT,
DiskIO INT,
LastBatch VARCHAR(MAX),
ProgramName VARCHAR(MAX),
SPID_1 INT,
REQUESTID INT
)
Declare @SQL nvarchar(max),
@spid int
INSERT INTO @Table EXEC sp_who2
SELECT @spid = min(SPID) FROM @Table WHERE HostName/Login = 'Whatever'
while @spid is not null
BEGIN
set @SQL='kill ' + convert(nvarchar,@spid)
EXEC SP_EXECUTESQL @SQL
SELECT @spid = min(SPID) FROM @Table WHERE HostName/Login = 'Whatever' and spid > @spid
END
(显然,您事先已经准备好了这些脚本。)