2014-02-20 64 views
2

您好,我有關於投射問題的問題。即使結果來自查詢作爲字符串,我得到消息102,級別15,狀態1,行21 '@session_id'附近語法不正確。 然後我試圖使用投射法,但它沒有奏效。如何使用tsql來終止會話

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

http://stackoverflow.com/questions/15010689/using-kill-with-a-declared-variable可能的重複 –

回答

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 
0

您不能直接使用變量作爲kill命令的參數。

嘗試創建一個小塊的動態SQL,然後執行它,如下所示:

DECLARE @sql NVARCHAR(50) 

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

這實現了相同的結果,你用的@session_id值執行kill命令的願望。

0

對我來說,這是行不通的(SQL Server 2008 R2中)

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

它不會終止會話


KILL 58 

該作品