BEGIN TRY
DECLARE @ReturnInfo NVARCHAR(1000) = 'KILL必要のプロセスなし'
IF EXISTS(SELECT * FROM MASTER.SYS.SYSPROCESSES WHERE SPID IN (SELECT BLOCKED FROM MASTER.SYS.SYSPROCESSES WHERE STATUS = 'suspended'))
BEGIN
DECLARE @SPID NVARCHAR(20) = '0'
DECLARE @STATUS NVARCHAR(20) = ''
DECLARE @LOG_NAME NVARCHAR(50) = ''
DECLARE @HOSTNAME NVARCHAR(50) = ''
DECLARE @BLOCKED NVARCHAR(10) = ''
DECLARE @DB_NAME NVARCHAR(50) = ''
DECLARE @CMD NVARCHAR(10) = ''
DECLARE @SQL NVARCHAR(255) = ''
DECLARE @WAIT_TYPE NVARCHAR(25) = ''
DECLARE @LAST_BATCH NVARCHAR(30) = ''
DECLARE @OPEN_TRAN NVARCHAR(1) = ''
SELECT
@SPID = ER.SPID
,@STATUS = ER.[STATUS]
,@LOG_NAME = ER.LOGINAME
,@HOSTNAME = ER.HOSTNAME
,@BLOCKED = CONVERT(CHAR(3),ER.BLOCKED)
,@DB_NAME = SUBSTRING(DB_NAME(ER.DBID),1,20)
,@CMD = ER.CMD
,@SQL = CSQL.[TEXT]
,@WAIT_TYPE = ER.WAITTYPE
,@LAST_BATCH = ER.LAST_BATCH
,@OPEN_TRAN = ER.OPEN_TRAN
FROM MASTER.SYS.SYSPROCESSES ER
CROSS APPLY FN_GET_SQL (ER.SQL_HANDLE) CSQL
WHERE
ER.SPID IN (SELECT BLOCKED FROM MASTER.SYS.SYSPROCESSES)
AND ER.BLOCKED = 0
AND ER.LOGINAME LIKE('INTRA2008\%')
IF @SPID <> '0' AND ISNULL(@SPID,'') <> ''
BEGIN
EXEC('KILL ' + @SPID)
SET @ReturnInfo = 'KILL成功 プロセス:' + @SPID + ' 状態: ' + @STATUS + ' 登録番号:' + @LOG_NAME + ' ユーザコンピューター名称:' + @HOSTNAME + ' ロック:' + @BLOCKED
+ ' DB名称:' + @DB_NAME + ' 命令:' + @CMD + ' SQL文:' + @SQL + ' 待ちタイプ:' + @WAIT_TYPE + ' 最後処理時間:' + @LAST_BATCH
+ ' 未提出事務数量:' + @OPEN_TRAN
END
END
RETURN @ReturnInfo
END TRY
BEGIN CATCH
SET @ReturnInfo = 'KILL失敗 LINE:'+CONVERT(NVARCHAR,ERROR_LINE())+' NUMBER:'+CONVERT(NVARCHAR,ERROR_NUMBER())+' MESSAGE:'+ERROR_MESSAGE();
RETURN @ReturnInfo
END CATCH
浙公网安备 33010602011771号