CREATE procedure aip_Blocks
@inTable int = null
as
--kill @SPID
/*
в ALADA_TEST
begin tran
update schN_ set From_ = 11 where D_Reg='20161114 15:54:35.690'
select top 11 *from schn_ order by 1 desc
*/
DECLARE @Table TABLE( SPID INT, Status VARCHAR(MAX), LOGIN VARCHAR(MAX), HostName VARCHAR(MAX), BlkBy VARCHAR(MAX), DBName VARCHAR(MAX), Command VARCHAR(MAX), CPUTime INT, DiskIO INT, LastBatch VARCHAR(MAX), ProgramName VARCHAR(MAX), SPID_1 INT, REQUESTID INT)
INSERT INTO @Table EXEC sp_who2
--SELECT DISTINCT BlkBy FROM @Table
--where BlkBy>0
DECLARE @Res TABLE (SPID int, T varchar(4000))
DECLARE @SPID int
DECLARE curs cursor for
select
BlkBy
from
(
SELECT DISTINCT
case
when ltrim(rtrim(p.BlkBy))<>'.' --and p.BlkBy not like '%[^0-9]%'
then cast(ltrim(rtrim(p.BlkBy)) as int)
else
0
end BlkBy
FROM @Table p
where DBName = DB_NAME()
) p
where BlkBy>0
open curs
while 0=0
begin
fetch from curs into @SPID
if @@Fetch_Status<>0 break
DECLARE @sql_handle binary(20), @stmt_start int, @stmt_end int
SELECT @sql_handle = sql_handle, @stmt_start = stmt_start/2, @stmt_end = CASE WHEN stmt_end = -1 THEN -1 ELSE stmt_end/2 END
FROM master.dbo.sysprocesses
WHERE spid = @SPID AND ecid = 0
DECLARE @line nvarchar(4000)
SET @line = (SELECT SUBSTRING([text], COALESCE(NULLIF(@stmt_start, 0), 1),
CASE @stmt_end WHEN -1 THEN DATALENGTH([text]) ELSE (@stmt_end - @stmt_start) END) FROM ::fn_get_sql(@sql_handle))
if @inTable = 1
insert tblBlocks(SPID,T,DT) values(@SPID,@line,GetDate())
else
insert @Res(SPID,T) values(@SPID,@line)
end
close curs
deallocate curs
if isnull(@inTable,0)<>1
Select * from @Res
--SELECT * FROM @Table
|