プロセスを強制終了しないように見えるため、次を変更したいと思います-ユーザーを切断することになっていると思います(これは同じですか?)。特定のデータベースのすべてのプロセスを強制終了できるようにしたい - 以下を変更するにはどうすればよいですか:
create procedure [dbo].[sp_killusers](@database varchar(30))
as
----------------------------------------------------
-- * Created By David Wiseman, Updated 19/11/2006
-- * http://www.wisesoft.co.uk
-- * This procedure takes the name of a database as input
-- * and uses the kill statment to disconnect them from
-- * the database.
-- * PLEASE USE WITH CAUTION!!
-- * Usage:
-- * exec sp_killusers 'databasename'
----------------------------------------------------
set nocount on
declare @spid int
declare @killstatement nvarchar(10)
-- Declare a cursor to select the users connected to the specified database
declare c1 cursor for select request_session_id
from sys.dm_tran_locks
where resource_type='DATABASE'
AND DB_NAME(resource_database_id) = @database
open c1
fetch next from c1 into @spid
-- for each spid...
while @@FETCH_STATUS = 0
begin
-- Don't kill the connection of the user executing this statement
IF @@SPID <> @spid
begin
-- Construct dynamic sql to kill spid
set @killstatement = 'KILL ' + cast(@spid as varchar(3))
exec sp_executesql @killstatement
-- Print killed spid
print @spid
end
fetch next from c1 into @spid
end
-- Clean up
close c1
deallocate c1
アップデート
上記は機能しません。つまり、プロセスを強制終了しません。
プロセスを強制終了しません。アクティビティ モニターを見ると、まだプロセスが継続していることを示しており、クエリ ウィンドウでクエリがまだ機能していることがわかります。「kill 53」を実行すると、クエリ ウィンドウでクエリが停止し、プロセスがアクティビティ モニターから消えます。kill は機能しますが、この手順では機能しないのはなぜですか?