你好我有关于演员问题的问题。即使结果来自查询字符串我得到消息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
答案 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}}命令,可以获得与您希望相同的结果。