如何使用sql杀死会话

时间:2014-02-20 16:28:07

标签: sql-server database tsql casting

你好我有关于演员问题的问题。即使结果来自查询字符串我得到消息102,级别15,状态1,行21 '@session_id'附近的语法不正确。 然后我尝试使用cast方法,但它没有奏效。

declare @counter        int;
declare @session_id     int;

set @counter=0;
select 
    @counter= count(*),
    @session_id=cast(req.session_id as int) from sys.dm_exec_requests req where req.command='DbccSpaceReclaim'group by req.session_id
if(@counter>0)
begin
kill  @session_id 
end

3 个答案:

答案 0 :(得分:2)

尝试以下操作,我使用的是sp_executesql。有关详细信息,请参阅http://technet.microsoft.com/en-us/library/ms188001.aspx

declare @counter        int;
declare @session_id     int;

set @counter=0;
select 
    @counter= count(*),
    @session_id=cast(req.session_id as int) from sys.dm_exec_requests req where req.command='DbccSpaceReclaim'group by req.session_id
if(@counter>0)
begin

declare @sql nvarchar(1000)
select @sql = 'kill ' +  cast(@session_id  as varchar(50))
 exec sp_executesql  @sql
end

答案 1 :(得分:1)

在我的情况下,它不起作用(SQL Server 2008 R2)

DECLARE @sSQL varchar(MAX)
SET @sSQL = 'KILL 58'
EXEC sp_executesql @sSQL

它不会杀死会话

KILL 58

这有效

答案 2 :(得分:0)

您不能直接将变量用作kill命令的参数。

尝试创建一小段动态SQL,然后执行它,如下所示:

DECLARE @sql NVARCHAR(50)

IF(@counter>0)
BEGIN
    SET @sql = 'kill ' + CAST(@session_id AS NVARCHAR)
    EXEC @sql
END

通过执行值kill的{​​{1}}命令,可以获得与您希望相同的结果。