USE master
go
IF OBJECT_ID('tempdb..#temp') IS NOT NULL
DROP TABLE #temp
CREATE TABLE #temp
(
id INT IDENTITY(1, 1)
NOT NULL
,Proc_info NVARCHAR(MAX) NULL
,CONSTRAINT pk_id PRIMARY KEY ( id ASC )
)
--insert data into temp table
INSERT INTO #temp
( Proc_info )
EXEC master..xp_cmdshell 'tasklist /v'
--delete the wrong records
DELETE FROM #temp
WHERE Proc_info IS NULL
OR Proc_info LIKE '%==========%'
OR ID = 2
GO
--create a splite function
CREATE FUNCTION F_split_V2 ( @S NVARCHAR(4000), @i INT )
RETURNS NVARCHAR(100)
AS
BEGIN
IF @i = 1--Image_name
BEGIN
IF PATINDEX('%.exe%', @s) = 0
SET @s = RTRIM(LEFT(@s, PATINDEX('%[0-9]%', @s) - 1))
ELSE
SET @s = RTRIM(LEFT(@s, PATINDEX('%.exe%', @s) + 4))
END
ELSE
IF @i = 2--Pid
BEGIN
IF PATINDEX('%.exe%', @s) = 0
SET @s = STUFF(@s, 1, PATINDEX('%[0-9]%', @s) - 1, '')
ELSE
SET @s = LTRIM(SUBSTRING(@s,
PATINDEX('%.exe%', @s) + 4,
LEN(@s)))
SELECT @s = RTRIM(LEFT(@s, PATINDEX('%[^0-9]%', @s) - 1))
END
ELSE
IF @i = 3--Session_name
BEGIN
IF PATINDEX('%.exe%', @s) = 0
SET @s = STUFF(@s, 1, PATINDEX('%[0-9]%', @s) - 1,
'')
ELSE
SET @s = LTRIM(SUBSTRING(@s,
PATINDEX('%.exe%', @s)
+ 4, LEN(@s)))
SELECT @s = STUFF(@s, 1, PATINDEX('%[^0-9]%', @s) - 1,
'')
,@s = RTRIM(LEFT(@s,
PATINDEX('%[0-9]%', @s) - 1))
END
ELSE
IF @i = 4--Session#
BEGIN
IF PATINDEX('%.exe%', @s) = 0
SET @s = STUFF(@s, 1,
PATINDEX('%[0-9]%', @s) - 1, '')
ELSE
SET @s = LTRIM(SUBSTRING(@s,
PATINDEX('%.exe%', @s)
+ 4, LEN(@s)))
SELECT @s = STUFF(@s, 1,
PATINDEX('%[^0-9]%', @s) - 1,
'')
,@s = STUFF(@s, 1,
PATINDEX('%[0-9]%', @s) - 1, '')
,@s = RTRIM(LEFT(@s,
PATINDEX('% %', @s) - 1))
END
ELSE
IF @i = 5--memory
BEGIN
IF PATINDEX('%.exe%', @s) = 0
SET @s = STUFF(@s, 1,
PATINDEX('%[0-9]%', @s) - 1,
'')
ELSE
SET @s = LTRIM(SUBSTRING(@s,
PATINDEX('%.exe%',
@s) + 4, LEN(@s)))
SELECT @s = STUFF(@s, 1,
PATINDEX('%[0-9]%', @s) - 1,
'')
,@s = STUFF(@s, 1,
PATINDEX('%[^0-9]%', @s)
- 1, '')
,@s = STUFF(@s, 1,
PATINDEX('%[0-9]%', @s) - 1,
'')
,@s = STUFF(@s, 1,
PATINDEX('%[1-9]%', @s) - 1,
'')
,@s = RTRIM(LEFT(@s,
PATINDEX('%k%', @s)
- 1))
END
ELSE
IF @i = 6--user_name
SELECT @s = STUFF(@s, 1,
PATINDEX('%[0-9]%', @s) - 1,
'')
,@s = STUFF(@s, 1,
PATINDEX('%[^0-9]%', @s)
- 1, '')
,@s = STUFF(@s, 1,
PATINDEX('%[0-9]%', @s) - 1,
'')
,@s = STUFF(@s, 1,
PATINDEX('%[1-9]%', @s) - 1,
'')
,@s = RTRIM(SUBSTRING(@s,
PATINDEX('%\%',
@s) + 1, 18))
ELSE
IF @i = 7--cup_time
SELECT @s = SUBSTRING(@s,
PATINDEX('%[0-9]:[0-9][0-9]:[0-9][0-9]%',
@s), 8)
ELSE
SELECT @s = RIGHT(@s,
CHARINDEX(' ',
REVERSE(@s), 3)
- 1)
RETURN @s
END
go
SELECT dbo.F_split_V2(Proc_info, 1) AS image_name
,dbo.F_split_V2(Proc_info, 2) AS PID
,dbo.F_split_V2(Proc_info, 3) AS session_name
,dbo.F_split_V2(Proc_info, 4) AS session#
,dbo.F_split_V2(Proc_info, 5) + 'K' AS Memory
,dbo.F_split_V2(Proc_info, 6) AS User_name
,dbo.F_split_V2(Proc_info, 7) AS cpu_time
,'xp_cmdshell ''taskkill -IM ' + dbo.F_split_V2(Proc_info, 1) + ' /f''' AS script
FROM #temp