有没有办法在MS SQL SERVER中杀死一系列会话ID(连接)?

我想知道是否有办法杀死一个Microsoft SQL数据库的SQL连接范围。

如果我想杀死一个会话ID,我可以使用kill [session-id]; go; kill [session-id]; go;

如果我想杀死所有会话,我可以切换db模式与ALTER DATABASE [DB-NAME] SET SINGLE_USER WITHROLLBACK IMMEDIATE

但是,如果我想要杀死会话ID范围60-100例如,或从一个特定的主机名或特定用户名的所有会话呢? 有一个简单的方法呢? 我没有find与“杀”命令的解决scheme。 有任何想法吗?

我自己实际上不会这样做。 ;)然而。

 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 

(显然,你会事先把这些脚本放在一边。)