Sql server 可能会从存储过程中杀死正常的Windows进程(这将是相当奇怪的,考虑编写一个应用程序)。我正在讨论SQL Server和SQL Server中的进程。正在尝试在SQL Server而不是windows中终止进程/查询。请打开SQL探查器。在服务器上创建跟

Sql server 可能会从存储过程中杀死正常的Windows进程(这将是相当奇怪的,考虑编写一个应用程序)。我正在讨论SQL Server和SQL Server中的进程。正在尝试在SQL Server而不是windows中终止进程/查询。请打开SQL探查器。在服务器上创建跟,sql-server,process,kill,Sql Server,Process,Kill,可能会从存储过程中杀死正常的Windows进程(这将是相当奇怪的,考虑编写一个应用程序)。我正在讨论SQL Server和SQL Server中的进程。正在尝试在SQL Server而不是windows中终止进程/查询。请打开SQL探查器。在服务器上创建跟踪。捕获上述脚本的事件。将错误消息放在这里,我们将告诉您发生了什么或没有发生什么。没有这些信息,我们无法帮助您。 create procedure [dbo].[sp_killusers](@database varchar(30)) as -


可能会从存储过程中杀死正常的Windows进程(这将是相当奇怪的,考虑编写一个应用程序)。我正在讨论SQL Server和SQL Server中的进程。正在尝试在SQL Server而不是windows中终止进程/查询。请打开SQL探查器。在服务器上创建跟踪。捕获上述脚本的事件。将错误消息放在这里,我们将告诉您发生了什么或没有发生什么。没有这些信息,我们无法帮助您。
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
SET @killstatement = 'KILL ' + cast(@spid as varchar(3)) 
EXEC (@killstatement)
-- Construct dynamic sql to kill spid
select  @killstatement = N'
            select  *
            from    sys.dm_exec_sessions s
            join    sys.dm_exec_connections c
            on      s.session_id = c.session_id
            where   c.session_id = @spid;

            kill ' + cast(@spid as varchar(3)) + ';

            select  *
            from    sys.dm_exec_sessions s
            join    sys.dm_exec_connections c
            on      s.session_id = c.session_id
            where   c.session_id = @spid;           
        ';
-- Print & Exec
print @killstatement;
exec sp_executesql @killstatement, N'@spid smallint', @spid;
print @spid;
declare c1 cursor for select request_session_id
                                from sys.dm_tran_locks
                                    where resource_type='DATABASE'
                                    AND DB_NAME(resource_database_id) = @database

-- Debug output - sessions we should try and kill...
select  request_session_id
from    sys.dm_tran_locks
where   resource_type='DATABASE'
AND     DB_NAME(resource_database_id) = @database;
ALTER DATABASE myDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
ALTER DATABASE myDB SET MULTI_USER;
DECLARE @DbName VARCHAR(100)
DECLARE @SPID INT
DECLARE @TranUOW UNIQUEIDENTIFIER
DECLARE @KillStmt NVARCHAR(100)

SET @DbName = 'MyDatabase'

-----------------------------------
-- Kill distributed transactions

DECLARE dist CURSOR FOR
    SELECT DISTINCT req_transactionUOW
        FROM master..syslockinfo
        WHERE db_name(rsc_dbid) = @DbName
              AND req_transactionUOW <> '00000000-0000-0000-0000-000000000000'

OPEN dist

FETCH NEXT FROM dist INTO @TranUOW

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @KillStmt = 'kill ''' + CAST(@TranUOW AS VARCHAR(50)) + ''''

    PRINT @KillStmt
    EXECUTE(@KillStmt)

    FETCH NEXT FROM dist INTO @TranUOW
END

CLOSE dist
DEALLOCATE dist

-----------------------------------
-- Kill user connections

DECLARE cur CURSOR FOR
    SELECT spid
        FROM master..sysprocesses
        WHERE db_name(dbid) = @DbName
              AND spid > 50

OPEN cur

FETCH NEXT FROM cur INTO @SPID

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @KillStmt = 'kill ' + CAST(@SPID AS VARCHAR(10))

    PRINT @KillStmt
    EXECUTE(@KillStmt)

    FETCH NEXT FROM cur INTO @SPID
END

CLOSE cur
DEALLOCATE cur