diff --git a/PERFS - poor queries.sql b/PERFS - poor queries.sql index 2bfd07d..b84e0aa 100644 --- a/PERFS - poor queries.sql +++ b/PERFS - poor queries.sql @@ -1,152 +1,152 @@ -SELECT TOP 100 - 'longest query' AS msg, - GETDATE() AS [Collection Date], - [qs].[execution_count] AS [Execution Count], - SUBSTRING( - [qt].[text], - [qs].[statement_start_offset] / 2 + 1, - (CASE - WHEN [qs].[statement_end_offset] = -1 THEN - LEN(CONVERT(NVARCHAR(MAX), [qt].[text])) * 2 - ELSE - [qs].[statement_end_offset] - END - [qs].[statement_start_offset] - ) / 2 - ) AS [Query Text], - DB_NAME([qt].[dbid]) AS [DB Name], - [qs].[total_worker_time] AS [Total CPU Time], - [qs].[total_worker_time] / [qs].[execution_count] AS [Avg CPU Time (ms)], - [qs].[total_physical_reads] AS [Total Physical Reads], - [qs].[total_physical_reads] / [qs].[execution_count] AS [Avg Physical Reads], - [qs].[total_logical_reads] AS [Total Logical Reads], - [qs].[total_logical_reads] / [qs].[execution_count] AS [Avg Logical Reads], - [qs].[total_logical_writes] AS [Total Logical Writes], - [qs].[total_logical_writes] / [qs].[execution_count] AS [Avg Logical Writes], - [qs].[total_elapsed_time] AS [Total Duration], - [qs].[total_elapsed_time] / 1000000.0 AS [Total Duration seconds], - [qs].[total_elapsed_time] / [qs].[execution_count] / 1000000.0 AS [Avg Duration seconds], - [qp].[query_plan] AS [Plan], - [qs].[creation_time], - [qs].[last_execution_time] -FROM [sys].[dm_exec_query_stats] AS [qs] - CROSS APPLY [sys].dm_exec_sql_text([qs].[sql_handle]) AS [qt] - CROSS APPLY [sys].dm_exec_query_plan([qs].[plan_handle]) AS [qp] -WHERE ---/* most often used */ [qs].[execution_count] > 50 ---/* most CPU intensive */ [qs].[total_worker_time] / [qs].[execution_count] > 100 --[Avg CPU Time (ms)] ---/* most read IO */ [qs].[total_physical_reads] / [qs].[execution_count] > 1000 --[Avg Physical Reads] ---/* most intesive in reads */ [qs].[total_logical_reads] / [qs].[execution_count] > 1000 --[Avg Logical Reads] ---/* most IO intensive in write */ [qs].[total_logical_writes] / [qs].[execution_count] > 1000 --[Avg Logical Writes] -/* longest queries */ [qs].[total_elapsed_time] / [qs].[execution_count] > 1000 --[Avg Duration (ms)] -AND DB_NAME([qt].[dbid]) NOT IN ( 'master', 'msdb', 'model', 'tempDb' ) -ORDER BY ---[Avg Logical Reads] DESC ---[qs].[execution_count] DESC ---,[qs].[total_worker_time] / [qs].[execution_count] DESC ---,[qs].[total_physical_reads] / [qs].[execution_count] DESC ---,[qs].[total_logical_reads] / [qs].[execution_count] DESC ---,[qs].[total_logical_writes] / [qs].[execution_count] DESC; -/* average duration */ [qs].[total_elapsed_time] / [qs].[execution_count] DESC; - - -SELECT TOP 100 - 'most cpu' AS msg, - GETDATE() AS [Collection Date], - [qs].[execution_count] AS [Execution Count], - SUBSTRING( - [qt].[text], - [qs].[statement_start_offset] / 2 + 1, - (CASE - WHEN [qs].[statement_end_offset] = -1 THEN - LEN(CONVERT(NVARCHAR(MAX), [qt].[text])) * 2 - ELSE - [qs].[statement_end_offset] - END - [qs].[statement_start_offset] - ) / 2 - ) AS [Query Text], - DB_NAME([qt].[dbid]) AS [DB Name], - [qs].[total_worker_time] AS [Total CPU Time], - [qs].[total_worker_time] / [qs].[execution_count] AS [Avg CPU Time (ms)], - [qs].[total_physical_reads] AS [Total Physical Reads], - [qs].[total_physical_reads] / [qs].[execution_count] AS [Avg Physical Reads], - [qs].[total_logical_reads] AS [Total Logical Reads], - [qs].[total_logical_reads] / [qs].[execution_count] AS [Avg Logical Reads], - [qs].[total_logical_writes] AS [Total Logical Writes], - [qs].[total_logical_writes] / [qs].[execution_count] AS [Avg Logical Writes], - [qs].[total_elapsed_time] AS [Total Duration], - [qs].[total_elapsed_time] / 1000000.0 AS [Total Duration seconds], - [qs].[total_elapsed_time] / [qs].[execution_count] / 1000000.0 AS [Avg Duration seconds], - [qp].[query_plan] AS [Plan], - [qs].[creation_time], - [qs].[last_execution_time] -FROM [sys].[dm_exec_query_stats] AS [qs] - CROSS APPLY [sys].dm_exec_sql_text([qs].[sql_handle]) AS [qt] - CROSS APPLY [sys].dm_exec_query_plan([qs].[plan_handle]) AS [qp] -WHERE ---/* most often used */ [qs].[execution_count] > 50 -/* most CPU intensive */ [qs].[total_worker_time] / [qs].[execution_count] > 100 --[Avg CPU Time (ms)] ---/* most read IO */ [qs].[total_physical_reads] / [qs].[execution_count] > 1000 --[Avg Physical Reads] ---/* most intesive in reads */ [qs].[total_logical_reads] / [qs].[execution_count] > 1000 --[Avg Logical Reads] ---/* most IO intensive in write */ [qs].[total_logical_writes] / [qs].[execution_count] > 1000 --[Avg Logical Writes] ---/* longest queries */[qs].[total_elapsed_time] / [qs].[execution_count] > 1000 --[Avg Duration (ms)] -AND DB_NAME([qt].[dbid]) NOT IN ( 'master', 'msdb', 'model', 'tempDb' ) -ORDER BY ---[Avg Logical Reads] DESC ---[qs].[execution_count] DESC -/* cpu intensive */ [qs].[total_worker_time] / [qs].[execution_count] DESC; ---,[qs].[total_physical_reads] / [qs].[execution_count] DESC ---,[qs].[total_logical_reads] / [qs].[execution_count] DESC ---,[qs].[total_logical_writes] / [qs].[execution_count] DESC; ---/* average duration */,[qs].[total_elapsed_time] / [qs].[execution_count] DESC - - -SELECT TOP 100 - 'most physical reads' AS msg, - GETDATE() AS [Collection Date], - [qs].[execution_count] AS [Execution Count], - SUBSTRING( - [qt].[text], - [qs].[statement_start_offset] / 2 + 1, - (CASE - WHEN [qs].[statement_end_offset] = -1 THEN - LEN(CONVERT(NVARCHAR(MAX), [qt].[text])) * 2 - ELSE - [qs].[statement_end_offset] - END - [qs].[statement_start_offset] - ) / 2 - ) AS [Query Text], - DB_NAME([qt].[dbid]) AS [DB Name], - [qs].[total_worker_time] AS [Total CPU Time], - [qs].[total_worker_time] / [qs].[execution_count] AS [Avg CPU Time (ms)], - [qs].[total_physical_reads] AS [Total Physical Reads], - [qs].[total_physical_reads] / [qs].[execution_count] AS [Avg Physical Reads], - [qs].[total_logical_reads] AS [Total Logical Reads], - [qs].[total_logical_reads] / [qs].[execution_count] AS [Avg Logical Reads], - [qs].[total_logical_writes] AS [Total Logical Writes], - [qs].[total_logical_writes] / [qs].[execution_count] AS [Avg Logical Writes], - [qs].[total_elapsed_time] AS [Total Duration], - [qs].[total_elapsed_time] / 1000000.0 AS [Total Duration seconds], - [qs].[total_elapsed_time] / [qs].[execution_count] / 1000000.0 AS [Avg Duration seconds], - [qp].[query_plan] AS [Plan], - [qs].[creation_time], - [qs].[last_execution_time] -FROM [sys].[dm_exec_query_stats] AS [qs] - CROSS APPLY [sys].dm_exec_sql_text([qs].[sql_handle]) AS [qt] - CROSS APPLY [sys].dm_exec_query_plan([qs].[plan_handle]) AS [qp] -WHERE ---/* most often used */ [qs].[execution_count] > 50 ---/* most CPU intensive */ [qs].[total_worker_time] / [qs].[execution_count] > 100 --[Avg CPU Time (ms)] -/* most read IO */ [qs].[total_physical_reads] / [qs].[execution_count] > 1000 --[Avg Physical Reads] ---/* most intesive in reads */ [qs].[total_logical_reads] / [qs].[execution_count] > 1000 --[Avg Logical Reads] ---/* most IO intensive in write */ [qs].[total_logical_writes] / [qs].[execution_count] > 1000 --[Avg Logical Writes] ---/* longest queries */[qs].[total_elapsed_time] / [qs].[execution_count] > 1000 --[Avg Duration (ms)] -AND DB_NAME([qt].[dbid]) NOT IN ( 'master', 'msdb', 'model', 'tempDb' ) -ORDER BY ---[Avg Logical Reads] DESC ---[qs].[execution_count] DESC ---,[qs].[total_worker_time] / [qs].[execution_count] DESC -/* most disk activity */ [qs].[total_physical_reads] / [qs].[execution_count] DESC; ---,[qs].[total_logical_reads] / [qs].[execution_count] DESC ---,[qs].[total_logical_writes] / [qs].[execution_count] DESC; ---/* average duration */,[qs].[total_elapsed_time] / [qs].[execution_count] DESC - +SELECT TOP 100 + 'longest query' AS msg, + GETDATE() AS [Collection Date], + [qs].[execution_count] AS [Execution Count], + SUBSTRING( + [qt].[text], + [qs].[statement_start_offset] / 2 + 1, + (CASE + WHEN [qs].[statement_end_offset] = -1 THEN + LEN(CONVERT(NVARCHAR(MAX), [qt].[text])) * 2 + ELSE + [qs].[statement_end_offset] + END - [qs].[statement_start_offset] + ) / 2 + ) AS [Query Text], + DB_NAME([qt].[dbid]) AS [DB Name], + [qs].[total_worker_time] AS [Total CPU Time], + [qs].[total_worker_time] / [qs].[execution_count] AS [Avg CPU Time (ms)], + [qs].[total_physical_reads] AS [Total Physical Reads], + [qs].[total_physical_reads] / [qs].[execution_count] AS [Avg Physical Reads], + [qs].[total_logical_reads] AS [Total Logical Reads], + [qs].[total_logical_reads] / [qs].[execution_count] AS [Avg Logical Reads], + [qs].[total_logical_writes] AS [Total Logical Writes], + [qs].[total_logical_writes] / [qs].[execution_count] AS [Avg Logical Writes], + [qs].[total_elapsed_time] AS [Total Duration], + [qs].[total_elapsed_time] / 1000000.0 AS [Total Duration seconds], + [qs].[total_elapsed_time] / [qs].[execution_count] / 1000000.0 AS [Avg Duration seconds], + [qp].[query_plan] AS [Plan], + [qs].[creation_time], + [qs].[last_execution_time] +FROM [sys].[dm_exec_query_stats] AS [qs] + CROSS APPLY [sys].dm_exec_sql_text([qs].[sql_handle]) AS [qt] + CROSS APPLY [sys].dm_exec_query_plan([qs].[plan_handle]) AS [qp] +WHERE +--/* most often used */ [qs].[execution_count] > 50 +--/* most CPU intensive */ [qs].[total_worker_time] / [qs].[execution_count] > 100 --[Avg CPU Time (ms)] +--/* most read IO */ [qs].[total_physical_reads] / [qs].[execution_count] > 1000 --[Avg Physical Reads] +--/* most intesive in reads */ [qs].[total_logical_reads] / [qs].[execution_count] > 1000 --[Avg Logical Reads] +--/* most IO intensive in write */ [qs].[total_logical_writes] / [qs].[execution_count] > 1000 --[Avg Logical Writes] +/* longest queries */ [qs].[total_elapsed_time] / [qs].[execution_count] > 1000 --[Avg Duration (ms)] +AND DB_NAME([qt].[dbid]) NOT IN ( 'master', 'msdb', 'model', 'tempDb' ) +ORDER BY +--[Avg Logical Reads] DESC +--[qs].[execution_count] DESC +--,[qs].[total_worker_time] / [qs].[execution_count] DESC +--,[qs].[total_physical_reads] / [qs].[execution_count] DESC +--,[qs].[total_logical_reads] / [qs].[execution_count] DESC +--,[qs].[total_logical_writes] / [qs].[execution_count] DESC; +/* average duration */ [qs].[total_elapsed_time] / [qs].[execution_count] DESC; + + +SELECT TOP 100 + 'most cpu' AS msg, + GETDATE() AS [Collection Date], + [qs].[execution_count] AS [Execution Count], + SUBSTRING( + [qt].[text], + [qs].[statement_start_offset] / 2 + 1, + (CASE + WHEN [qs].[statement_end_offset] = -1 THEN + LEN(CONVERT(NVARCHAR(MAX), [qt].[text])) * 2 + ELSE + [qs].[statement_end_offset] + END - [qs].[statement_start_offset] + ) / 2 + ) AS [Query Text], + DB_NAME([qt].[dbid]) AS [DB Name], + [qs].[total_worker_time] AS [Total CPU Time], + [qs].[total_worker_time] / [qs].[execution_count] AS [Avg CPU Time (ms)], + [qs].[total_physical_reads] AS [Total Physical Reads], + [qs].[total_physical_reads] / [qs].[execution_count] AS [Avg Physical Reads], + [qs].[total_logical_reads] AS [Total Logical Reads], + [qs].[total_logical_reads] / [qs].[execution_count] AS [Avg Logical Reads], + [qs].[total_logical_writes] AS [Total Logical Writes], + [qs].[total_logical_writes] / [qs].[execution_count] AS [Avg Logical Writes], + [qs].[total_elapsed_time] AS [Total Duration], + [qs].[total_elapsed_time] / 1000000.0 AS [Total Duration seconds], + [qs].[total_elapsed_time] / [qs].[execution_count] / 1000000.0 AS [Avg Duration seconds], + [qp].[query_plan] AS [Plan], + [qs].[creation_time], + [qs].[last_execution_time] +FROM [sys].[dm_exec_query_stats] AS [qs] + CROSS APPLY [sys].dm_exec_sql_text([qs].[sql_handle]) AS [qt] + CROSS APPLY [sys].dm_exec_query_plan([qs].[plan_handle]) AS [qp] +WHERE +--/* most often used */ [qs].[execution_count] > 50 +/* most CPU intensive */ [qs].[total_worker_time] / [qs].[execution_count] > 100 --[Avg CPU Time (ms)] +--/* most read IO */ [qs].[total_physical_reads] / [qs].[execution_count] > 1000 --[Avg Physical Reads] +--/* most intesive in reads */ [qs].[total_logical_reads] / [qs].[execution_count] > 1000 --[Avg Logical Reads] +--/* most IO intensive in write */ [qs].[total_logical_writes] / [qs].[execution_count] > 1000 --[Avg Logical Writes] +--/* longest queries */[qs].[total_elapsed_time] / [qs].[execution_count] > 1000 --[Avg Duration (ms)] +AND DB_NAME([qt].[dbid]) NOT IN ( 'master', 'msdb', 'model', 'tempDb' ) +ORDER BY +--[Avg Logical Reads] DESC +--[qs].[execution_count] DESC +/* cpu intensive */ [qs].[total_worker_time] / [qs].[execution_count] DESC; +--,[qs].[total_physical_reads] / [qs].[execution_count] DESC +--,[qs].[total_logical_reads] / [qs].[execution_count] DESC +--,[qs].[total_logical_writes] / [qs].[execution_count] DESC; +--/* average duration */,[qs].[total_elapsed_time] / [qs].[execution_count] DESC + + +SELECT TOP 100 + 'most physical reads' AS msg, + GETDATE() AS [Collection Date], + [qs].[execution_count] AS [Execution Count], + SUBSTRING( + [qt].[text], + [qs].[statement_start_offset] / 2 + 1, + (CASE + WHEN [qs].[statement_end_offset] = -1 THEN + LEN(CONVERT(NVARCHAR(MAX), [qt].[text])) * 2 + ELSE + [qs].[statement_end_offset] + END - [qs].[statement_start_offset] + ) / 2 + ) AS [Query Text], + DB_NAME([qt].[dbid]) AS [DB Name], + [qs].[total_worker_time] AS [Total CPU Time], + [qs].[total_worker_time] / [qs].[execution_count] AS [Avg CPU Time (ms)], + [qs].[total_physical_reads] AS [Total Physical Reads], + [qs].[total_physical_reads] / [qs].[execution_count] AS [Avg Physical Reads], + [qs].[total_logical_reads] AS [Total Logical Reads], + [qs].[total_logical_reads] / [qs].[execution_count] AS [Avg Logical Reads], + [qs].[total_logical_writes] AS [Total Logical Writes], + [qs].[total_logical_writes] / [qs].[execution_count] AS [Avg Logical Writes], + [qs].[total_elapsed_time] AS [Total Duration], + [qs].[total_elapsed_time] / 1000000.0 AS [Total Duration seconds], + [qs].[total_elapsed_time] / [qs].[execution_count] / 1000000.0 AS [Avg Duration seconds], + [qp].[query_plan] AS [Plan], + [qs].[creation_time], + [qs].[last_execution_time] +FROM [sys].[dm_exec_query_stats] AS [qs] + CROSS APPLY [sys].dm_exec_sql_text([qs].[sql_handle]) AS [qt] + CROSS APPLY [sys].dm_exec_query_plan([qs].[plan_handle]) AS [qp] +WHERE +--/* most often used */ [qs].[execution_count] > 50 +--/* most CPU intensive */ [qs].[total_worker_time] / [qs].[execution_count] > 100 --[Avg CPU Time (ms)] +/* most read IO */ [qs].[total_physical_reads] / [qs].[execution_count] > 1000 --[Avg Physical Reads] +--/* most intesive in reads */ [qs].[total_logical_reads] / [qs].[execution_count] > 1000 --[Avg Logical Reads] +--/* most IO intensive in write */ [qs].[total_logical_writes] / [qs].[execution_count] > 1000 --[Avg Logical Writes] +--/* longest queries */[qs].[total_elapsed_time] / [qs].[execution_count] > 1000 --[Avg Duration (ms)] +AND DB_NAME([qt].[dbid]) NOT IN ( 'master', 'msdb', 'model', 'tempDb' ) +ORDER BY +--[Avg Logical Reads] DESC +--[qs].[execution_count] DESC +--,[qs].[total_worker_time] / [qs].[execution_count] DESC +/* most disk activity */ [qs].[total_physical_reads] / [qs].[execution_count] DESC; +--,[qs].[total_logical_reads] / [qs].[execution_count] DESC +--,[qs].[total_logical_writes] / [qs].[execution_count] DESC; +--/* average duration */,[qs].[total_elapsed_time] / [qs].[execution_count] DESC + diff --git a/POS-2e06e4b5-85f0-4493-b17d-67a332f9e634.json b/POS-2e06e4b5-85f0-4493-b17d-67a332f9e634.json index 5bfe631..b71cf3a 100644 --- a/POS-2e06e4b5-85f0-4493-b17d-67a332f9e634.json +++ b/POS-2e06e4b5-85f0-4493-b17d-67a332f9e634.json @@ -1,6 +1,6 @@ -{ - "id": "2e06e4b5-85f0-4493-b17d-67a332f9e634", - "prefix": "POS", - "description": "list all POS", - "body": "SELECT * \r\nFROM [Arizona].[dbo].[Point_of_sale] [pos]\r\nWHERE [pos].[POS_active]=1\r\nAND [pos].[POS_type] IN (1,2)\r\nAND [pos].[POS_number] < 99\r\n;\r\n" +{ + "id": "2e06e4b5-85f0-4493-b17d-67a332f9e634", + "prefix": "POS", + "description": "list all POS", + "body": "SELECT * \r\nFROM [Arizona].[dbo].[Point_of_sale] [pos]\r\nWHERE [pos].[POS_active]=1\r\nAND [pos].[POS_type] IN (1,2)\r\nAND [pos].[POS_number] < 99\r\n;\r\n" } \ No newline at end of file diff --git a/README.md b/README.md index 2631b99..4d5838c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# sql-snippets -red-gate sql prompt snippets - -Find in this repo my most often used and most useful red-gate sql prompt snippets +# sql-snippets +red-gate sql prompt snippets + +Find in this repo my most often used and most useful red-gate sql prompt snippets diff --git a/amr_count-871e45ec-6fe6-4733-9783-259e7b8c8a06.json b/amr_count-871e45ec-6fe6-4733-9783-259e7b8c8a06.json index db46a64..fee902f 100644 --- a/amr_count-871e45ec-6fe6-4733-9783-259e7b8c8a06.json +++ b/amr_count-871e45ec-6fe6-4733-9783-259e7b8c8a06.json @@ -1,6 +1,6 @@ -{ - "id": "871e45ec-6fe6-4733-9783-259e7b8c8a06", - "prefix": "amr_count", - "description": "list a count per tables of amr waiting to be processed", - "body": "\r\nDECLARE\r\n\t@OutParam VARCHAR(255),\r\n\t@DatabaseName VARCHAR(255),\r\n\t@OrganizationalUnitId INT,\r\n\t@PharmacyName VARCHAR(500),\r\n\t@ConnecticUser VARCHAR(255),\r\n\t@LatestReplicatedNonPriorizedMonitorRowId INT,\r\n\t@LatestReplicatedPriorizedMonitorRowId INT\r\n\r\n\tEXEC Arizona..sp_bmc_Bmc_Applic_Default @in_job_type = 3, @in_param_int_1 = NULL, @in_param_int_2 = NULL, @in_param_varchar_1 = 'cvCurrentOrganizationalUnit', @out_default_value = @OutParam OUTPUT, @out_param_int_1 = NULL\r\n\tSET @OrganizationalUnitId = CAST(@OutParam AS INT)\r\n\tSELECT @PharmacyName = AD_name + '-' + ou.ou_code FROM \tArizona..Address (READUNCOMMITTED) INNER JOIN Arizona..Organizational_unit (READUNCOMMITTED) ou on Address_ID = OU_address WHERE ou.Organizational_unit_ID = @OrganizationalUnitId\r\n\t\r\n\tSET @DatabaseName = 'Arizona'\t\r\n\t\t\r\n\tEXEC Arizona..sp_bmc_Bmc_Applic_Default @in_job_type = 3, @in_param_int_1 = NULL, @in_param_int_2 = NULL, @in_param_varchar_1 = 'cvConnecticAMRUser', @out_default_value = @OutParam OUTPUT, @out_param_int_1 = NULL\r\n\tSET @ConnecticUser = @OutParam \r\n\r\n\tSELECT @LatestReplicatedNonPriorizedMonitorRowId = amr.GetLatestReplicatedMonitorRowId(@DatabaseName,0)\r\n\tSELECT @LatestReplicatedPriorizedMonitorRowId = amr.GetLatestReplicatedMonitorRowId(@DatabaseName,1)\r\n\t\t\r\n SELECT [x].[Database],\r\n [x].[Table],\r\n [x].[Non treated MonitorRows of table]\r\n FROM (\r\n\t\tSELECT \r\n\t\t\t@DatabaseName 'Database',\r\n\t\t\tAMT_table_name 'Table',\r\n\t\t\tCOUNT(AMT_table_name) 'Non treated MonitorRows of table total',\r\n REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, COUNT(AMT_table_name)), 1),',',''''),'.00','') AS 'Non treated MonitorRows of table'\r\n\t\t\tFROM \r\n\t\t\t\tArizona..APS_monitor_row WITH (READUNCOMMITTED)\r\n\t\t\t\tINNER JOIN Arizona..APS_monitor_table (READUNCOMMITTED)\r\n\t\t\t\t\tON AMR_APS_monitor_table = APS_monitor_table_id\r\n\t\t\tWHERE\r\n\t\t\t\tAPS_monitor_row_id > @LatestReplicatedPriorizedMonitorRowId\r\n\t\t\t\tAND AMR_row_GUID IS NOT NULL\r\n\t\t\t\t-- Remove non transactional and not committed records.\r\n\t\t\t\tAND NOT (AMT_wait_for_commit = 1 AND AMR_user = @ConnecticUser AND AMR_type_of_change <> 6)\r\n\t\t\t\tAND AMR_user = @ConnecticUser\r\n\t\t\t\tAND AMT_used_by_connectic = 1\r\n\t\t\tGROUP BY \r\n\t\t\t\tAMT_table_name\r\n\r\n\t\tUNION ALL\r\n\r\n\t\tSELECT \r\n\t\t\t@DatabaseName 'Database',\r\n\t\t\tAMT_table_name 'Table',\r\n\t\t\tCOUNT(AMT_table_name) 'Non treated MonitorRows of table total',\r\n REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, COUNT(AMT_table_name)), 1),',',''''),'.00','') AS 'Non treated MonitorRows of table'\r\n\t\t\tFROM \r\n\t\t\t\tArizona..APS_monitor_row WITH (READUNCOMMITTED)\r\n\t\t\t\tINNER JOIN Arizona..APS_monitor_table (READUNCOMMITTED)\r\n\t\t\t\t\tON AMR_APS_monitor_table = APS_monitor_table_id\r\n\t\t\tWHERE\r\n\t\t\t\tAPS_monitor_row_id > @LatestReplicatedNonPriorizedMonitorRowId\r\n\t\t\t\tAND AMR_row_GUID IS NOT NULL\r\n\t\t\t\t-- Remove non transactional and not committed records.\r\n\t\t\t\tAND NOT (AMT_wait_for_commit = 1 AND AMR_user = @ConnecticUser AND AMR_type_of_change <> 6)\r\n\t\t\t\tAND ISNULL(AMR_user, '') <> @ConnecticUser\r\n\t\t\t\tAND AMT_used_by_connectic = 1\r\n\t\t\tGROUP BY \r\n\t\t\t\tAMT_table_name\r\n\t\t\t\t\r\n\t\t)x \r\n ORDER BY [x].[Non treated MonitorRows of table total] DESC \r\n" +{ + "id": "871e45ec-6fe6-4733-9783-259e7b8c8a06", + "prefix": "amr_count", + "description": "list a count per tables of amr waiting to be processed", + "body": "\r\nDECLARE\r\n\t@OutParam VARCHAR(255),\r\n\t@DatabaseName VARCHAR(255),\r\n\t@OrganizationalUnitId INT,\r\n\t@PharmacyName VARCHAR(500),\r\n\t@ConnecticUser VARCHAR(255),\r\n\t@LatestReplicatedNonPriorizedMonitorRowId INT,\r\n\t@LatestReplicatedPriorizedMonitorRowId INT\r\n\r\n\tEXEC Arizona..sp_bmc_Bmc_Applic_Default @in_job_type = 3, @in_param_int_1 = NULL, @in_param_int_2 = NULL, @in_param_varchar_1 = 'cvCurrentOrganizationalUnit', @out_default_value = @OutParam OUTPUT, @out_param_int_1 = NULL\r\n\tSET @OrganizationalUnitId = CAST(@OutParam AS INT)\r\n\tSELECT @PharmacyName = AD_name + '-' + ou.ou_code FROM \tArizona..Address (READUNCOMMITTED) INNER JOIN Arizona..Organizational_unit (READUNCOMMITTED) ou on Address_ID = OU_address WHERE ou.Organizational_unit_ID = @OrganizationalUnitId\r\n\t\r\n\tSET @DatabaseName = 'Arizona'\t\r\n\t\t\r\n\tEXEC Arizona..sp_bmc_Bmc_Applic_Default @in_job_type = 3, @in_param_int_1 = NULL, @in_param_int_2 = NULL, @in_param_varchar_1 = 'cvConnecticAMRUser', @out_default_value = @OutParam OUTPUT, @out_param_int_1 = NULL\r\n\tSET @ConnecticUser = @OutParam \r\n\r\n\tSELECT @LatestReplicatedNonPriorizedMonitorRowId = amr.GetLatestReplicatedMonitorRowId(@DatabaseName,0)\r\n\tSELECT @LatestReplicatedPriorizedMonitorRowId = amr.GetLatestReplicatedMonitorRowId(@DatabaseName,1)\r\n\t\t\r\n SELECT [x].[Database],\r\n [x].[Table],\r\n [x].[Non treated MonitorRows of table]\r\n FROM (\r\n\t\tSELECT \r\n\t\t\t@DatabaseName 'Database',\r\n\t\t\tAMT_table_name 'Table',\r\n\t\t\tCOUNT(AMT_table_name) 'Non treated MonitorRows of table total',\r\n REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, COUNT(AMT_table_name)), 1),',',''''),'.00','') AS 'Non treated MonitorRows of table'\r\n\t\t\tFROM \r\n\t\t\t\tArizona..APS_monitor_row WITH (READUNCOMMITTED)\r\n\t\t\t\tINNER JOIN Arizona..APS_monitor_table (READUNCOMMITTED)\r\n\t\t\t\t\tON AMR_APS_monitor_table = APS_monitor_table_id\r\n\t\t\tWHERE\r\n\t\t\t\tAPS_monitor_row_id > @LatestReplicatedPriorizedMonitorRowId\r\n\t\t\t\tAND AMR_row_GUID IS NOT NULL\r\n\t\t\t\t-- Remove non transactional and not committed records.\r\n\t\t\t\tAND NOT (AMT_wait_for_commit = 1 AND AMR_user = @ConnecticUser AND AMR_type_of_change <> 6)\r\n\t\t\t\tAND AMR_user = @ConnecticUser\r\n\t\t\t\tAND AMT_used_by_connectic = 1\r\n\t\t\tGROUP BY \r\n\t\t\t\tAMT_table_name\r\n\r\n\t\tUNION ALL\r\n\r\n\t\tSELECT \r\n\t\t\t@DatabaseName 'Database',\r\n\t\t\tAMT_table_name 'Table',\r\n\t\t\tCOUNT(AMT_table_name) 'Non treated MonitorRows of table total',\r\n REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, COUNT(AMT_table_name)), 1),',',''''),'.00','') AS 'Non treated MonitorRows of table'\r\n\t\t\tFROM \r\n\t\t\t\tArizona..APS_monitor_row WITH (READUNCOMMITTED)\r\n\t\t\t\tINNER JOIN Arizona..APS_monitor_table (READUNCOMMITTED)\r\n\t\t\t\t\tON AMR_APS_monitor_table = APS_monitor_table_id\r\n\t\t\tWHERE\r\n\t\t\t\tAPS_monitor_row_id > @LatestReplicatedNonPriorizedMonitorRowId\r\n\t\t\t\tAND AMR_row_GUID IS NOT NULL\r\n\t\t\t\t-- Remove non transactional and not committed records.\r\n\t\t\t\tAND NOT (AMT_wait_for_commit = 1 AND AMR_user = @ConnecticUser AND AMR_type_of_change <> 6)\r\n\t\t\t\tAND ISNULL(AMR_user, '') <> @ConnecticUser\r\n\t\t\t\tAND AMT_used_by_connectic = 1\r\n\t\t\tGROUP BY \r\n\t\t\t\tAMT_table_name\r\n\t\t\t\t\r\n\t\t)x \r\n ORDER BY [x].[Non treated MonitorRows of table total] DESC \r\n" } \ No newline at end of file diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5cb1f68..ca1545b 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -1,421 +1,421 @@ -# Starter pipeline - - -# Start with a minimal pipeline that you can customize to build and deploy your code. -# Add steps that build, run tests, deploy, and more: -# https://aka.ms/yaml - -trigger: -- main - -pool: - vmImage: ubuntu-latest - -steps: -- task: SqlDacpacDeploymentOnMachineGroup@0 - displayName: _D03091 - INDEX - Load items CDS and prescribers from PharmIndex to Arizona - Central - inputs: - TaskType: 'sqlInline' - InlineSql: | - /* step 1 - Check download from Pharmindex is finished */ - use pharmindexTP - GO - - - - - declare @today datetime; - - select @today = convert(datetime, convert(varchar(20), getdate(),102)) - - if not exists ( select top 1 * - from BatchImportHistory bih - where bih.Success = 1 - and bih.EndImportDate > @today) - begin /* Download not OK */ - - raiserror('Pharmindex download in process, job not executed', 16,1) - - end; - - GO - - /* step 2 - INDEX - Transfert PharmIndexTP to Arizona items, Prescriber using Checksum */ - begin try - - declare @out_param_int_1 int - execute[dbo].[pdx_loading] - @in_job_type = 20 - ,@skip_mapping = 0 - ,@in_subsidiary = 100 - ,@in_table_name = null - ,@in_debug = 0 - ,@out_param_int_1 = @out_param_int_1 output - - end try - begin catch - declare - @mail_message nvarchar(2000), - @mail_subject nvarchar(255); - set @mail_message = '

Résumé des erreurs dans le tableau ci-dessous :

' +' - - - - - - - - - ' + ' - - - - - - - '+ ' -
ErrorNumberErrorSeverityErrorStateErrorProcedureErrorLineErrorMessage
' + isnull(convert(varchar, ERROR_NUMBER()), '') + '' + isnull(convert(varchar, ERROR_SEVERITY()), '') + '' + isnull(convert(varchar, ERROR_STATE()), '') + '' + isnull(ERROR_PROCEDURE(), '') + '' + isnull(convert(varchar, ERROR_LINE()), '') + '' + isnull(ERROR_MESSAGE(), '') + '
- - '; - - set @mail_subject = 'INDEX - Transfert PharmIndex to PHGD_xx for items using checksum (Instance ' + @@SERVERNAME + ') - Job _D01941 - INDEX'; - - /* envoi du mail */ - exec Arizona.dbo.aps_Send_Mail_with_template - @in_param_varchar_2 = 'HCI_PharmIndex;HCI_DataManagement', - @in_param_varchar_3 = @mail_message, - @in_param_subject = @mail_subject, - @in_job_type = 4; - - end catch - go - - /* step 3 - INDEX - Control if exist prescribers with same contract number than an OU */ - use Arizona - - declare @subject varchar(8000) - , @errmsg varchar(8000) - - select @errmsg = 'Les pharmacies suivantes ont un concordat identique à celui d''un prescripteur actif' - - select @errmsg = @errmsg + char(13) + char(10) + ou1.OU_code + char(9) + ou1.OU_short_name + char(9) + pr1.PHPR_contract_number - from PH_prescriber pr1 with (nolock) - join PH_prescriber pr2 with (nolock) - on pr2.PH_prescriber_GUID <> pr1.PH_prescriber_GUID - and pr2.PHPR_contract_number = pr1.PHPR_contract_number - and pr2.PHPR_status = pr1.PHPR_status - join Organizational_unit ou1 with (nolock) - on ou1.OU_address = pr1.PHPR_address - left outer join Organizational_unit ou2 with (nolock) - on ou2.OU_address = pr2.PHPR_address - where pr1.PHPR_status = 1 - and ou2.Organizational_unit_ID is null - and exists(select 1 - from OU_store_history oust with (nolock) - where oust.OUSH_organizational_unit = ou1.Organizational_unit_ID - and (oust.OUSH_end_date is null or oust.OUSH_end_date >= getdate())) - order by ou1.OU_code - - if @@ROWCOUNT > 0 - begin - - select @subject = QUOTENAME(OBJECT_SCHEMA_NAME(@@PROCID)) - +'.'+QUOTENAME(OBJECT_NAME(@@PROCID)) - - exec aps_Send_Mail_with_template - @in_param_varchar_2 = 'HCI_PharmIndex;HCI_DataManagement', - @in_param_varchar_3 = @errmsg, - @in_param_subject = @subject, - @in_job_type = 4; - - end - - go - - - /* step 4 - Update PEXF */ - declare @cvPHGDPriceCodePEXF int, - @SubsidiaryId int, - @w_date date - - select @SubsidiaryId = 1000, - @cvPHGDPriceCodePEXF = NULL, - @w_date = getdate() - - exec arizona.dbo.sp_bmc_Bmc_Applic_Default - @in_job_type = 3, - @in_param_int_1 = NULL, - @in_param_int_2 = @SubsidiaryId, - @in_param_varchar_1 = 'cvPHGDPriceCodePSL1', - @out_default_value = @cvPHGDPriceCodePEXF output, - @out_param_int_1 = null - - - if @cvPHGDPriceCodePEXF is null - begin - select @SubsidiaryId = 100 - - exec arizona.dbo.sp_bmc_Bmc_Applic_Default - @in_job_type = 3, - @in_param_int_1 = NULL, - @in_param_int_2 = @SubsidiaryId, - @in_param_varchar_1 = 'cvPHGDPriceCodePSL1', - @out_default_value = @cvPHGDPriceCodePEXF output, - @out_param_int_1 = null - end - - /*------------- - Fermeture des PEXF sans Adresse pour les articles avec insurance code not in (10, 11) - ------------------*/ - - Update top(5000) FP set fp.fp_end_date = DATEADD(d,-1,@w_date) - from subsidiary SUB with (nolock) - - join price_code PRC with (nolock) - on prc.prc_subsidiary = sub.subsidiary_id - and prc.price_code_id = @cvPHGDPriceCodePEXF - - join Fixed_price FP with (nolock) - on FP.FP_price_code = prc.price_code_id - and FP.fp_subsidiary = sub.subsidiary_id - and FP.FP_address is null - and FP.FP_start_date < GETDATE() - and ISNULL(fp.fp_end_date, '2099-12-31') > GETDATE() - - join Item_key ITK with (nolock) - on itk.ITK_item = fp.fp_item - and ITK.ITK_subsidiary = SUB.Subsidiary_ID - and ITK.ITK_type = 1 - - join PH_item phit with (nolock) - on phit.PHIT_item = ITK.ITK_item - and phit.PHIT_insurance_code not in ('10', '11') - - where SUB.subsidiary_id = @SubsidiaryId - - /*--------------------------------------- - Clôture du PEXF sans adresse à la date -1 de la start_date du prix PEXF avec adresse - pour les articles LS. - - Nous recréons un PEXF avec la bonne start_date et le bon prix afin que la facturation aux caisse maladie soit OK - --------------*/ - - Update top(5000) FP1 set fp1.fp_end_date = DATEADD(d,-1,fp.FP_start_date) - from subsidiary SUB with (nolock) - join price_code PRC with (nolock) - on prc.prc_subsidiary = sub.subsidiary_id - and prc.price_code_id = @cvPHGDPriceCodePEXF - - join Fixed_price FP with (nolock) - on FP.FP_price_code = prc.price_code_id - and FP.fp_subsidiary = sub.subsidiary_id - and FP.FP_address is not null - and FP.FP_start_date < GETDATE() - and ISNULL(fp.fp_end_date, '2099-12-31') > GETDATE() - and FP.fixed_price_id = (select top 1 fp2.fixed_price_id from Fixed_price FP2 with (nolock) - where FP2.FP_item = FP.FP_item - and FP2.FP_price_code = fp.FP_price_code - and FP2.fp_subsidiary = FP.fp_subsidiary - and FP2.FP_address is not null - and FP2.FP_start_date < GETDATE() - and ISNULL(FP2.fp_end_date, '2099-12-31') > GETDATE() - - order by FP2.FP_start_date desc - ) - - join Item_key ITK with (nolock) - on itk.ITK_item = fp.fp_item - and ITK.ITK_subsidiary = SUB.Subsidiary_ID - and ITK.ITK_type = 1 - - join PH_item phit with (nolock) - on phit.PHIT_item = ITK.ITK_item - and phit.PHIT_insurance_code in ('10', '11') - - join Fixed_price FP1 with (nolock) - on FP1.FP_price_code = prc.price_code_id - and FP1.fp_subsidiary = sub.subsidiary_id - and FP1.FP_address is null - and FP1.FP_start_date < GETDATE() - and ISNULL(FP1.fp_end_date, '2099-12-31') > GETDATE() - and FP1.FP_item = FP.FP_item - - where SUB.subsidiary_id = @SubsidiaryId - and isnull(FP.FP_tax_free_price_per_unit,0) <> isnull(FP1.FP_tax_free_price_per_unit,0) - - /*---------- - - Creation PEXF sans adresse avec start_date et prix du PEXF avec Adresse pour LS (Le plus récent) - - ------------*/ - - declare - - @New_fixed_price_ID int, - @nb_fixed_price int , - @fp_subsidiary int, - @fp_tariff_type int, - @fp_item int, - @fp_currency int, - @fp_price_code int, - @fp_sales_tax_code int, - @FP_start_date datetime, - @FP_tax_free_price_per_unit dec(14,2) - - - SELECT @nb_fixed_price = 1 - - /*-- Declaration du curseur c_external_item --*/ - declare c_FP cursor local forward_only read_only static for - - select FP.fp_subsidiary, - FP.fp_tariff_type, - FP.fp_item, - FP.fp_currency, - FP.fp_price_code, - FP.fp_sales_tax_code, - FP.FP_start_date, - FP.FP_tax_free_price_per_unit - - from subsidiary SUB with (nolock) - - join price_code PRC with (nolock) - on prc.prc_subsidiary = sub.subsidiary_id - and prc.price_code_id = @cvPHGDPriceCodePEXF - - join Fixed_price FP with (nolock) - on FP.FP_price_code = prc.price_code_id - and FP.fp_subsidiary = sub.subsidiary_id - and FP.FP_address is not null - and FP.FP_start_date < GETDATE() - and ISNULL(fp.fp_end_date, '2099-12-31') > GETDATE() - and FP.fixed_price_id = (select top 1 fp2.fixed_price_id from Fixed_price FP2 with (nolock) - where FP2.FP_item = FP.FP_item - and FP2.FP_price_code = fp.FP_price_code - and FP2.fp_subsidiary = FP.fp_subsidiary - and FP2.FP_address is not null - and FP2.FP_start_date < GETDATE() - and ISNULL(FP2.fp_end_date, '2099-12-31') > GETDATE() - order by FP2.FP_start_date desc - ) - - join Item_key ITK with (nolock) - on itk.ITK_item = fp.fp_item - and ITK.ITK_subsidiary = SUB.Subsidiary_ID - and ITK.ITK_type = 1 - - join PH_item phit with (nolock) - on phit.PHIT_item = ITK.ITK_item - and phit.PHIT_insurance_code in ('10', '11') - - left outer join Fixed_price FP1 with (nolock) - on FP1.FP_price_code = prc.price_code_id - and FP1.fp_subsidiary = sub.subsidiary_id - and FP1.FP_address is null - and FP1.FP_start_date < GETDATE() - and ISNULL(FP1.fp_end_date, '2099-12-31') > GETDATE() - and FP1.FP_item = FP.FP_item - - where SUB.subsidiary_id = @SubsidiaryId - and FP1.Fixed_price_ID is null - - order by 1 - - open c_FP; - - fetch next from c_FP - into @fp_subsidiary , - @fp_tariff_type , - @fp_item , - @fp_currency , - @fp_price_code , - @fp_sales_tax_code , - @FP_start_date , - @FP_tax_free_price_per_unit - - while (@@fetch_status <> -1 ) - begin - - if (@@fetch_status <> -2 ) - begin - - /*----- Recherche dernier ID pour Fixed_Price -----*/ - select @New_fixed_price_ID = null - - exec sp_bmc_GetNextID - @in_key = 'fixed_price', - @in_id_column = 'fixed_price_id', - @in_nbr_of_record = @nb_fixed_price, - @out_id = @New_fixed_price_id output - - insert fixed_price - (fixed_price_id, - - fp_subsidiary, - fp_tariff_type, - fp_item, - fp_currency, - fp_price_code, - fp_sales_tax_code, - fp_start_date, - fp_tax_free_price_per_unit , - - fp_unit_code, - FP_price_per_unit_unit_code, - fp_final_discount_possible, - FP_discount_level_1_possible, - FP_discount_level_2_possible, - FP_origin, - FP_remark - - ) - select - @New_fixed_price_id, - - @fp_subsidiary , - @fp_tariff_type , - @fp_item , - @fp_currency , - @fp_price_code , - @fp_sales_tax_code , - @FP_start_date , - @FP_tax_free_price_per_unit, - 1, - 1, - 1, - 1, - 1, - 1, - 'Automatic Insert PEXF ' - - /*----- fin du curseur -----*/ - - - end /* (@@fetch_status <> -2 ) */ - - fetch next from c_FP - into @fp_subsidiary , - @fp_tariff_type , - @fp_item , - @fp_currency , - @fp_price_code , - @fp_sales_tax_code , - @FP_start_date , - @FP_tax_free_price_per_unit - - end /* (@@fetch_status <> -1 ) */ - - close c_FP; - deallocate c_FP; - - ServerName: 'localhost' - DatabaseName: 'master' - AuthScheme: 'windowsAuthentication' - -- script: echo Hello, world! - displayName: 'Run a one-line script' - -- script: | - echo Add other tasks to build, test, and deploy your project. - echo See https://aka.ms/yaml - displayName: 'Run a multi-line script' +# Starter pipeline + + +# Start with a minimal pipeline that you can customize to build and deploy your code. +# Add steps that build, run tests, deploy, and more: +# https://aka.ms/yaml + +trigger: +- main + +pool: + vmImage: ubuntu-latest + +steps: +- task: SqlDacpacDeploymentOnMachineGroup@0 + displayName: _D03091 - INDEX - Load items CDS and prescribers from PharmIndex to Arizona - Central + inputs: + TaskType: 'sqlInline' + InlineSql: | + /* step 1 - Check download from Pharmindex is finished */ + use pharmindexTP + GO + + + + + declare @today datetime; + + select @today = convert(datetime, convert(varchar(20), getdate(),102)) + + if not exists ( select top 1 * + from BatchImportHistory bih + where bih.Success = 1 + and bih.EndImportDate > @today) + begin /* Download not OK */ + + raiserror('Pharmindex download in process, job not executed', 16,1) + + end; + + GO + + /* step 2 - INDEX - Transfert PharmIndexTP to Arizona items, Prescriber using Checksum */ + begin try + + declare @out_param_int_1 int + execute[dbo].[pdx_loading] + @in_job_type = 20 + ,@skip_mapping = 0 + ,@in_subsidiary = 100 + ,@in_table_name = null + ,@in_debug = 0 + ,@out_param_int_1 = @out_param_int_1 output + + end try + begin catch + declare + @mail_message nvarchar(2000), + @mail_subject nvarchar(255); + set @mail_message = '

Résumé des erreurs dans le tableau ci-dessous :

' +' + + + + + + + + + ' + ' + + + + + + + '+ ' +
ErrorNumberErrorSeverityErrorStateErrorProcedureErrorLineErrorMessage
' + isnull(convert(varchar, ERROR_NUMBER()), '') + '' + isnull(convert(varchar, ERROR_SEVERITY()), '') + '' + isnull(convert(varchar, ERROR_STATE()), '') + '' + isnull(ERROR_PROCEDURE(), '') + '' + isnull(convert(varchar, ERROR_LINE()), '') + '' + isnull(ERROR_MESSAGE(), '') + '
+ + '; + + set @mail_subject = 'INDEX - Transfert PharmIndex to PHGD_xx for items using checksum (Instance ' + @@SERVERNAME + ') - Job _D01941 - INDEX'; + + /* envoi du mail */ + exec Arizona.dbo.aps_Send_Mail_with_template + @in_param_varchar_2 = 'HCI_PharmIndex;HCI_DataManagement', + @in_param_varchar_3 = @mail_message, + @in_param_subject = @mail_subject, + @in_job_type = 4; + + end catch + go + + /* step 3 - INDEX - Control if exist prescribers with same contract number than an OU */ + use Arizona + + declare @subject varchar(8000) + , @errmsg varchar(8000) + + select @errmsg = 'Les pharmacies suivantes ont un concordat identique à celui d''un prescripteur actif' + + select @errmsg = @errmsg + char(13) + char(10) + ou1.OU_code + char(9) + ou1.OU_short_name + char(9) + pr1.PHPR_contract_number + from PH_prescriber pr1 with (nolock) + join PH_prescriber pr2 with (nolock) + on pr2.PH_prescriber_GUID <> pr1.PH_prescriber_GUID + and pr2.PHPR_contract_number = pr1.PHPR_contract_number + and pr2.PHPR_status = pr1.PHPR_status + join Organizational_unit ou1 with (nolock) + on ou1.OU_address = pr1.PHPR_address + left outer join Organizational_unit ou2 with (nolock) + on ou2.OU_address = pr2.PHPR_address + where pr1.PHPR_status = 1 + and ou2.Organizational_unit_ID is null + and exists(select 1 + from OU_store_history oust with (nolock) + where oust.OUSH_organizational_unit = ou1.Organizational_unit_ID + and (oust.OUSH_end_date is null or oust.OUSH_end_date >= getdate())) + order by ou1.OU_code + + if @@ROWCOUNT > 0 + begin + + select @subject = QUOTENAME(OBJECT_SCHEMA_NAME(@@PROCID)) + +'.'+QUOTENAME(OBJECT_NAME(@@PROCID)) + + exec aps_Send_Mail_with_template + @in_param_varchar_2 = 'HCI_PharmIndex;HCI_DataManagement', + @in_param_varchar_3 = @errmsg, + @in_param_subject = @subject, + @in_job_type = 4; + + end + + go + + + /* step 4 - Update PEXF */ + declare @cvPHGDPriceCodePEXF int, + @SubsidiaryId int, + @w_date date + + select @SubsidiaryId = 1000, + @cvPHGDPriceCodePEXF = NULL, + @w_date = getdate() + + exec arizona.dbo.sp_bmc_Bmc_Applic_Default + @in_job_type = 3, + @in_param_int_1 = NULL, + @in_param_int_2 = @SubsidiaryId, + @in_param_varchar_1 = 'cvPHGDPriceCodePSL1', + @out_default_value = @cvPHGDPriceCodePEXF output, + @out_param_int_1 = null + + + if @cvPHGDPriceCodePEXF is null + begin + select @SubsidiaryId = 100 + + exec arizona.dbo.sp_bmc_Bmc_Applic_Default + @in_job_type = 3, + @in_param_int_1 = NULL, + @in_param_int_2 = @SubsidiaryId, + @in_param_varchar_1 = 'cvPHGDPriceCodePSL1', + @out_default_value = @cvPHGDPriceCodePEXF output, + @out_param_int_1 = null + end + + /*------------- + Fermeture des PEXF sans Adresse pour les articles avec insurance code not in (10, 11) + ------------------*/ + + Update top(5000) FP set fp.fp_end_date = DATEADD(d,-1,@w_date) + from subsidiary SUB with (nolock) + + join price_code PRC with (nolock) + on prc.prc_subsidiary = sub.subsidiary_id + and prc.price_code_id = @cvPHGDPriceCodePEXF + + join Fixed_price FP with (nolock) + on FP.FP_price_code = prc.price_code_id + and FP.fp_subsidiary = sub.subsidiary_id + and FP.FP_address is null + and FP.FP_start_date < GETDATE() + and ISNULL(fp.fp_end_date, '2099-12-31') > GETDATE() + + join Item_key ITK with (nolock) + on itk.ITK_item = fp.fp_item + and ITK.ITK_subsidiary = SUB.Subsidiary_ID + and ITK.ITK_type = 1 + + join PH_item phit with (nolock) + on phit.PHIT_item = ITK.ITK_item + and phit.PHIT_insurance_code not in ('10', '11') + + where SUB.subsidiary_id = @SubsidiaryId + + /*--------------------------------------- + Clôture du PEXF sans adresse à la date -1 de la start_date du prix PEXF avec adresse + pour les articles LS. + + Nous recréons un PEXF avec la bonne start_date et le bon prix afin que la facturation aux caisse maladie soit OK + --------------*/ + + Update top(5000) FP1 set fp1.fp_end_date = DATEADD(d,-1,fp.FP_start_date) + from subsidiary SUB with (nolock) + join price_code PRC with (nolock) + on prc.prc_subsidiary = sub.subsidiary_id + and prc.price_code_id = @cvPHGDPriceCodePEXF + + join Fixed_price FP with (nolock) + on FP.FP_price_code = prc.price_code_id + and FP.fp_subsidiary = sub.subsidiary_id + and FP.FP_address is not null + and FP.FP_start_date < GETDATE() + and ISNULL(fp.fp_end_date, '2099-12-31') > GETDATE() + and FP.fixed_price_id = (select top 1 fp2.fixed_price_id from Fixed_price FP2 with (nolock) + where FP2.FP_item = FP.FP_item + and FP2.FP_price_code = fp.FP_price_code + and FP2.fp_subsidiary = FP.fp_subsidiary + and FP2.FP_address is not null + and FP2.FP_start_date < GETDATE() + and ISNULL(FP2.fp_end_date, '2099-12-31') > GETDATE() + + order by FP2.FP_start_date desc + ) + + join Item_key ITK with (nolock) + on itk.ITK_item = fp.fp_item + and ITK.ITK_subsidiary = SUB.Subsidiary_ID + and ITK.ITK_type = 1 + + join PH_item phit with (nolock) + on phit.PHIT_item = ITK.ITK_item + and phit.PHIT_insurance_code in ('10', '11') + + join Fixed_price FP1 with (nolock) + on FP1.FP_price_code = prc.price_code_id + and FP1.fp_subsidiary = sub.subsidiary_id + and FP1.FP_address is null + and FP1.FP_start_date < GETDATE() + and ISNULL(FP1.fp_end_date, '2099-12-31') > GETDATE() + and FP1.FP_item = FP.FP_item + + where SUB.subsidiary_id = @SubsidiaryId + and isnull(FP.FP_tax_free_price_per_unit,0) <> isnull(FP1.FP_tax_free_price_per_unit,0) + + /*---------- + + Creation PEXF sans adresse avec start_date et prix du PEXF avec Adresse pour LS (Le plus récent) + + ------------*/ + + declare + + @New_fixed_price_ID int, + @nb_fixed_price int , + @fp_subsidiary int, + @fp_tariff_type int, + @fp_item int, + @fp_currency int, + @fp_price_code int, + @fp_sales_tax_code int, + @FP_start_date datetime, + @FP_tax_free_price_per_unit dec(14,2) + + + SELECT @nb_fixed_price = 1 + + /*-- Declaration du curseur c_external_item --*/ + declare c_FP cursor local forward_only read_only static for + + select FP.fp_subsidiary, + FP.fp_tariff_type, + FP.fp_item, + FP.fp_currency, + FP.fp_price_code, + FP.fp_sales_tax_code, + FP.FP_start_date, + FP.FP_tax_free_price_per_unit + + from subsidiary SUB with (nolock) + + join price_code PRC with (nolock) + on prc.prc_subsidiary = sub.subsidiary_id + and prc.price_code_id = @cvPHGDPriceCodePEXF + + join Fixed_price FP with (nolock) + on FP.FP_price_code = prc.price_code_id + and FP.fp_subsidiary = sub.subsidiary_id + and FP.FP_address is not null + and FP.FP_start_date < GETDATE() + and ISNULL(fp.fp_end_date, '2099-12-31') > GETDATE() + and FP.fixed_price_id = (select top 1 fp2.fixed_price_id from Fixed_price FP2 with (nolock) + where FP2.FP_item = FP.FP_item + and FP2.FP_price_code = fp.FP_price_code + and FP2.fp_subsidiary = FP.fp_subsidiary + and FP2.FP_address is not null + and FP2.FP_start_date < GETDATE() + and ISNULL(FP2.fp_end_date, '2099-12-31') > GETDATE() + order by FP2.FP_start_date desc + ) + + join Item_key ITK with (nolock) + on itk.ITK_item = fp.fp_item + and ITK.ITK_subsidiary = SUB.Subsidiary_ID + and ITK.ITK_type = 1 + + join PH_item phit with (nolock) + on phit.PHIT_item = ITK.ITK_item + and phit.PHIT_insurance_code in ('10', '11') + + left outer join Fixed_price FP1 with (nolock) + on FP1.FP_price_code = prc.price_code_id + and FP1.fp_subsidiary = sub.subsidiary_id + and FP1.FP_address is null + and FP1.FP_start_date < GETDATE() + and ISNULL(FP1.fp_end_date, '2099-12-31') > GETDATE() + and FP1.FP_item = FP.FP_item + + where SUB.subsidiary_id = @SubsidiaryId + and FP1.Fixed_price_ID is null + + order by 1 + + open c_FP; + + fetch next from c_FP + into @fp_subsidiary , + @fp_tariff_type , + @fp_item , + @fp_currency , + @fp_price_code , + @fp_sales_tax_code , + @FP_start_date , + @FP_tax_free_price_per_unit + + while (@@fetch_status <> -1 ) + begin + + if (@@fetch_status <> -2 ) + begin + + /*----- Recherche dernier ID pour Fixed_Price -----*/ + select @New_fixed_price_ID = null + + exec sp_bmc_GetNextID + @in_key = 'fixed_price', + @in_id_column = 'fixed_price_id', + @in_nbr_of_record = @nb_fixed_price, + @out_id = @New_fixed_price_id output + + insert fixed_price + (fixed_price_id, + + fp_subsidiary, + fp_tariff_type, + fp_item, + fp_currency, + fp_price_code, + fp_sales_tax_code, + fp_start_date, + fp_tax_free_price_per_unit , + + fp_unit_code, + FP_price_per_unit_unit_code, + fp_final_discount_possible, + FP_discount_level_1_possible, + FP_discount_level_2_possible, + FP_origin, + FP_remark + + ) + select + @New_fixed_price_id, + + @fp_subsidiary , + @fp_tariff_type , + @fp_item , + @fp_currency , + @fp_price_code , + @fp_sales_tax_code , + @FP_start_date , + @FP_tax_free_price_per_unit, + 1, + 1, + 1, + 1, + 1, + 1, + 'Automatic Insert PEXF ' + + /*----- fin du curseur -----*/ + + + end /* (@@fetch_status <> -2 ) */ + + fetch next from c_FP + into @fp_subsidiary , + @fp_tariff_type , + @fp_item , + @fp_currency , + @fp_price_code , + @fp_sales_tax_code , + @FP_start_date , + @FP_tax_free_price_per_unit + + end /* (@@fetch_status <> -1 ) */ + + close c_FP; + deallocate c_FP; + + ServerName: 'localhost' + DatabaseName: 'master' + AuthScheme: 'windowsAuthentication' + +- script: echo Hello, world! + displayName: 'Run a one-line script' + +- script: | + echo Add other tasks to build, test, and deploy your project. + echo See https://aka.ms/yaml + displayName: 'Run a multi-line script' diff --git a/be-1bb85689-38cd-4f92-89b6-8df1612b1c8f.json b/be-1bb85689-38cd-4f92-89b6-8df1612b1c8f.json index 9caa845..fa43e7a 100644 --- a/be-1bb85689-38cd-4f92-89b6-8df1612b1c8f.json +++ b/be-1bb85689-38cd-4f92-89b6-8df1612b1c8f.json @@ -1,6 +1,6 @@ -{ - "id": "1bb85689-38cd-4f92-89b6-8df1612b1c8f", - "prefix": "be", - "description": "BEGIN...END block", - "body": "BEGIN\r\n $SELECTEDTEXT$$CURSOR$\r\nEND" +{ + "id": "1bb85689-38cd-4f92-89b6-8df1612b1c8f", + "prefix": "be", + "description": "BEGIN...END block", + "body": "BEGIN\r\n $SELECTEDTEXT$$CURSOR$\r\nEND" } \ No newline at end of file diff --git a/bkpHist-9bbe2292-2584-4d65-a484-4f60dc92cd94.json b/bkpHist-9bbe2292-2584-4d65-a484-4f60dc92cd94.json index ab1f0cc..f090391 100644 --- a/bkpHist-9bbe2292-2584-4d65-a484-4f60dc92cd94.json +++ b/bkpHist-9bbe2292-2584-4d65-a484-4f60dc92cd94.json @@ -1,6 +1,6 @@ -{ - "id": "9bbe2292-2584-4d65-a484-4f60dc92cd94", - "prefix": "bkpHist", - "description": "list database backup history", - "body": ";WITH cteHist AS (\r\n SELECT [ibs].[database_name], [ibs].[backup_start_date], [ibs].[backup_finish_date], ROW_NUMBER()OVER(PARTITION BY [ibs].[database_name] ORDER BY [ibs].[backup_finish_date] DESC ) AS rnk\r\n FROM msdb.dbo.backupset ibs \r\n WHERE [ibs].[type]='D'\r\n)\r\n, ctehistFilt AS (\r\nSELECT *\r\nFROM [cteHist]\r\n--WHERE [cteHist].[rnk] <= 10\r\nWHERE [cteHist].[backup_finish_date] >= DATEADD(DAY, -7, CURRENT_TIMESTAMP)\r\n)\r\n\r\nSELECT \r\n d.name\r\n --,[last 5 backups] = STUFF(CONVERT(VARCHAR(MAX),bkp.strDates),1,1,'')\r\n ,h.[backup_finish_date]\r\n ,h.[rnk] AS position\r\n ,d.collation_name\r\n ,d.compatibility_level\r\nFROM sys.databases d\r\n JOIN [ctehistFilt] h ON h.[database_name] = d.[name]\r\nWHERE 1=1\r\nAND d.name NOT IN (\r\n 'master'\r\n ,'model'\r\n ,'tempdb'\r\n ,'msdb'\r\n)\r\n" +{ + "id": "9bbe2292-2584-4d65-a484-4f60dc92cd94", + "prefix": "bkpHist", + "description": "list database backup history", + "body": ";WITH cteHist AS (\r\n SELECT [ibs].[database_name], [ibs].[backup_start_date], [ibs].[backup_finish_date], ROW_NUMBER()OVER(PARTITION BY [ibs].[database_name] ORDER BY [ibs].[backup_finish_date] DESC ) AS rnk\r\n FROM msdb.dbo.backupset ibs \r\n WHERE [ibs].[type]='D'\r\n)\r\n, ctehistFilt AS (\r\nSELECT *\r\nFROM [cteHist]\r\n--WHERE [cteHist].[rnk] <= 10\r\nWHERE [cteHist].[backup_finish_date] >= DATEADD(DAY, -7, CURRENT_TIMESTAMP)\r\n)\r\n\r\nSELECT \r\n d.name\r\n --,[last 5 backups] = STUFF(CONVERT(VARCHAR(MAX),bkp.strDates),1,1,'')\r\n ,h.[backup_finish_date]\r\n ,h.[rnk] AS position\r\n ,d.collation_name\r\n ,d.compatibility_level\r\nFROM sys.databases d\r\n JOIN [ctehistFilt] h ON h.[database_name] = d.[name]\r\nWHERE 1=1\r\nAND d.name NOT IN (\r\n 'master'\r\n ,'model'\r\n ,'tempdb'\r\n ,'msdb'\r\n)\r\n" } \ No newline at end of file diff --git a/bkp_apo-cc7bffa0-701b-4bb2-9a9c-090d9646a93e.json b/bkp_apo-cc7bffa0-701b-4bb2-9a9c-090d9646a93e.json index 648c4ac..3c8085d 100644 --- a/bkp_apo-cc7bffa0-701b-4bb2-9a9c-090d9646a93e.json +++ b/bkp_apo-cc7bffa0-701b-4bb2-9a9c-090d9646a93e.json @@ -1,6 +1,6 @@ -{ - "id": "cc7bffa0-701b-4bb2-9a9c-090d9646a93e", - "prefix": "bkp_apo", - "description": "backup activepos_read and wait for the job to finish", - "body": "SET XACT_ABORT ON \r\nDECLARE @pos2 sysname;\r\n\r\nSELECT @pos2 = POS_hostname\r\nFROM Arizona.dbo.Point_of_sale\r\nWHERE POS_number = 2;\r\n\r\nBEGIN TRY\r\n EXEC sys.sp_testlinkedserver @pos2\r\n\r\n --start backup\r\n EXEC msdb.dbo.sp_start_job @job_name = N'D91030 - Backup ActivePos_Read' , @step_name = 'Purge old ActivePos_Read backups'\r\n\r\n WAITFOR DELAY '00:00:05.000'\r\n\r\n WHILE EXISTS(\r\n SELECT sj.name\r\n , sja.*\r\n FROM msdb.dbo.sysjobactivity AS sja\r\n INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id\r\n WHERE sj.[name]='D91030 - Backup ActivePos_Read'\r\n AND sja.start_execution_date IS NOT NULL\r\n AND sja.stop_execution_date IS NULL\r\n ) BEGIN\r\n --PRINT 'job is still running '+CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n DECLARE @t VARCHAR(20) = CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n RAISERROR('%s, job is still running', 0, 1, @t) WITH NOWAIT;\r\n WAITFOR DELAY '00:00:05.000'\r\n END \r\n \r\n --last status\r\n SELECT\r\n JobName = J.name,\r\n H.*\r\n FROM\r\n msdb.dbo.sysjobs AS J\r\n CROSS APPLY (\r\n SELECT TOP 20\r\n JobName = J.name,\r\n StepNumber = T.step_id,\r\n StepName = T.step_name,\r\n StepStatus = CASE T.run_status\r\n WHEN 0 THEN 'Failed'\r\n WHEN 1 THEN 'Succeeded'\r\n WHEN 2 THEN 'Retry'\r\n WHEN 3 THEN 'Canceled'\r\n ELSE 'Running' END,\r\n ExecutedAt = msdb.dbo.agent_datetime(T.run_date, T.run_time),\r\n ExecutingHours = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) / 60,\r\n ExecutingMinutes = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) % 60,\r\n Message = T.message\r\n ,t.[instance_id]\r\n FROM msdb.dbo.sysjobhistory AS T\r\n WHERE T.job_id = J.job_id\r\n ORDER BY t.[instance_id] DESC\r\n ) AS H\r\n WHERE [J].[name]='D91030 - Backup ActivePos_Read'\r\n AND [H].[StepNumber] = 0\r\n ORDER BY J.name\r\n\r\n\r\nEND TRY\r\nBEGIN CATCH\r\n PRINT ERROR_MESSAGE()\r\n RAISERROR('pos %s is not reachable', 16, 2, @pos2)\r\nEND CATCH\r\n" +{ + "id": "cc7bffa0-701b-4bb2-9a9c-090d9646a93e", + "prefix": "bkp_apo", + "description": "backup activepos_read and wait for the job to finish", + "body": "SET XACT_ABORT ON \r\nDECLARE @pos2 sysname;\r\n\r\nSELECT @pos2 = POS_hostname\r\nFROM Arizona.dbo.Point_of_sale\r\nWHERE POS_number = 2;\r\n\r\nBEGIN TRY\r\n EXEC sys.sp_testlinkedserver @pos2\r\n\r\n --start backup\r\n EXEC msdb.dbo.sp_start_job @job_name = N'D91030 - Backup ActivePos_Read' , @step_name = 'Purge old ActivePos_Read backups'\r\n\r\n WAITFOR DELAY '00:00:05.000'\r\n\r\n WHILE EXISTS(\r\n SELECT sj.name\r\n , sja.*\r\n FROM msdb.dbo.sysjobactivity AS sja\r\n INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id\r\n WHERE sj.[name]='D91030 - Backup ActivePos_Read'\r\n AND sja.start_execution_date IS NOT NULL\r\n AND sja.stop_execution_date IS NULL\r\n ) BEGIN\r\n --PRINT 'job is still running '+CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n DECLARE @t VARCHAR(20) = CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n RAISERROR('%s, job is still running', 0, 1, @t) WITH NOWAIT;\r\n WAITFOR DELAY '00:00:05.000'\r\n END \r\n \r\n --last status\r\n SELECT\r\n JobName = J.name,\r\n H.*\r\n FROM\r\n msdb.dbo.sysjobs AS J\r\n CROSS APPLY (\r\n SELECT TOP 20\r\n JobName = J.name,\r\n StepNumber = T.step_id,\r\n StepName = T.step_name,\r\n StepStatus = CASE T.run_status\r\n WHEN 0 THEN 'Failed'\r\n WHEN 1 THEN 'Succeeded'\r\n WHEN 2 THEN 'Retry'\r\n WHEN 3 THEN 'Canceled'\r\n ELSE 'Running' END,\r\n ExecutedAt = msdb.dbo.agent_datetime(T.run_date, T.run_time),\r\n ExecutingHours = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) / 60,\r\n ExecutingMinutes = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) % 60,\r\n Message = T.message\r\n ,t.[instance_id]\r\n FROM msdb.dbo.sysjobhistory AS T\r\n WHERE T.job_id = J.job_id\r\n ORDER BY t.[instance_id] DESC\r\n ) AS H\r\n WHERE [J].[name]='D91030 - Backup ActivePos_Read'\r\n AND [H].[StepNumber] = 0\r\n ORDER BY J.name\r\n\r\n\r\nEND TRY\r\nBEGIN CATCH\r\n PRINT ERROR_MESSAGE()\r\n RAISERROR('pos %s is not reachable', 16, 2, @pos2)\r\nEND CATCH\r\n" } \ No newline at end of file diff --git a/bt-c867233c-3e25-49a8-b4e9-94c8dc11bdb0.json b/bt-c867233c-3e25-49a8-b4e9-94c8dc11bdb0.json index b51b26c..9287d0d 100644 --- a/bt-c867233c-3e25-49a8-b4e9-94c8dc11bdb0.json +++ b/bt-c867233c-3e25-49a8-b4e9-94c8dc11bdb0.json @@ -1,6 +1,6 @@ -{ - "id": "c867233c-3e25-49a8-b4e9-94c8dc11bdb0", - "prefix": "bt", - "description": "Begin transaction", - "body": "BEGIN TRANSACTION " +{ + "id": "c867233c-3e25-49a8-b4e9-94c8dc11bdb0", + "prefix": "bt", + "description": "Begin transaction", + "body": "BEGIN TRANSACTION " } \ No newline at end of file diff --git a/cal-ca9ed7a3-6fb0-4d39-b918-887951161076.json b/cal-ca9ed7a3-6fb0-4d39-b918-887951161076.json index d9608e2..b59e60f 100644 --- a/cal-ca9ed7a3-6fb0-4d39-b918-887951161076.json +++ b/cal-ca9ed7a3-6fb0-4d39-b918-887951161076.json @@ -1,6 +1,6 @@ -{ - "id": "ca9ed7a3-6fb0-4d39-b918-887951161076", - "prefix": "cal", - "description": "create a calendar #cal table", - "body": "DECLARE @dtmFrom DATETIME, @dtmTo DATETIME;\r\nSELECT @dtmFrom = '20100812', @dtmTo=CURRENT_TIMESTAMP\r\n\r\n--#region create calendar\r\nDECLARE @nb TABLE( val INT);\r\nINSERT INTO @nb(val)\r\nSELECT a=0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9;\r\n\r\nIF (SELECT OBJECT_ID('tempdb..#cal'))IS NOT NULL BEGIN\r\n\tDROP TABLE #cal;\r\nEND; \r\n\r\nSELECT \r\n --+1 to take the current day, must be reflected in the TOP subquery\r\n DATEADD(DAY, (x.[nbr] * -1) + 1, CURRENT_TIMESTAMP) AS dt\r\nINTO #cal\r\nFROM(\r\n SELECT * \r\n FROM (\r\n --the TOP limits the calendar to the specified days. +1 to compensate the current day in DATEADD()\r\n SELECT TOP (DATEDIFF(DAY, @dtmFrom, @dtmTo)+1)\r\n ROW_NUMBER()OVER(ORDER BY a.val) AS nbr\r\n FROM @nb a\r\n CROSS JOIN @nb b\r\n CROSS JOIN @nb c\r\n CROSS JOIN @nb d\r\n CROSS JOIN @nb e\r\n CROSS JOIN @nb f\r\n ORDER BY a.[val]\r\n )tally\r\n)x\r\n--#endregion\r\n\r\nSELECT MIN([c].[dt]), MAX([c].[dt])\r\nFROM [#cal] c" +{ + "id": "ca9ed7a3-6fb0-4d39-b918-887951161076", + "prefix": "cal", + "description": "create a calendar #cal table", + "body": "DECLARE @dtmFrom DATETIME, @dtmTo DATETIME;\r\nSELECT @dtmFrom = '20100812', @dtmTo=CURRENT_TIMESTAMP\r\n\r\n--#region create calendar\r\nDECLARE @nb TABLE( val INT);\r\nINSERT INTO @nb(val)\r\nSELECT a=0 UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9;\r\n\r\nIF (SELECT OBJECT_ID('tempdb..#cal'))IS NOT NULL BEGIN\r\n\tDROP TABLE #cal;\r\nEND; \r\n\r\nSELECT \r\n --+1 to take the current day, must be reflected in the TOP subquery\r\n DATEADD(DAY, (x.[nbr] * -1) + 1, CURRENT_TIMESTAMP) AS dt\r\nINTO #cal\r\nFROM(\r\n SELECT * \r\n FROM (\r\n --the TOP limits the calendar to the specified days. +1 to compensate the current day in DATEADD()\r\n SELECT TOP (DATEDIFF(DAY, @dtmFrom, @dtmTo)+1)\r\n ROW_NUMBER()OVER(ORDER BY a.val) AS nbr\r\n FROM @nb a\r\n CROSS JOIN @nb b\r\n CROSS JOIN @nb c\r\n CROSS JOIN @nb d\r\n CROSS JOIN @nb e\r\n CROSS JOIN @nb f\r\n ORDER BY a.[val]\r\n )tally\r\n)x\r\n--#endregion\r\n\r\nSELECT MIN([c].[dt]), MAX([c].[dt])\r\nFROM [#cal] c" } \ No newline at end of file diff --git a/cc-f1d3df2e-22bf-4a1e-b423-72b3fb610932.json b/cc-f1d3df2e-22bf-4a1e-b423-72b3fb610932.json index 8b7768e..1ef4944 100644 --- a/cc-f1d3df2e-22bf-4a1e-b423-72b3fb610932.json +++ b/cc-f1d3df2e-22bf-4a1e-b423-72b3fb610932.json @@ -1,6 +1,6 @@ -{ - "id": "f1d3df2e-22bf-4a1e-b423-72b3fb610932", - "prefix": "cc", - "description": "comment", - "body": "/* $CURSOR$ */" +{ + "id": "f1d3df2e-22bf-4a1e-b423-72b3fb610932", + "prefix": "cc", + "description": "comment", + "body": "/* $CURSOR$ */" } \ No newline at end of file diff --git a/check_amr-ef7f7e95-0173-4c0a-b540-65616077d483.json b/check_amr-ef7f7e95-0173-4c0a-b540-65616077d483.json index 41a3cc4..9c8a42d 100644 --- a/check_amr-ef7f7e95-0173-4c0a-b540-65616077d483.json +++ b/check_amr-ef7f7e95-0173-4c0a-b540-65616077d483.json @@ -1,6 +1,6 @@ -{ - "id": "ef7f7e95-0173-4c0a-b540-65616077d483", - "prefix": "check_amr", - "description": "check recorded amr by connectic and max current amr", - "body": "SELECT s.*, a.APS_monitor_row_ID, a.AMR_APS_TS\r\nFROM ActiveSystemServer.amr.MonitorRowsStatus s\r\n LEFT JOIN Arizona.dbo.APS_monitor_row a ON a.APS_monitor_row_ID = s.LastTreatedMonitorRow\r\nWHERE s.DatabaseName='arizona'\r\n\r\nSELECT MAX(a.APS_monitor_row_ID)\r\nFROM Arizona.dbo.APS_monitor_row a \r\n" +{ + "id": "ef7f7e95-0173-4c0a-b540-65616077d483", + "prefix": "check_amr", + "description": "check recorded amr by connectic and max current amr", + "body": "SELECT s.*, a.APS_monitor_row_ID, a.AMR_APS_TS\r\nFROM ActiveSystemServer.amr.MonitorRowsStatus s\r\n LEFT JOIN Arizona.dbo.APS_monitor_row a ON a.APS_monitor_row_ID = s.LastTreatedMonitorRow\r\nWHERE s.DatabaseName='arizona'\r\n\r\nSELECT MAX(a.APS_monitor_row_ID)\r\nFROM Arizona.dbo.APS_monitor_row a \r\n" } \ No newline at end of file diff --git a/check_critical_jobs-0eb1ed81-6410-464e-aec4-3580bef84fa4.json b/check_critical_jobs-0eb1ed81-6410-464e-aec4-3580bef84fa4.json index b492cee..54eea49 100644 --- a/check_critical_jobs-0eb1ed81-6410-464e-aec4-3580bef84fa4.json +++ b/check_critical_jobs-0eb1ed81-6410-464e-aec4-3580bef84fa4.json @@ -1,6 +1,6 @@ -{ - "id": "0eb1ed81-6410-464e-aec4-3580bef84fa4", - "prefix": "check_critical_jobs", - "description": "Populate smsJobCheck with the next schedule the syncro HIV should run", - "body": "/*============================================================================= \r\n\r\nPopulate smsJobCheck with the next schedule the syncro HIV should run\r\nExtracted FROM [mon].[Check_Critical_Job]\r\n\r\nCreation : 17.05.2023 / TSC\r\nModifications:\r\n\r\n=============================================================================*/ \r\nIF EXISTS (\r\n SELECT 1 \r\n FROM [HCITools].[mon].[SMSJobCheck] a\r\n WHERE [a].[SJCNextExecution] IS NULL \r\n)\r\nBEGIN \r\n UPDATE sjc\r\n SET [sjc].[SJCNextExecution] = [sja].[next_scheduled_run_date]\r\n FROM HCITools.[mon].SMSJobCheck sjc\r\n INNER JOIN msdb.dbo.sysjobsteps sjs WITH (NOLOCK)\r\n ON [sjs].[step_name] LIKE '%Start job %' + [sjc].[SJCJobName] + '%'\r\n INNER JOIN msdb.dbo.sysjobs sj WITH (NOLOCK)\r\n ON sjs.job_id = sj.job_id\r\n INNER JOIN msdb.dbo.sysjobactivity sja WITH (NOLOCK)\r\n ON sja.job_id = sj.job_id\r\n INNER JOIN msdb.dbo.syssessions AS sse\r\n ON sja.session_id = sse.session_id\r\n INNER JOIN\r\n (\r\n SELECT MAX(agent_start_date) AS agent_start_date\r\n FROM msdb.dbo.syssessions\r\n ) AS mss\r\n ON sse.agent_start_date = mss.agent_start_date\r\n WHERE ISNULL([sja].[start_execution_date], GETDATE()-1) >= ISNULL([sjc].[SJCNextExecution], GETDATE() - 1);\r\nEND \r\n\r\nEXEC msdb.dbo.sp_stop_job\r\n @job_name = 'D92220 - Check Critical Jobs'" +{ + "id": "0eb1ed81-6410-464e-aec4-3580bef84fa4", + "prefix": "check_critical_jobs", + "description": "Populate smsJobCheck with the next schedule the syncro HIV should run", + "body": "/*============================================================================= \r\n\r\nPopulate smsJobCheck with the next schedule the syncro HIV should run\r\nExtracted FROM [mon].[Check_Critical_Job]\r\n\r\nCreation : 17.05.2023 / TSC\r\nModifications:\r\n\r\n=============================================================================*/ \r\nIF EXISTS (\r\n SELECT 1 \r\n FROM [HCITools].[mon].[SMSJobCheck] a\r\n WHERE [a].[SJCNextExecution] IS NULL \r\n)\r\nBEGIN \r\n UPDATE sjc\r\n SET [sjc].[SJCNextExecution] = [sja].[next_scheduled_run_date]\r\n FROM HCITools.[mon].SMSJobCheck sjc\r\n INNER JOIN msdb.dbo.sysjobsteps sjs WITH (NOLOCK)\r\n ON [sjs].[step_name] LIKE '%Start job %' + [sjc].[SJCJobName] + '%'\r\n INNER JOIN msdb.dbo.sysjobs sj WITH (NOLOCK)\r\n ON sjs.job_id = sj.job_id\r\n INNER JOIN msdb.dbo.sysjobactivity sja WITH (NOLOCK)\r\n ON sja.job_id = sj.job_id\r\n INNER JOIN msdb.dbo.syssessions AS sse\r\n ON sja.session_id = sse.session_id\r\n INNER JOIN\r\n (\r\n SELECT MAX(agent_start_date) AS agent_start_date\r\n FROM msdb.dbo.syssessions\r\n ) AS mss\r\n ON sse.agent_start_date = mss.agent_start_date\r\n WHERE ISNULL([sja].[start_execution_date], GETDATE()-1) >= ISNULL([sjc].[SJCNextExecution], GETDATE() - 1);\r\nEND \r\n\r\nEXEC msdb.dbo.sp_stop_job\r\n @job_name = 'D92220 - Check Critical Jobs'" } \ No newline at end of file diff --git a/check_mail_log-d51f5094-34a8-4d58-804f-b9e2e535e5f7.json b/check_mail_log-d51f5094-34a8-4d58-804f-b9e2e535e5f7.json index 448f9c2..0efa3ef 100644 --- a/check_mail_log-d51f5094-34a8-4d58-804f-b9e2e535e5f7.json +++ b/check_mail_log-d51f5094-34a8-4d58-804f-b9e2e535e5f7.json @@ -1,6 +1,6 @@ -{ - "id": "d51f5094-34a8-4d58-804f-b9e2e535e5f7", - "prefix": "check_mail_log", - "description": "list entries from dbmail that had an error", - "body": "SELECT \r\n l.[log_id]\r\n ,l.[log_date]\r\n ,l.[description]\r\n ,i.[mailitem_id]\r\n ,i.[recipients]\r\n ,i.[subject]\r\n ,i.[body]\r\nFROM msdb.dbo.[sysmail_log] l\r\n JOIN msdb.dbo.[sysmail_allitems] i ON i.[mailitem_id]=l.[mailitem_id]" +{ + "id": "d51f5094-34a8-4d58-804f-b9e2e535e5f7", + "prefix": "check_mail_log", + "description": "list entries from dbmail that had an error", + "body": "SELECT \r\n l.[log_id]\r\n ,l.[log_date]\r\n ,l.[description]\r\n ,i.[mailitem_id]\r\n ,i.[recipients]\r\n ,i.[subject]\r\n ,i.[body]\r\nFROM msdb.dbo.[sysmail_log] l\r\n JOIN msdb.dbo.[sysmail_allitems] i ON i.[mailitem_id]=l.[mailitem_id]" } \ No newline at end of file diff --git a/check_upload_mig_pharma-1dde3f7e-53f0-49e2-a02d-c2fc7258a338.json b/check_upload_mig_pharma-1dde3f7e-53f0-49e2-a02d-c2fc7258a338.json index 4bc7bc3..7d9db2e 100644 --- a/check_upload_mig_pharma-1dde3f7e-53f0-49e2-a02d-c2fc7258a338.json +++ b/check_upload_mig_pharma-1dde3f7e-53f0-49e2-a02d-c2fc7258a338.json @@ -1,6 +1,6 @@ -{ - "id": "1dde3f7e-53f0-49e2-a02d-c2fc7258a338", - "prefix": "check_upload_mig_pharma", - "description": "check l'avancée de l'upload des données agitées lors d'une migration depuis la pharmacie", - "body": "USE [Arizona];\r\nGO\r\nDECLARE @tot INT = 131715\r\n\r\nSELECT COUNT(*) AS [left], @tot AS [total], ROUND(100-(100.0*COUNT(1)/@tot), 2) AS [percent done], ROUND(100.0*COUNT(1)/@tot,2) AS [percent left]\r\n FROM APS_monitor_row amr WITH (NOLOCK)\r\n JOIN APS_monitor_table amt WITH (NOLOCK)\r\n ON amt.APS_monitor_table_ID = amr.AMR_APS_monitor_table\r\n AND amt.AMT_table_name IN ('address', 'PH_insurance_card', 'ph_patient', 'Address_key')\r\n WHERE amr.AMR_ArizonaRep_extraction_TS IS NULL;\r\n GO\r\n\r\n USE [Arizona];\r\nGO\r\n\r\nDECLARE @tot INT = 111279\r\n\r\nSELECT COUNT(*) AS [left], @tot AS [total], ROUND(100-(100.0*COUNT(1)/@tot), 2) AS [percent done], ROUND(100.0*COUNT(1)/@tot,2) AS [percent left]\r\n FROM APS_monitor_row amr WITH (NOLOCK)\r\n JOIN APS_monitor_table amt WITH (NOLOCK)\r\n ON amt.APS_monitor_table_ID = amr.AMR_APS_monitor_table\r\n AND amt.AMT_table_name IN ('Document_header')\r\n WHERE amr.AMR_ArizonaRep_extraction_TS IS NULL;\r\n GO" +{ + "id": "1dde3f7e-53f0-49e2-a02d-c2fc7258a338", + "prefix": "check_upload_mig_pharma", + "description": "check l'avancée de l'upload des données agitées lors d'une migration depuis la pharmacie", + "body": "USE [Arizona];\r\nGO\r\nDECLARE @tot INT = 131715\r\n\r\nSELECT COUNT(*) AS [left], @tot AS [total], ROUND(100-(100.0*COUNT(1)/@tot), 2) AS [percent done], ROUND(100.0*COUNT(1)/@tot,2) AS [percent left]\r\n FROM APS_monitor_row amr WITH (NOLOCK)\r\n JOIN APS_monitor_table amt WITH (NOLOCK)\r\n ON amt.APS_monitor_table_ID = amr.AMR_APS_monitor_table\r\n AND amt.AMT_table_name IN ('address', 'PH_insurance_card', 'ph_patient', 'Address_key')\r\n WHERE amr.AMR_ArizonaRep_extraction_TS IS NULL;\r\n GO\r\n\r\n USE [Arizona];\r\nGO\r\n\r\nDECLARE @tot INT = 111279\r\n\r\nSELECT COUNT(*) AS [left], @tot AS [total], ROUND(100-(100.0*COUNT(1)/@tot), 2) AS [percent done], ROUND(100.0*COUNT(1)/@tot,2) AS [percent left]\r\n FROM APS_monitor_row amr WITH (NOLOCK)\r\n JOIN APS_monitor_table amt WITH (NOLOCK)\r\n ON amt.APS_monitor_table_ID = amr.AMR_APS_monitor_table\r\n AND amt.AMT_table_name IN ('Document_header')\r\n WHERE amr.AMR_ArizonaRep_extraction_TS IS NULL;\r\n GO" } \ No newline at end of file diff --git a/chk-2a256de1-a831-4337-a883-7ee540cb4563.json b/chk-2a256de1-a831-4337-a883-7ee540cb4563.json index 8e8dafa..651c151 100644 --- a/chk-2a256de1-a831-4337-a883-7ee540cb4563.json +++ b/chk-2a256de1-a831-4337-a883-7ee540cb4563.json @@ -1,6 +1,6 @@ -{ - "id": "2a256de1-a831-4337-a883-7ee540cb4563", - "prefix": "chk", - "description": "Creates an extended event session, runs the code you want to test, extracts the output and then stops the session", - "body": "/**\r\nCopyright (c) Red Gate Software Ltd 2018\r\nAll rights Reserved. Use of this code is subject to the terms of a license agreement with Red Gate Software Limited.\r\n\r\nFor more info, see https://www.red-gate.com/hub/product-learning/sql-prompt/testing-performance-individual-sql-statements-within-batch-using-sql-prompt\r\n**/\r\n\r\nIF EXISTS --if the session already exists, then delete it. We are assuming you've changed something\r\n (\r\n SELECT * FROM sys.server_event_sessions\r\n WHERE server_event_sessions.name = 'CheckingSQLStatements'\r\n )\r\n DROP EVENT SESSION CheckingSQLStatements ON SERVER;\r\nGO\r\nCREATE EVENT SESSION CheckingSQLStatements --call it what you wish, of course\r\nON SERVER\r\n ADD EVENT sqlserver.sql_statement_completed --we just have one event\r\n (ACTION (sqlserver.database_name, sqlserver.sql_text, sqlserver.plan_handle)-- and these global vars\r\n WHERE (sqlserver.like_i_sql_unicode_string(sqlserver.sql_text, N'--Test these queries%'))\r\n\t --we just want the batch and nothing else so we put an identifying string at the start\r\n )\r\n ADD TARGET package0.ring_buffer \r\n --we don't need a more permanent record or a bucket count\r\nWITH (STARTUP_STATE = OFF);\r\nGO\r\nALTER EVENT SESSION CheckingSQLStatements ON SERVER STATE = START;\r\n--V-----The Batch being tested starts here ------V\r\nGO --don't change this next line without changing the WHERE clause above\r\n--Test these queries\r\n-------------------------------------------------------------------\r\n\r\n$SELECTEDTEXT$\r\n\r\n------------------------------------------------------------------\r\ngo\r\nDECLARE @Target_Data XML =\r\n (\r\n SELECT TOP 1 Cast(xet.target_data AS XML) AS targetdata\r\n FROM sys.dm_xe_session_targets AS xet\r\n INNER JOIN sys.dm_xe_sessions AS xes\r\n ON xes.address = xet.event_session_address\r\n WHERE xes.name = 'CheckingSQLStatements'\r\n AND xet.target_name = 'ring_buffer'\r\n );\r\nSELECT \r\nCONVERT(datetime2,\r\n SwitchOffset(CONVERT(datetimeoffset,the.event_data.value('(@timestamp)[1]', 'datetime2')),\r\n\t\tDateName(TzOffset, SYSDATETIMEOFFSET()))) AS datetime_local,\r\nCONVERT(DECIMAL(6,3),round(the.event_data.value('(data[@name=\"duration\"]/value)[1]', 'bigint')/1000000.0,3,1)) AS duration,\r\nthe.event_data.value('(data[@name=\"statement\"]/value)[1]', 'nvarchar(max)') AS [statement],\r\n--the.event_data.value('(action[@name=\"sql_text\"]/value)[1]', 'nvarchar(max)') AS sql_text,\r\n--the.event_data.value('(action[@name=\"database_name\"]/value)[1]', 'nvarchar(80)') AS [database_name],\r\nqp.query_plan,\r\nthe.event_data.value('(data[@name=\"cpu_time\"]/value)[1]', 'bigint') AS [cpu_time(microsSecs)],\r\nthe.event_data.value('(data[@name=\"physical_reads\"]/value)[1]', 'bigint') AS physical_reads,\r\nthe.event_data.value('(data[@name=\"logical_reads\"]/value)[1]', 'bigint') AS logical_reads,\r\nthe.event_data.value('(data[@name=\"writes\"]/value)[1]', 'bigint') AS writes,\r\nthe.event_data.value('(data[@name=\"row_count\"]/value)[1]', 'bigint') AS row_count\r\n--the.event_data.value('(data[@name=\"last_row_count\"]/value)[1]', 'int') AS last_row_count,\r\n--the.event_data.value('(data[@name=\"line_number\"]/value)[1]', 'int') AS line_number,\r\n--the.event_data.value('(data[@name=\"offset\"]/value)[1]', 'int') AS offset,\r\n--the.event_data.value('(data[@name=\"offset_end\"]/value)[1]', 'int') AS offset_end,\r\n\r\nFROM @Target_Data.nodes('//RingBufferTarget/event') AS the (event_data)\r\n CROSS APPLY sys.dm_exec_query_plan(\r\n Convert(varbinary(64),--convert to valid plan handle\r\n '0x' + the.event_data.value('(action[@name=\"plan_handle\"]/value)[1]', 'nvarchar(max)')\r\n\t\t ,1)) as qp\r\n\r\nALTER EVENT SESSION CheckingSQLStatements ON SERVER STATE = STOP;" +{ + "id": "2a256de1-a831-4337-a883-7ee540cb4563", + "prefix": "chk", + "description": "Creates an extended event session, runs the code you want to test, extracts the output and then stops the session", + "body": "/**\r\nCopyright (c) Red Gate Software Ltd 2018\r\nAll rights Reserved. Use of this code is subject to the terms of a license agreement with Red Gate Software Limited.\r\n\r\nFor more info, see https://www.red-gate.com/hub/product-learning/sql-prompt/testing-performance-individual-sql-statements-within-batch-using-sql-prompt\r\n**/\r\n\r\nIF EXISTS --if the session already exists, then delete it. We are assuming you've changed something\r\n (\r\n SELECT * FROM sys.server_event_sessions\r\n WHERE server_event_sessions.name = 'CheckingSQLStatements'\r\n )\r\n DROP EVENT SESSION CheckingSQLStatements ON SERVER;\r\nGO\r\nCREATE EVENT SESSION CheckingSQLStatements --call it what you wish, of course\r\nON SERVER\r\n ADD EVENT sqlserver.sql_statement_completed --we just have one event\r\n (ACTION (sqlserver.database_name, sqlserver.sql_text, sqlserver.plan_handle)-- and these global vars\r\n WHERE (sqlserver.like_i_sql_unicode_string(sqlserver.sql_text, N'--Test these queries%'))\r\n\t --we just want the batch and nothing else so we put an identifying string at the start\r\n )\r\n ADD TARGET package0.ring_buffer \r\n --we don't need a more permanent record or a bucket count\r\nWITH (STARTUP_STATE = OFF);\r\nGO\r\nALTER EVENT SESSION CheckingSQLStatements ON SERVER STATE = START;\r\n--V-----The Batch being tested starts here ------V\r\nGO --don't change this next line without changing the WHERE clause above\r\n--Test these queries\r\n-------------------------------------------------------------------\r\n\r\n$SELECTEDTEXT$\r\n\r\n------------------------------------------------------------------\r\ngo\r\nDECLARE @Target_Data XML =\r\n (\r\n SELECT TOP 1 Cast(xet.target_data AS XML) AS targetdata\r\n FROM sys.dm_xe_session_targets AS xet\r\n INNER JOIN sys.dm_xe_sessions AS xes\r\n ON xes.address = xet.event_session_address\r\n WHERE xes.name = 'CheckingSQLStatements'\r\n AND xet.target_name = 'ring_buffer'\r\n );\r\nSELECT \r\nCONVERT(datetime2,\r\n SwitchOffset(CONVERT(datetimeoffset,the.event_data.value('(@timestamp)[1]', 'datetime2')),\r\n\t\tDateName(TzOffset, SYSDATETIMEOFFSET()))) AS datetime_local,\r\nCONVERT(DECIMAL(6,3),round(the.event_data.value('(data[@name=\"duration\"]/value)[1]', 'bigint')/1000000.0,3,1)) AS duration,\r\nthe.event_data.value('(data[@name=\"statement\"]/value)[1]', 'nvarchar(max)') AS [statement],\r\n--the.event_data.value('(action[@name=\"sql_text\"]/value)[1]', 'nvarchar(max)') AS sql_text,\r\n--the.event_data.value('(action[@name=\"database_name\"]/value)[1]', 'nvarchar(80)') AS [database_name],\r\nqp.query_plan,\r\nthe.event_data.value('(data[@name=\"cpu_time\"]/value)[1]', 'bigint') AS [cpu_time(microsSecs)],\r\nthe.event_data.value('(data[@name=\"physical_reads\"]/value)[1]', 'bigint') AS physical_reads,\r\nthe.event_data.value('(data[@name=\"logical_reads\"]/value)[1]', 'bigint') AS logical_reads,\r\nthe.event_data.value('(data[@name=\"writes\"]/value)[1]', 'bigint') AS writes,\r\nthe.event_data.value('(data[@name=\"row_count\"]/value)[1]', 'bigint') AS row_count\r\n--the.event_data.value('(data[@name=\"last_row_count\"]/value)[1]', 'int') AS last_row_count,\r\n--the.event_data.value('(data[@name=\"line_number\"]/value)[1]', 'int') AS line_number,\r\n--the.event_data.value('(data[@name=\"offset\"]/value)[1]', 'int') AS offset,\r\n--the.event_data.value('(data[@name=\"offset_end\"]/value)[1]', 'int') AS offset_end,\r\n\r\nFROM @Target_Data.nodes('//RingBufferTarget/event') AS the (event_data)\r\n CROSS APPLY sys.dm_exec_query_plan(\r\n Convert(varbinary(64),--convert to valid plan handle\r\n '0x' + the.event_data.value('(action[@name=\"plan_handle\"]/value)[1]', 'nvarchar(max)')\r\n\t\t ,1)) as qp\r\n\r\nALTER EVENT SESSION CheckingSQLStatements ON SERVER STATE = STOP;" } \ No newline at end of file diff --git a/cj-284b1bd2-268f-4a55-9ba4-3e5eea6bf9ba.json b/cj-284b1bd2-268f-4a55-9ba4-3e5eea6bf9ba.json index bff9837..ebefff3 100644 --- a/cj-284b1bd2-268f-4a55-9ba4-3e5eea6bf9ba.json +++ b/cj-284b1bd2-268f-4a55-9ba4-3e5eea6bf9ba.json @@ -1,6 +1,6 @@ -{ - "id": "284b1bd2-268f-4a55-9ba4-3e5eea6bf9ba", - "prefix": "cj", - "description": "CROSS JOIN fragment", - "body": "CROSS JOIN " +{ + "id": "284b1bd2-268f-4a55-9ba4-3e5eea6bf9ba", + "prefix": "cj", + "description": "CROSS JOIN fragment", + "body": "CROSS JOIN " } \ No newline at end of file diff --git a/class_add-f5116e48-dbe8-4e51-8628-e4dc235bdb5a.json b/class_add-f5116e48-dbe8-4e51-8628-e4dc235bdb5a.json index 1a0128a..088047a 100644 --- a/class_add-f5116e48-dbe8-4e51-8628-e4dc235bdb5a.json +++ b/class_add-f5116e48-dbe8-4e51-8628-e4dc235bdb5a.json @@ -1,6 +1,6 @@ -{ - "id": "f5116e48-dbe8-4e51-8628-e4dc235bdb5a", - "prefix": "class_add", - "description": "add classification to a column", - "body": "ADD SENSITIVITY CLASSIFICATION TO $CURSOR$ WITH ( LABEL='Confidential', INFORMATION_TYPE='Galenica Used Personal Informations', RANK=High );" +{ + "id": "f5116e48-dbe8-4e51-8628-e4dc235bdb5a", + "prefix": "class_add", + "description": "add classification to a column", + "body": "ADD SENSITIVITY CLASSIFICATION TO $CURSOR$ WITH ( LABEL='Confidential', INFORMATION_TYPE='Galenica Used Personal Informations', RANK=High );" } \ No newline at end of file diff --git a/commvault_tpl-d21e6640-4e55-42d2-9035-f291e0f4c18d.json b/commvault_tpl-d21e6640-4e55-42d2-9035-f291e0f4c18d.json index cf4f914..c6b49a9 100644 --- a/commvault_tpl-d21e6640-4e55-42d2-9035-f291e0f4c18d.json +++ b/commvault_tpl-d21e6640-4e55-42d2-9035-f291e0f4c18d.json @@ -1,6 +1,6 @@ -{ - "id": "d21e6640-4e55-42d2-9035-f291e0f4c18d", - "prefix": "commvault_tpl", - "description": "", - "body": "/* \r\nSee https://galenica.atlassian.net/wiki/spaces/DBA/pages/247567427/CMD+-+Backup+and+Restore+with+CLR+and+SP+in+HCITools\r\nfor example how to use the CLR\r\n*/\r\nDECLARE @password varchar(255)\r\nSET @password = HCITools.dbo.fn_Decrypt(\r\n0x01000000C2811DD6D0339FF2EFE6AE1181B3469D18798020836E3E0A1E4BC96D548B4FCDFFB77F264E1A4F42AD91F785284A6F5D4F3E533B0355E88F91A61E7E671472D3F580FC36CCF0AE48858099190C1B7E3A1A2A292A3E8809B40EAB6EAECF3C0FF6871CAF54A3928615C21830602BCB12F1F973E4B4B1F34A613B342C397372596025DB62CB426319AE916D0DC5CCAED8A62675D7602D592A92);\r\n" +{ + "id": "d21e6640-4e55-42d2-9035-f291e0f4c18d", + "prefix": "commvault_tpl", + "description": "", + "body": "/* \r\nSee https://galenica.atlassian.net/wiki/spaces/DBA/pages/247567427/CMD+-+Backup+and+Restore+with+CLR+and+SP+in+HCITools\r\nfor example how to use the CLR\r\n*/\r\nDECLARE @password varchar(255)\r\nSET @password = HCITools.dbo.fn_Decrypt(\r\n0x01000000C2811DD6D0339FF2EFE6AE1181B3469D18798020836E3E0A1E4BC96D548B4FCDFFB77F264E1A4F42AD91F785284A6F5D4F3E533B0355E88F91A61E7E671472D3F580FC36CCF0AE48858099190C1B7E3A1A2A292A3E8809B40EAB6EAECF3C0FF6871CAF54A3928615C21830602BCB12F1F973E4B4B1F34A613B342C397372596025DB62CB426319AE916D0DC5CCAED8A62675D7602D592A92);\r\n" } \ No newline at end of file diff --git a/crs_start-ccd61e56-ded6-427a-9bd7-24200486cb1d.json b/crs_start-ccd61e56-ded6-427a-9bd7-24200486cb1d.json index f357510..20bdd2d 100644 --- a/crs_start-ccd61e56-ded6-427a-9bd7-24200486cb1d.json +++ b/crs_start-ccd61e56-ded6-427a-9bd7-24200486cb1d.json @@ -1,6 +1,6 @@ -{ - "id": "ccd61e56-ded6-427a-9bd7-24200486cb1d", - "prefix": "crs_start", - "description": "start crs logreader agent", - "body": "EXEC msdb.dbo.sp_start_job @job_name = N'DR00500 - Arizona Log reader' , @step_name = 'Log Reader Agent startup message.'" +{ + "id": "ccd61e56-ded6-427a-9bd7-24200486cb1d", + "prefix": "crs_start", + "description": "start crs logreader agent", + "body": "EXEC msdb.dbo.sp_start_job @job_name = N'DR00500 - Arizona Log reader' , @step_name = 'Log Reader Agent startup message.'" } \ No newline at end of file diff --git a/ct-692a606f-2cae-42d9-9f7a-587bb5c6d4bd.json b/ct-692a606f-2cae-42d9-9f7a-587bb5c6d4bd.json index b748026..c643a0d 100644 --- a/ct-692a606f-2cae-42d9-9f7a-587bb5c6d4bd.json +++ b/ct-692a606f-2cae-42d9-9f7a-587bb5c6d4bd.json @@ -1,6 +1,6 @@ -{ - "id": "692a606f-2cae-42d9-9f7a-587bb5c6d4bd", - "prefix": "ct", - "description": "Commit transaction", - "body": "COMMIT TRANSACTION " +{ + "id": "692a606f-2cae-42d9-9f7a-587bb5c6d4bd", + "prefix": "ct", + "description": "Commit transaction", + "body": "COMMIT TRANSACTION " } \ No newline at end of file diff --git a/curff-84019c93-ac72-47eb-a7ce-9fccf91bd020.json b/curff-84019c93-ac72-47eb-a7ce-9fccf91bd020.json index 457592e..fa28936 100644 --- a/curff-84019c93-ac72-47eb-a7ce-9fccf91bd020.json +++ b/curff-84019c93-ac72-47eb-a7ce-9fccf91bd020.json @@ -1,16 +1,16 @@ -{ - "id": "84019c93-ac72-47eb-a7ce-9fccf91bd020", - "prefix": "curff", - "description": "Fast-forward read-only cursor", - "body": "/* declare variables */\r\nDECLARE @variable INT\r\n\r\nDECLARE $cursor_name$ CURSOR FAST_FORWARD READ_ONLY FOR $select_statement$\r\n\r\nOPEN $cursor_name$\r\n\r\nFETCH NEXT FROM $cursor_name$ INTO @variable\r\n\r\nWHILE @@FETCH_STATUS = 0\r\nBEGIN\r\n $CURSOR$\r\n\r\n FETCH NEXT FROM $cursor_name$ INTO @variable\r\nEND\r\n\r\nCLOSE $cursor_name$\r\nDEALLOCATE $cursor_name$", - "placeholders": [ - { - "name": "cursor_name", - "defaultValue": "" - }, - { - "name": "select_statement", - "defaultValue": "" - } - ] +{ + "id": "84019c93-ac72-47eb-a7ce-9fccf91bd020", + "prefix": "curff", + "description": "Fast-forward read-only cursor", + "body": "/* declare variables */\r\nDECLARE @variable INT\r\n\r\nDECLARE $cursor_name$ CURSOR FAST_FORWARD READ_ONLY FOR $select_statement$\r\n\r\nOPEN $cursor_name$\r\n\r\nFETCH NEXT FROM $cursor_name$ INTO @variable\r\n\r\nWHILE @@FETCH_STATUS = 0\r\nBEGIN\r\n $CURSOR$\r\n\r\n FETCH NEXT FROM $cursor_name$ INTO @variable\r\nEND\r\n\r\nCLOSE $cursor_name$\r\nDEALLOCATE $cursor_name$", + "placeholders": [ + { + "name": "cursor_name", + "defaultValue": "" + }, + { + "name": "select_statement", + "defaultValue": "" + } + ] } \ No newline at end of file diff --git a/cv_central-8e435744-ec4a-4123-af8c-cb1f2203733b.json b/cv_central-8e435744-ec4a-4123-af8c-cb1f2203733b.json index e1119cd..4746e3d 100644 --- a/cv_central-8e435744-ec4a-4123-af8c-cb1f2203733b.json +++ b/cv_central-8e435744-ec4a-4123-af8c-cb1f2203733b.json @@ -1,12 +1,12 @@ -{ - "id": "8e435744-ec4a-4123-af8c-cb1f2203733b", - "prefix": "cv_central", - "description": "", - "body": "USE [Arizona]\r\nDECLARE @subsidiary_id INT \r\nDECLARE @out_default_value VARCHAR(MAX)\r\n\r\nSELECT [d].[BAPD_subsidiary], [d].[BAPD_value]\r\nFROM [dbo].[Bmc_application_key] k\r\n JOIN [dbo].[Bmc_application_default] d ON d.[BAPD_bmc_application_key] = k.[Bmc_application_key_ID]\r\nWHERE CAST(k.[BAPK_key] AS VARCHAR(MAX))= '$cv$'", - "placeholders": [ - { - "name": "cv", - "defaultValue": "cvPrimaryCareList" - } - ] +{ + "id": "8e435744-ec4a-4123-af8c-cb1f2203733b", + "prefix": "cv_central", + "description": "", + "body": "USE [Arizona]\r\nDECLARE @subsidiary_id INT \r\nDECLARE @out_default_value VARCHAR(MAX)\r\n\r\nSELECT [d].[BAPD_subsidiary], [d].[BAPD_value]\r\nFROM [dbo].[Bmc_application_key] k\r\n JOIN [dbo].[Bmc_application_default] d ON d.[BAPD_bmc_application_key] = k.[Bmc_application_key_ID]\r\nWHERE CAST(k.[BAPK_key] AS VARCHAR(MAX))= '$cv$'", + "placeholders": [ + { + "name": "cv", + "defaultValue": "cvPrimaryCareList" + } + ] } \ No newline at end of file diff --git a/cv_phcy-ecdf5c2f-962f-493a-b0fd-364a90b972e6.json b/cv_phcy-ecdf5c2f-962f-493a-b0fd-364a90b972e6.json index f654015..d1eb200 100644 --- a/cv_phcy-ecdf5c2f-962f-493a-b0fd-364a90b972e6.json +++ b/cv_phcy-ecdf5c2f-962f-493a-b0fd-364a90b972e6.json @@ -1,12 +1,12 @@ -{ - "id": "ecdf5c2f-962f-493a-b0fd-364a90b972e6", - "prefix": "cv_phcy", - "description": "", - "body": "USE [Arizona]\r\nDECLARE @subsidiary_id INT \r\nDECLARE @out_default_value VARCHAR(MAX)\r\n\r\n/* Get Subsidiary */\r\nselect @subsidiary_id = ou.ou_subsidiary\r\n from arizona.dbo.Bmc_application_key bapk (nolock)\r\n join Arizona.dbo.Bmc_application_default bapd (nolock)\r\n on bapd.bapd_bmc_application_key = bapk.bmc_application_key_id\r\n join arizona.dbo.organizational_unit ou (nolock)\r\n on ou.organizational_unit_id = bapd.bapd_value\r\n join arizona.dbo.address ad (nolock)\r\n on ad.address_id = ou.ou_address\r\n where bapk.bapk_key = 'cvCurrentOrganizationalUnit';\r\n\r\n/* Get Common Vars */\r\n\r\nexec dbo.sp_bmc_Bmc_Applic_Default @in_job_type = 3,\r\n @in_param_int_1 = null,\r\n @in_param_int_2 = @subsidiary_id,\r\n @in_param_varchar_1 = '$cv$',\r\n @out_default_value = @out_default_value output,\r\n @out_param_int_1 = null;\r\n\r\nselect @out_default_value AS cvPrimaryCareList, @subsidiary_id AS subsidiary_id\r\n\r\n\r\n\r\n", - "placeholders": [ - { - "name": "cv", - "defaultValue": "cvPrimaryCareList" - } - ] +{ + "id": "ecdf5c2f-962f-493a-b0fd-364a90b972e6", + "prefix": "cv_phcy", + "description": "", + "body": "USE [Arizona]\r\nDECLARE @subsidiary_id INT \r\nDECLARE @out_default_value VARCHAR(MAX)\r\n\r\n/* Get Subsidiary */\r\nselect @subsidiary_id = ou.ou_subsidiary\r\n from arizona.dbo.Bmc_application_key bapk (nolock)\r\n join Arizona.dbo.Bmc_application_default bapd (nolock)\r\n on bapd.bapd_bmc_application_key = bapk.bmc_application_key_id\r\n join arizona.dbo.organizational_unit ou (nolock)\r\n on ou.organizational_unit_id = bapd.bapd_value\r\n join arizona.dbo.address ad (nolock)\r\n on ad.address_id = ou.ou_address\r\n where bapk.bapk_key = 'cvCurrentOrganizationalUnit';\r\n\r\n/* Get Common Vars */\r\n\r\nexec dbo.sp_bmc_Bmc_Applic_Default @in_job_type = 3,\r\n @in_param_int_1 = null,\r\n @in_param_int_2 = @subsidiary_id,\r\n @in_param_varchar_1 = '$cv$',\r\n @out_default_value = @out_default_value output,\r\n @out_param_int_1 = null;\r\n\r\nselect @out_default_value AS cvPrimaryCareList, @subsidiary_id AS subsidiary_id\r\n\r\n\r\n\r\n", + "placeholders": [ + { + "name": "cv", + "defaultValue": "cvPrimaryCareList" + } + ] } \ No newline at end of file diff --git a/delTmp-23b38bb9-b1ef-4575-9094-2c5f382bdc8d.json b/delTmp-23b38bb9-b1ef-4575-9094-2c5f382bdc8d.json index e3d6bb8..734223f 100644 --- a/delTmp-23b38bb9-b1ef-4575-9094-2c5f382bdc8d.json +++ b/delTmp-23b38bb9-b1ef-4575-9094-2c5f382bdc8d.json @@ -1,6 +1,6 @@ -{ - "id": "23b38bb9-b1ef-4575-9094-2c5f382bdc8d", - "prefix": "delTmp", - "description": "delete temp table", - "body": "IF OBJECT_ID('tempdb..$PASTE$')IS NOT NULL BEGIN;\r\n DROP TABLE $PASTE$;\r\nEND;\r\n" +{ + "id": "23b38bb9-b1ef-4575-9094-2c5f382bdc8d", + "prefix": "delTmp", + "description": "delete temp table", + "body": "IF OBJECT_ID('tempdb..$PASTE$')IS NOT NULL BEGIN;\r\n DROP TABLE $PASTE$;\r\nEND;\r\n" } \ No newline at end of file diff --git a/df-fc0aed2f-0b61-41b6-8491-c49647582f43.json b/df-fc0aed2f-0b61-41b6-8491-c49647582f43.json index 5e002d0..7d8af6c 100644 --- a/df-fc0aed2f-0b61-41b6-8491-c49647582f43.json +++ b/df-fc0aed2f-0b61-41b6-8491-c49647582f43.json @@ -1,12 +1,12 @@ -{ - "id": "fc0aed2f-0b61-41b6-8491-c49647582f43", - "prefix": "df", - "description": "DELETE FROM fragment", - "body": "DELETE FROM $table_name$ WHERE $CURSOR$", - "placeholders": [ - { - "name": "table_name", - "defaultValue": "[schema].[table_name]" - } - ] +{ + "id": "fc0aed2f-0b61-41b6-8491-c49647582f43", + "prefix": "df", + "description": "DELETE FROM fragment", + "body": "DELETE FROM $table_name$ WHERE $CURSOR$", + "placeholders": [ + { + "name": "table_name", + "defaultValue": "[schema].[table_name]" + } + ] } \ No newline at end of file diff --git a/disable_all_jobs-67e4d51f-49ee-4e47-9cac-0bd7496371f3.json b/disable_all_jobs-67e4d51f-49ee-4e47-9cac-0bd7496371f3.json index df7c885..366a6e5 100644 --- a/disable_all_jobs-67e4d51f-49ee-4e47-9cac-0bd7496371f3.json +++ b/disable_all_jobs-67e4d51f-49ee-4e47-9cac-0bd7496371f3.json @@ -1,6 +1,6 @@ -{ - "id": "67e4d51f-49ee-4e47-9cac-0bd7496371f3", - "prefix": "disable_all_jobs", - "description": "generate sql to disable all jobs on the local server", - "body": "SELECT 'Exec MSDB.dbo.sp_update_job @job_name = N''' + SJ.name + ''', @Enabled = 0'\r\n FROM msdb..sysjobs SJ\r\n INNER JOIN msdb..syscategories SC\r\n ON SJ.category_id = SC.category_id\r\n WHERE [SJ].[enabled] = 1;" +{ + "id": "67e4d51f-49ee-4e47-9cac-0bd7496371f3", + "prefix": "disable_all_jobs", + "description": "generate sql to disable all jobs on the local server", + "body": "SELECT 'Exec MSDB.dbo.sp_update_job @job_name = N''' + SJ.name + ''', @Enabled = 0'\r\n FROM msdb..sysjobs SJ\r\n INNER JOIN msdb..syscategories SC\r\n ON SJ.category_id = SC.category_id\r\n WHERE [SJ].[enabled] = 1;" } \ No newline at end of file diff --git a/dmvBadIdx-b73c1b25-8626-469e-98a4-5a2ac1eabb64.json b/dmvBadIdx-b73c1b25-8626-469e-98a4-5a2ac1eabb64.json index 7e0bbf3..74bda0f 100644 --- a/dmvBadIdx-b73c1b25-8626-469e-98a4-5a2ac1eabb64.json +++ b/dmvBadIdx-b73c1b25-8626-469e-98a4-5a2ac1eabb64.json @@ -1,6 +1,6 @@ -{ - "id": "b73c1b25-8626-469e-98a4-5a2ac1eabb64", - "prefix": "dmvBadIdx", - "description": "check for bad indexes", - "body": "-- Possible Bad NC Indexes (writes > reads) (Query 52) (Bad NC Indexes)\r\nSELECT\tOBJECT_NAME(s.[object_id]) AS [Table Name]\r\n\t ,i.name AS [Index Name]\r\n\t ,i.index_id\r\n\t ,i.is_disabled\r\n\t ,i.is_hypothetical\r\n\t ,i.has_filter\r\n\t ,i.fill_factor\r\n\t ,user_updates AS [Total Writes]\r\n\t ,user_seeks + user_scans + user_lookups AS [Total Reads]\r\n\t ,user_updates - (user_seeks + user_scans + user_lookups) AS [Difference]\r\nFROM\tsys.dm_db_index_usage_stats AS s WITH (NOLOCK)\r\n\t\tINNER JOIN sys.indexes AS i WITH (NOLOCK) ON s.[object_id] = i.[object_id] AND i.index_id = s.index_id\r\nWHERE\tOBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1\r\n\t\tAND s.database_id = DB_ID()\r\n\t\tAND user_updates > (user_seeks + user_scans + user_lookups)\r\n\t\tAND i.index_id > 1\r\n\t\tAND (user_seeks + user_scans + user_lookups) = 0\r\nORDER BY [Difference] DESC\r\n\t ,[Total Writes] DESC\r\n\t ,[Total Reads] ASC\r\nOPTION\t(RECOMPILE)\r\n;\r\n\r\n-- Look for indexes with high numbers of writes and zero or very low numbers of reads\r\n-- Consider your complete workload, and how long your instance has been running\r\n-- Investigate further before dropping an index!\r\n" +{ + "id": "b73c1b25-8626-469e-98a4-5a2ac1eabb64", + "prefix": "dmvBadIdx", + "description": "check for bad indexes", + "body": "-- Possible Bad NC Indexes (writes > reads) (Query 52) (Bad NC Indexes)\r\nSELECT\tOBJECT_NAME(s.[object_id]) AS [Table Name]\r\n\t ,i.name AS [Index Name]\r\n\t ,i.index_id\r\n\t ,i.is_disabled\r\n\t ,i.is_hypothetical\r\n\t ,i.has_filter\r\n\t ,i.fill_factor\r\n\t ,user_updates AS [Total Writes]\r\n\t ,user_seeks + user_scans + user_lookups AS [Total Reads]\r\n\t ,user_updates - (user_seeks + user_scans + user_lookups) AS [Difference]\r\nFROM\tsys.dm_db_index_usage_stats AS s WITH (NOLOCK)\r\n\t\tINNER JOIN sys.indexes AS i WITH (NOLOCK) ON s.[object_id] = i.[object_id] AND i.index_id = s.index_id\r\nWHERE\tOBJECTPROPERTY(s.[object_id], 'IsUserTable') = 1\r\n\t\tAND s.database_id = DB_ID()\r\n\t\tAND user_updates > (user_seeks + user_scans + user_lookups)\r\n\t\tAND i.index_id > 1\r\n\t\tAND (user_seeks + user_scans + user_lookups) = 0\r\nORDER BY [Difference] DESC\r\n\t ,[Total Writes] DESC\r\n\t ,[Total Reads] ASC\r\nOPTION\t(RECOMPILE)\r\n;\r\n\r\n-- Look for indexes with high numbers of writes and zero or very low numbers of reads\r\n-- Consider your complete workload, and how long your instance has been running\r\n-- Investigate further before dropping an index!\r\n" } \ No newline at end of file diff --git a/dmvLatency-7df25f65-0eb1-414f-96d5-a150e26c6295.json b/dmvLatency-7df25f65-0eb1-414f-96d5-a150e26c6295.json index 4c44fec..7e864e9 100644 --- a/dmvLatency-7df25f65-0eb1-414f-96d5-a150e26c6295.json +++ b/dmvLatency-7df25f65-0eb1-414f-96d5-a150e26c6295.json @@ -1,6 +1,6 @@ -{ - "id": "7df25f65-0eb1-414f-96d5-a150e26c6295", - "prefix": "dmvLatency", - "description": "check disks latency. cumulative numbers since start of the server", - "body": "-- Drive level latency information (Query 19) (Drive Level Latency)\r\n-- Based on code from Jimmy May\r\nSELECT\t[Drive]\r\n\t ,CASE WHEN num_of_reads = 0 THEN 0\r\n\t\t\t ELSE (io_stall_read_ms / num_of_reads)\r\n\t\tEND AS [Read Latency]\r\n\t ,CASE WHEN io_stall_write_ms = 0 THEN 0\r\n\t\t\t ELSE (io_stall_write_ms / num_of_writes)\r\n\t\tEND AS [Write Latency]\r\n\t ,CASE WHEN (num_of_reads = 0 AND num_of_writes = 0 ) THEN 0\r\n\t\t\t ELSE (io_stall / (num_of_reads + num_of_writes))\r\n\t\tEND AS [Overall Latency]\r\n\t ,CASE WHEN num_of_reads = 0 THEN 0\r\n\t\t\t ELSE (num_of_bytes_read / num_of_reads)\r\n\t\tEND AS [Avg Bytes/Read]\r\n\t ,CASE WHEN io_stall_write_ms = 0 THEN 0\r\n\t\t\t ELSE (num_of_bytes_written / num_of_writes)\r\n\t\tEND AS [Avg Bytes/Write]\r\n\t ,CASE WHEN (num_of_reads = 0 AND num_of_writes = 0 ) THEN 0\r\n\t\t\t ELSE ((num_of_bytes_read + num_of_bytes_written) / (num_of_reads + num_of_writes))\r\n\t\tEND AS [Avg Bytes/Transfer]\r\nFROM\t(SELECT\tLEFT(UPPER(mf.physical_name), 2) AS Drive\r\n\t\t\t ,SUM(num_of_reads) AS num_of_reads\r\n\t\t\t ,SUM(io_stall_read_ms) AS io_stall_read_ms\r\n\t\t\t ,SUM(num_of_writes) AS num_of_writes\r\n\t\t\t ,SUM(io_stall_write_ms) AS io_stall_write_ms\r\n\t\t\t ,SUM(num_of_bytes_read) AS num_of_bytes_read\r\n\t\t\t ,SUM(num_of_bytes_written) AS num_of_bytes_written\r\n\t\t\t ,SUM(io_stall) AS io_stall\r\n\t\t FROM\tsys.dm_io_virtual_file_stats(NULL, NULL) AS vfs\r\n\t\t\t\tINNER JOIN sys.master_files AS mf WITH (NOLOCK) ON vfs.database_id = mf.database_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t AND vfs.file_id = mf.file_id\r\n\t\t GROUP BY LEFT(UPPER(mf.physical_name), 2)\r\n\t\t) AS tab\r\nORDER BY [Overall Latency]\r\nOPTION\t(RECOMPILE);\r\n\r\n-- Shows you the drive-level latency for reads and writes, in milliseconds\r\n" +{ + "id": "7df25f65-0eb1-414f-96d5-a150e26c6295", + "prefix": "dmvLatency", + "description": "check disks latency. cumulative numbers since start of the server", + "body": "-- Drive level latency information (Query 19) (Drive Level Latency)\r\n-- Based on code from Jimmy May\r\nSELECT\t[Drive]\r\n\t ,CASE WHEN num_of_reads = 0 THEN 0\r\n\t\t\t ELSE (io_stall_read_ms / num_of_reads)\r\n\t\tEND AS [Read Latency]\r\n\t ,CASE WHEN io_stall_write_ms = 0 THEN 0\r\n\t\t\t ELSE (io_stall_write_ms / num_of_writes)\r\n\t\tEND AS [Write Latency]\r\n\t ,CASE WHEN (num_of_reads = 0 AND num_of_writes = 0 ) THEN 0\r\n\t\t\t ELSE (io_stall / (num_of_reads + num_of_writes))\r\n\t\tEND AS [Overall Latency]\r\n\t ,CASE WHEN num_of_reads = 0 THEN 0\r\n\t\t\t ELSE (num_of_bytes_read / num_of_reads)\r\n\t\tEND AS [Avg Bytes/Read]\r\n\t ,CASE WHEN io_stall_write_ms = 0 THEN 0\r\n\t\t\t ELSE (num_of_bytes_written / num_of_writes)\r\n\t\tEND AS [Avg Bytes/Write]\r\n\t ,CASE WHEN (num_of_reads = 0 AND num_of_writes = 0 ) THEN 0\r\n\t\t\t ELSE ((num_of_bytes_read + num_of_bytes_written) / (num_of_reads + num_of_writes))\r\n\t\tEND AS [Avg Bytes/Transfer]\r\nFROM\t(SELECT\tLEFT(UPPER(mf.physical_name), 2) AS Drive\r\n\t\t\t ,SUM(num_of_reads) AS num_of_reads\r\n\t\t\t ,SUM(io_stall_read_ms) AS io_stall_read_ms\r\n\t\t\t ,SUM(num_of_writes) AS num_of_writes\r\n\t\t\t ,SUM(io_stall_write_ms) AS io_stall_write_ms\r\n\t\t\t ,SUM(num_of_bytes_read) AS num_of_bytes_read\r\n\t\t\t ,SUM(num_of_bytes_written) AS num_of_bytes_written\r\n\t\t\t ,SUM(io_stall) AS io_stall\r\n\t\t FROM\tsys.dm_io_virtual_file_stats(NULL, NULL) AS vfs\r\n\t\t\t\tINNER JOIN sys.master_files AS mf WITH (NOLOCK) ON vfs.database_id = mf.database_id\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t AND vfs.file_id = mf.file_id\r\n\t\t GROUP BY LEFT(UPPER(mf.physical_name), 2)\r\n\t\t) AS tab\r\nORDER BY [Overall Latency]\r\nOPTION\t(RECOMPILE);\r\n\r\n-- Shows you the drive-level latency for reads and writes, in milliseconds\r\n" } \ No newline at end of file diff --git a/dmvMissingIdx-19e1becb-0cc5-43c4-acc1-0854d9f98596.json b/dmvMissingIdx-19e1becb-0cc5-43c4-acc1-0854d9f98596.json index 35f8397..f3a467f 100644 --- a/dmvMissingIdx-19e1becb-0cc5-43c4-acc1-0854d9f98596.json +++ b/dmvMissingIdx-19e1becb-0cc5-43c4-acc1-0854d9f98596.json @@ -1,6 +1,6 @@ -{ - "id": "19e1becb-0cc5-43c4-acc1-0854d9f98596", - "prefix": "dmvMissingIdx", - "description": "list possible missing indexes", - "body": "-- Missing Indexes for all databases by Index Advantage (Query 22) (Missing Indexes All Databases)\r\nSELECT\tCONVERT(DECIMAL(18, 2), user_seeks * avg_total_user_cost * (avg_user_impact * 0.01)) AS [index_advantage]\r\n\t ,migs.last_user_seek\r\n\t ,mid.[statement] AS [Database.Schema.Table]\r\n\t ,mid.equality_columns\r\n\t ,mid.inequality_columns\r\n\t ,mid.included_columns\r\n\t ,migs.unique_compiles\r\n\t ,migs.user_seeks\r\n\t ,migs.avg_total_user_cost\r\n\t ,migs.avg_user_impact\r\nFROM\tsys.dm_db_missing_index_group_stats AS migs WITH (NOLOCK)\r\n\t\tINNER JOIN sys.dm_db_missing_index_groups AS mig WITH (NOLOCK) ON migs.group_handle = mig.index_group_handle\r\n\t\tINNER JOIN sys.dm_db_missing_index_details AS mid WITH (NOLOCK) ON mig.index_handle = mid.index_handle\r\nORDER BY index_advantage DESC\r\nOPTION\t(RECOMPILE);\r\n\r\n-- Getting missing index information for all of the databases on the instance is very useful\r\n-- Look at last user seek time, number of user seeks to help determine source and importance\r\n-- Also look at avg_user_impact and avg_total_user_cost to help determine importance\r\n-- SQL Server is overly eager to add included columns, so beware\r\n-- Do not just blindly add indexes that show up from this query!!!\r\n" +{ + "id": "19e1becb-0cc5-43c4-acc1-0854d9f98596", + "prefix": "dmvMissingIdx", + "description": "list possible missing indexes", + "body": "-- Missing Indexes for all databases by Index Advantage (Query 22) (Missing Indexes All Databases)\r\nSELECT\tCONVERT(DECIMAL(18, 2), user_seeks * avg_total_user_cost * (avg_user_impact * 0.01)) AS [index_advantage]\r\n\t ,migs.last_user_seek\r\n\t ,mid.[statement] AS [Database.Schema.Table]\r\n\t ,mid.equality_columns\r\n\t ,mid.inequality_columns\r\n\t ,mid.included_columns\r\n\t ,migs.unique_compiles\r\n\t ,migs.user_seeks\r\n\t ,migs.avg_total_user_cost\r\n\t ,migs.avg_user_impact\r\nFROM\tsys.dm_db_missing_index_group_stats AS migs WITH (NOLOCK)\r\n\t\tINNER JOIN sys.dm_db_missing_index_groups AS mig WITH (NOLOCK) ON migs.group_handle = mig.index_group_handle\r\n\t\tINNER JOIN sys.dm_db_missing_index_details AS mid WITH (NOLOCK) ON mig.index_handle = mid.index_handle\r\nORDER BY index_advantage DESC\r\nOPTION\t(RECOMPILE);\r\n\r\n-- Getting missing index information for all of the databases on the instance is very useful\r\n-- Look at last user seek time, number of user seeks to help determine source and importance\r\n-- Also look at avg_user_impact and avg_total_user_cost to help determine importance\r\n-- SQL Server is overly eager to add included columns, so beware\r\n-- Do not just blindly add indexes that show up from this query!!!\r\n" } \ No newline at end of file diff --git a/dmvReadWriteIdx-c5965ee1-0c12-4cea-a7a7-ae9638190683.json b/dmvReadWriteIdx-c5965ee1-0c12-4cea-a7a7-ae9638190683.json index d9d0635..4f187a6 100644 --- a/dmvReadWriteIdx-c5965ee1-0c12-4cea-a7a7-ae9638190683.json +++ b/dmvReadWriteIdx-c5965ee1-0c12-4cea-a7a7-ae9638190683.json @@ -1,6 +1,6 @@ -{ - "id": "c5965ee1-0c12-4cea-a7a7-ae9638190683", - "prefix": "dmvReadWriteIdx", - "description": "index read vs write stats", - "body": "--- Index Read/Write stats (all tables in current DB) ordered by Reads (Query 62) (Overall Index Usage - Reads)\r\nSELECT\ttblName = o.name\r\n\t\t,o.type\r\n\t ,i.name AS [IndexName]\r\n\t ,i.index_id\r\n\t ,user_seeks + user_scans + user_lookups AS [Reads]\r\n\t ,s.user_updates AS [Writes]\r\n\t ,i.type_desc AS [IndexType]\r\n\t ,i.fill_factor AS [FillFactor]\r\n\t ,i.has_filter\r\n\t ,i.filter_definition\r\n\t ,s.last_user_scan\r\n\t ,s.last_user_lookup\r\n\t ,s.last_user_seek\r\nFROM\tsys.dm_db_index_usage_stats AS s WITH (NOLOCK)\r\n\t\tINNER JOIN sys.indexes AS i WITH (NOLOCK) ON s.object_id = i.object_id\r\n\t\tINNER JOIN sys.objects o WITH (NOLOCK) ON s.object_id = o.object_id\r\nWHERE\to.type = 'U' -- user table\r\n\tAND i.index_id = s.index_id\r\n\tAND s.database_id = DB_ID()\r\n\t--AND o.name = 'tblRezeptZeile'\r\n\t--AND i.name = 'idxTblRezeptZeileUniProfilFK'\r\nORDER BY user_seeks + user_scans + user_lookups DESC -- Order by reads\r\n--ORDER BY s.user_updates DESC OPTION \t\t\t\t -- Order by writes\r\nOPTION\t(RECOMPILE);\r\n" +{ + "id": "c5965ee1-0c12-4cea-a7a7-ae9638190683", + "prefix": "dmvReadWriteIdx", + "description": "index read vs write stats", + "body": "--- Index Read/Write stats (all tables in current DB) ordered by Reads (Query 62) (Overall Index Usage - Reads)\r\nSELECT\ttblName = o.name\r\n\t\t,o.type\r\n\t ,i.name AS [IndexName]\r\n\t ,i.index_id\r\n\t ,user_seeks + user_scans + user_lookups AS [Reads]\r\n\t ,s.user_updates AS [Writes]\r\n\t ,i.type_desc AS [IndexType]\r\n\t ,i.fill_factor AS [FillFactor]\r\n\t ,i.has_filter\r\n\t ,i.filter_definition\r\n\t ,s.last_user_scan\r\n\t ,s.last_user_lookup\r\n\t ,s.last_user_seek\r\nFROM\tsys.dm_db_index_usage_stats AS s WITH (NOLOCK)\r\n\t\tINNER JOIN sys.indexes AS i WITH (NOLOCK) ON s.object_id = i.object_id\r\n\t\tINNER JOIN sys.objects o WITH (NOLOCK) ON s.object_id = o.object_id\r\nWHERE\to.type = 'U' -- user table\r\n\tAND i.index_id = s.index_id\r\n\tAND s.database_id = DB_ID()\r\n\t--AND o.name = 'tblRezeptZeile'\r\n\t--AND i.name = 'idxTblRezeptZeileUniProfilFK'\r\nORDER BY user_seeks + user_scans + user_lookups DESC -- Order by reads\r\n--ORDER BY s.user_updates DESC OPTION \t\t\t\t -- Order by writes\r\nOPTION\t(RECOMPILE);\r\n" } \ No newline at end of file diff --git a/dmvTopQueries-a4d55aef-b09a-41fc-8dfb-4cb38902d29a.json b/dmvTopQueries-a4d55aef-b09a-41fc-8dfb-4cb38902d29a.json index 9f0a1f7..2f61745 100644 --- a/dmvTopQueries-a4d55aef-b09a-41fc-8dfb-4cb38902d29a.json +++ b/dmvTopQueries-a4d55aef-b09a-41fc-8dfb-4cb38902d29a.json @@ -1,6 +1,6 @@ -{ - "id": "a4d55aef-b09a-41fc-8dfb-4cb38902d29a", - "prefix": "dmvTopQueries", - "description": "Top Cached SPs By Avg Elapsed Time ", - "body": "SELECT x.[SP Name]\r\n\t ,avg_elapsed_time = SUM(x.total_elapsed_time) / SUM(x.execution_count)\r\n\t ,total_elapsed_time = SUM(x.total_elapsed_time)\r\n\t ,execution_count = SUM(x.execution_count)\r\nFROM(\t\r\n\t\t-- Top Cached SPs By Avg Elapsed Time (SQL 2008 R2) (Query 45) (SP Avg Elapsed Time) \r\n\t\tSELECT TOP(50) p.name AS [SP Name], qs.total_elapsed_time/qs.execution_count AS [avg_elapsed_time], \r\n\t\tqs.total_elapsed_time, qs.execution_count, ISNULL(qs.execution_count/DATEDIFF(Minute, qs.cached_time, \r\n\t\tGETDATE()), 0) AS [Calls/Minute], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], \r\n\t\tqs.total_worker_time AS [TotalWorkerTime], qs.cached_time\r\n\t\tFROM sys.procedures AS p WITH (NOLOCK)\r\n\t\tINNER JOIN sys.dm_exec_procedure_stats AS qs WITH (NOLOCK)\r\n\t\tON p.[object_id] = qs.[object_id]\r\n\t\tWHERE qs.database_id = DB_ID()\r\n\t\tORDER BY avg_elapsed_time DESC \r\n\t) x \r\nGROUP BY x.[SP Name]\r\nORDER BY SUM(x.total_elapsed_time) DESC OPTION (RECOMPILE)\r\n\r\n-- This helps you find long-running cached stored procedures that\r\n-- may be easy to optimize with standard query tuning techniques\r\n" +{ + "id": "a4d55aef-b09a-41fc-8dfb-4cb38902d29a", + "prefix": "dmvTopQueries", + "description": "Top Cached SPs By Avg Elapsed Time ", + "body": "SELECT x.[SP Name]\r\n\t ,avg_elapsed_time = SUM(x.total_elapsed_time) / SUM(x.execution_count)\r\n\t ,total_elapsed_time = SUM(x.total_elapsed_time)\r\n\t ,execution_count = SUM(x.execution_count)\r\nFROM(\t\r\n\t\t-- Top Cached SPs By Avg Elapsed Time (SQL 2008 R2) (Query 45) (SP Avg Elapsed Time) \r\n\t\tSELECT TOP(50) p.name AS [SP Name], qs.total_elapsed_time/qs.execution_count AS [avg_elapsed_time], \r\n\t\tqs.total_elapsed_time, qs.execution_count, ISNULL(qs.execution_count/DATEDIFF(Minute, qs.cached_time, \r\n\t\tGETDATE()), 0) AS [Calls/Minute], qs.total_worker_time/qs.execution_count AS [AvgWorkerTime], \r\n\t\tqs.total_worker_time AS [TotalWorkerTime], qs.cached_time\r\n\t\tFROM sys.procedures AS p WITH (NOLOCK)\r\n\t\tINNER JOIN sys.dm_exec_procedure_stats AS qs WITH (NOLOCK)\r\n\t\tON p.[object_id] = qs.[object_id]\r\n\t\tWHERE qs.database_id = DB_ID()\r\n\t\tORDER BY avg_elapsed_time DESC \r\n\t) x \r\nGROUP BY x.[SP Name]\r\nORDER BY SUM(x.total_elapsed_time) DESC OPTION (RECOMPILE)\r\n\r\n-- This helps you find long-running cached stored procedures that\r\n-- may be easy to optimize with standard query tuning techniques\r\n" } \ No newline at end of file diff --git a/dmvTopWaits-cdc9ce01-725c-4483-9d8e-b8f0d878066e.json b/dmvTopWaits-cdc9ce01-725c-4483-9d8e-b8f0d878066e.json index 7dbb898..979c6e0 100644 --- a/dmvTopWaits-cdc9ce01-725c-4483-9d8e-b8f0d878066e.json +++ b/dmvTopWaits-cdc9ce01-725c-4483-9d8e-b8f0d878066e.json @@ -1,6 +1,6 @@ -{ - "id": "cdc9ce01-725c-4483-9d8e-b8f0d878066e", - "prefix": "dmvTopWaits", - "description": "Isolate top waits for server instance since last restart or wait statistics clear", - "body": "WITH [Waits] \r\nAS (SELECT wait_type, wait_time_ms/ 1000.0 AS [WaitS],\r\n (wait_time_ms - signal_wait_time_ms) / 1000.0 AS [ResourceS],\r\n signal_wait_time_ms / 1000.0 AS [SignalS],\r\n waiting_tasks_count AS [WaitCount],\r\n 100.0 * wait_time_ms / SUM (wait_time_ms) OVER() AS [Percentage],\r\n ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS [RowNum]\r\n FROM sys.dm_os_wait_stats WITH (NOLOCK)\r\n WHERE [wait_type] NOT IN (\r\n N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR', N'BROKER_TASK_STOP',\r\n\t\tN'BROKER_TO_FLUSH', N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',\r\n N'CHKPT', N'CLR_AUTO_EVENT', N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',\r\n N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE', N'DBMIRROR_WORKER_QUEUE',\r\n\t\tN'DBMIRRORING_CMD', N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',\r\n N'EXECSYNC', N'FSAGENT', N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',\r\n N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION', N'HADR_LOGCAPTURE_WAIT', \r\n\t\tN'HADR_NOTIFICATION_DEQUEUE', N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',\r\n N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP', N'LOGMGR_QUEUE', N'ONDEMAND_TASK_QUEUE',\r\n N'PWAIT_ALL_COMPONENTS_INITIALIZED', N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',\r\n N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP', N'REQUEST_FOR_DEADLOCK_SEARCH',\r\n\t\tN'RESOURCE_QUEUE', N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH', N'SLEEP_DBSTARTUP',\r\n\t\tN'SLEEP_DCOMSTARTUP', N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',\r\n N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP', N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',\r\n N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT', N'SP_SERVER_DIAGNOSTICS_SLEEP',\r\n\t\tN'SQLTRACE_BUFFER_FLUSH', N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', N'SQLTRACE_WAIT_ENTRIES',\r\n\t\tN'WAIT_FOR_RESULTS', N'WAITFOR', N'WAITFOR_TASKSHUTDOWN', N'WAIT_XTP_HOST_WAIT',\r\n\t\tN'WAIT_XTP_OFFLINE_CKPT_NEW_LOG', N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',\r\n N'XE_DISPATCHER_WAIT', N'XE_TIMER_EVENT')\r\n AND waiting_tasks_count > 0)\r\nSELECT\r\n MAX (W1.wait_type) AS [WaitType],\r\n CAST (MAX (W1.WaitS) AS DECIMAL (16,2)) AS [Wait_Sec],\r\n CAST (MAX (W1.ResourceS) AS DECIMAL (16,2)) AS [Resource_Sec],\r\n CAST (MAX (W1.SignalS) AS DECIMAL (16,2)) AS [Signal_Sec],\r\n MAX (W1.WaitCount) AS [Wait Count],\r\n CAST (MAX (W1.Percentage) AS DECIMAL (5,2)) AS [Wait Percentage],\r\n CAST ((MAX (W1.WaitS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgWait_Sec],\r\n CAST ((MAX (W1.ResourceS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgRes_Sec],\r\n CAST ((MAX (W1.SignalS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgSig_Sec]\r\nFROM Waits AS W1\r\nINNER JOIN Waits AS W2\r\nON W2.RowNum <= W1.RowNum\r\nGROUP BY W1.RowNum\r\nHAVING SUM (W2.Percentage) - MAX (W1.Percentage) < 99 -- percentage threshold\r\nOPTION (RECOMPILE);\r\n\r\n-- The SQL Server Wait Type Repository\r\n-- http://blogs.msdn.com/b/psssql/archive/2009/11/03/the-sql-server-wait-type-repository.aspx\r\n\r\n-- Wait statistics, or please tell me where it hurts\r\n-- http://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/\r\n\r\n-- SQL Server 2005 Performance Tuning using the Waits and Queues\r\n-- http://technet.microsoft.com/en-us/library/cc966413.aspx\r\n\r\n-- sys.dm_os_wait_stats (Transact-SQL)\r\n-- http://msdn.microsoft.com/en-us/library/ms179984(v=sql.105).aspx\r\n" +{ + "id": "cdc9ce01-725c-4483-9d8e-b8f0d878066e", + "prefix": "dmvTopWaits", + "description": "Isolate top waits for server instance since last restart or wait statistics clear", + "body": "WITH [Waits] \r\nAS (SELECT wait_type, wait_time_ms/ 1000.0 AS [WaitS],\r\n (wait_time_ms - signal_wait_time_ms) / 1000.0 AS [ResourceS],\r\n signal_wait_time_ms / 1000.0 AS [SignalS],\r\n waiting_tasks_count AS [WaitCount],\r\n 100.0 * wait_time_ms / SUM (wait_time_ms) OVER() AS [Percentage],\r\n ROW_NUMBER() OVER(ORDER BY wait_time_ms DESC) AS [RowNum]\r\n FROM sys.dm_os_wait_stats WITH (NOLOCK)\r\n WHERE [wait_type] NOT IN (\r\n N'BROKER_EVENTHANDLER', N'BROKER_RECEIVE_WAITFOR', N'BROKER_TASK_STOP',\r\n\t\tN'BROKER_TO_FLUSH', N'BROKER_TRANSMITTER', N'CHECKPOINT_QUEUE',\r\n N'CHKPT', N'CLR_AUTO_EVENT', N'CLR_MANUAL_EVENT', N'CLR_SEMAPHORE',\r\n N'DBMIRROR_DBM_EVENT', N'DBMIRROR_EVENTS_QUEUE', N'DBMIRROR_WORKER_QUEUE',\r\n\t\tN'DBMIRRORING_CMD', N'DIRTY_PAGE_POLL', N'DISPATCHER_QUEUE_SEMAPHORE',\r\n N'EXECSYNC', N'FSAGENT', N'FT_IFTS_SCHEDULER_IDLE_WAIT', N'FT_IFTSHC_MUTEX',\r\n N'HADR_CLUSAPI_CALL', N'HADR_FILESTREAM_IOMGR_IOCOMPLETION', N'HADR_LOGCAPTURE_WAIT', \r\n\t\tN'HADR_NOTIFICATION_DEQUEUE', N'HADR_TIMER_TASK', N'HADR_WORK_QUEUE',\r\n N'KSOURCE_WAKEUP', N'LAZYWRITER_SLEEP', N'LOGMGR_QUEUE', N'ONDEMAND_TASK_QUEUE',\r\n N'PWAIT_ALL_COMPONENTS_INITIALIZED', N'QDS_PERSIST_TASK_MAIN_LOOP_SLEEP',\r\n N'QDS_CLEANUP_STALE_QUERIES_TASK_MAIN_LOOP_SLEEP', N'REQUEST_FOR_DEADLOCK_SEARCH',\r\n\t\tN'RESOURCE_QUEUE', N'SERVER_IDLE_CHECK', N'SLEEP_BPOOL_FLUSH', N'SLEEP_DBSTARTUP',\r\n\t\tN'SLEEP_DCOMSTARTUP', N'SLEEP_MASTERDBREADY', N'SLEEP_MASTERMDREADY',\r\n N'SLEEP_MASTERUPGRADED', N'SLEEP_MSDBSTARTUP', N'SLEEP_SYSTEMTASK', N'SLEEP_TASK',\r\n N'SLEEP_TEMPDBSTARTUP', N'SNI_HTTP_ACCEPT', N'SP_SERVER_DIAGNOSTICS_SLEEP',\r\n\t\tN'SQLTRACE_BUFFER_FLUSH', N'SQLTRACE_INCREMENTAL_FLUSH_SLEEP', N'SQLTRACE_WAIT_ENTRIES',\r\n\t\tN'WAIT_FOR_RESULTS', N'WAITFOR', N'WAITFOR_TASKSHUTDOWN', N'WAIT_XTP_HOST_WAIT',\r\n\t\tN'WAIT_XTP_OFFLINE_CKPT_NEW_LOG', N'WAIT_XTP_CKPT_CLOSE', N'XE_DISPATCHER_JOIN',\r\n N'XE_DISPATCHER_WAIT', N'XE_TIMER_EVENT')\r\n AND waiting_tasks_count > 0)\r\nSELECT\r\n MAX (W1.wait_type) AS [WaitType],\r\n CAST (MAX (W1.WaitS) AS DECIMAL (16,2)) AS [Wait_Sec],\r\n CAST (MAX (W1.ResourceS) AS DECIMAL (16,2)) AS [Resource_Sec],\r\n CAST (MAX (W1.SignalS) AS DECIMAL (16,2)) AS [Signal_Sec],\r\n MAX (W1.WaitCount) AS [Wait Count],\r\n CAST (MAX (W1.Percentage) AS DECIMAL (5,2)) AS [Wait Percentage],\r\n CAST ((MAX (W1.WaitS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgWait_Sec],\r\n CAST ((MAX (W1.ResourceS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgRes_Sec],\r\n CAST ((MAX (W1.SignalS) / MAX (W1.WaitCount)) AS DECIMAL (16,4)) AS [AvgSig_Sec]\r\nFROM Waits AS W1\r\nINNER JOIN Waits AS W2\r\nON W2.RowNum <= W1.RowNum\r\nGROUP BY W1.RowNum\r\nHAVING SUM (W2.Percentage) - MAX (W1.Percentage) < 99 -- percentage threshold\r\nOPTION (RECOMPILE);\r\n\r\n-- The SQL Server Wait Type Repository\r\n-- http://blogs.msdn.com/b/psssql/archive/2009/11/03/the-sql-server-wait-type-repository.aspx\r\n\r\n-- Wait statistics, or please tell me where it hurts\r\n-- http://www.sqlskills.com/blogs/paul/wait-statistics-or-please-tell-me-where-it-hurts/\r\n\r\n-- SQL Server 2005 Performance Tuning using the Waits and Queues\r\n-- http://technet.microsoft.com/en-us/library/cc966413.aspx\r\n\r\n-- sys.dm_os_wait_stats (Transact-SQL)\r\n-- http://msdn.microsoft.com/en-us/library/ms179984(v=sql.105).aspx\r\n" } \ No newline at end of file diff --git a/dmvWaitLocks-bf168303-81c4-4341-8b76-0a8a152f1404.json b/dmvWaitLocks-bf168303-81c4-4341-8b76-0a8a152f1404.json index 5815fde..cffb628 100644 --- a/dmvWaitLocks-bf168303-81c4-4341-8b76-0a8a152f1404.json +++ b/dmvWaitLocks-bf168303-81c4-4341-8b76-0a8a152f1404.json @@ -1,6 +1,6 @@ -{ - "id": "bf168303-81c4-4341-8b76-0a8a152f1404", - "prefix": "dmvWaitLocks", - "description": "Get lock waits for current database ", - "body": "-- Get lock waits for current database (Query 64) (Lock Waits)\r\nSELECT\to.name AS [table_name]\r\n\t ,i.name AS [index_name]\r\n\t ,ios.index_id\r\n\t ,ios.partition_number\r\n\t ,SUM(ios.row_lock_wait_count) AS [total_row_lock_waits]\r\n\t ,SUM(ios.row_lock_wait_in_ms) AS [total_row_lock_wait_in_ms]\r\n\t ,SUM(ios.page_lock_wait_count) AS [total_page_lock_waits]\r\n\t ,SUM(ios.page_lock_wait_in_ms) AS [total_page_lock_wait_in_ms]\r\n\t ,SUM(ios.page_lock_wait_in_ms) + SUM(row_lock_wait_in_ms) AS [total_lock_wait_in_ms]\r\nFROM\tsys.dm_db_index_operational_stats(DB_ID(), NULL, NULL, NULL) AS ios\r\n\t\tINNER JOIN sys.objects AS o WITH (NOLOCK) ON ios.[object_id] = o.[object_id]\r\n\t\tINNER JOIN sys.indexes AS i WITH (NOLOCK) ON ios.[object_id] = i.[object_id]\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t AND ios.index_id = i.index_id\r\nWHERE\to.[object_id] > 100\r\nGROUP BY o.name\r\n\t ,i.name\r\n\t ,ios.index_id\r\n\t ,ios.partition_number\r\nHAVING\tSUM(ios.page_lock_wait_in_ms) + SUM(row_lock_wait_in_ms) > 0\r\nORDER BY total_lock_wait_in_ms DESC\r\nOPTION\t(RECOMPILE);\r\n" +{ + "id": "bf168303-81c4-4341-8b76-0a8a152f1404", + "prefix": "dmvWaitLocks", + "description": "Get lock waits for current database ", + "body": "-- Get lock waits for current database (Query 64) (Lock Waits)\r\nSELECT\to.name AS [table_name]\r\n\t ,i.name AS [index_name]\r\n\t ,ios.index_id\r\n\t ,ios.partition_number\r\n\t ,SUM(ios.row_lock_wait_count) AS [total_row_lock_waits]\r\n\t ,SUM(ios.row_lock_wait_in_ms) AS [total_row_lock_wait_in_ms]\r\n\t ,SUM(ios.page_lock_wait_count) AS [total_page_lock_waits]\r\n\t ,SUM(ios.page_lock_wait_in_ms) AS [total_page_lock_wait_in_ms]\r\n\t ,SUM(ios.page_lock_wait_in_ms) + SUM(row_lock_wait_in_ms) AS [total_lock_wait_in_ms]\r\nFROM\tsys.dm_db_index_operational_stats(DB_ID(), NULL, NULL, NULL) AS ios\r\n\t\tINNER JOIN sys.objects AS o WITH (NOLOCK) ON ios.[object_id] = o.[object_id]\r\n\t\tINNER JOIN sys.indexes AS i WITH (NOLOCK) ON ios.[object_id] = i.[object_id]\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t AND ios.index_id = i.index_id\r\nWHERE\to.[object_id] > 100\r\nGROUP BY o.name\r\n\t ,i.name\r\n\t ,ios.index_id\r\n\t ,ios.partition_number\r\nHAVING\tSUM(ios.page_lock_wait_in_ms) + SUM(row_lock_wait_in_ms) > 0\r\nORDER BY total_lock_wait_in_ms DESC\r\nOPTION\t(RECOMPILE);\r\n" } \ No newline at end of file diff --git a/dump-6115073f-913a-4afd-adfa-879dd4faf94d.json b/dump-6115073f-913a-4afd-adfa-879dd4faf94d.json index 0048594..b2d1e20 100644 --- a/dump-6115073f-913a-4afd-adfa-879dd4faf94d.json +++ b/dump-6115073f-913a-4afd-adfa-879dd4faf94d.json @@ -1,6 +1,6 @@ -{ - "id": "6115073f-913a-4afd-adfa-879dd4faf94d", - "prefix": "dump", - "description": "make a full instance dump", - "body": "EXEC [HCITools].dbo.[bkp_Dump] @in_Recovery_Model = 'FULL,SIMPLE';" +{ + "id": "6115073f-913a-4afd-adfa-879dd4faf94d", + "prefix": "dump", + "description": "make a full instance dump", + "body": "EXEC [HCITools].dbo.[bkp_Dump] @in_Recovery_Model = 'FULL,SIMPLE';" } \ No newline at end of file diff --git a/eata-8a40a419-39e7-47d4-b0d2-823dd63f03d6.json b/eata-8a40a419-39e7-47d4-b0d2-823dd63f03d6.json index e66e504..74fefa7 100644 --- a/eata-8a40a419-39e7-47d4-b0d2-823dd63f03d6.json +++ b/eata-8a40a419-39e7-47d4-b0d2-823dd63f03d6.json @@ -1,6 +1,6 @@ -{ - "id": "8a40a419-39e7-47d4-b0d2-823dd63f03d6", - "prefix": "eata", - "description": "Add column (enhanced edition)", - "body": "/**\r\nCopyright (c) Red Gate Software Ltd 2018\r\nAll rights Reserved. Use of this code is subject to the terms of a license agreement with Red Gate Software Limited.\r\n\r\nFor more info, see https://www.red-gate.com/hub/product-learning/sql-prompt/customizing-sql-prompt-built-snippets-better-ata-snippet\r\n**/\r\n\r\nUSE \r\nGO\r\n \r\n-- Add a new column to the table\r\nALTER TABLE .\r\n ADD -- \r\nGO\r\nEXEC sys.sp_addextendedproperty \r\n@name = N'MS_Description', \r\n@value = N'', \r\n@level0type = N'SCHEMA', @level0name = , \r\n@level1type = N'TABLE', @level1name =
,\r\n@level2type = N'COLUMN', @level2name = ;" +{ + "id": "8a40a419-39e7-47d4-b0d2-823dd63f03d6", + "prefix": "eata", + "description": "Add column (enhanced edition)", + "body": "/**\r\nCopyright (c) Red Gate Software Ltd 2018\r\nAll rights Reserved. Use of this code is subject to the terms of a license agreement with Red Gate Software Limited.\r\n\r\nFor more info, see https://www.red-gate.com/hub/product-learning/sql-prompt/customizing-sql-prompt-built-snippets-better-ata-snippet\r\n**/\r\n\r\nUSE \r\nGO\r\n \r\n-- Add a new column to the table\r\nALTER TABLE .
\r\n ADD -- \r\nGO\r\nEXEC sys.sp_addextendedproperty \r\n@name = N'MS_Description', \r\n@value = N'', \r\n@level0type = N'SCHEMA', @level0name = , \r\n@level1type = N'TABLE', @level1name =
,\r\n@level2type = N'COLUMN', @level2name = ;" } \ No newline at end of file diff --git a/find_fk-92471cc6-9e3b-446c-995c-8ce2f9905b3f.json b/find_fk-92471cc6-9e3b-446c-995c-8ce2f9905b3f.json index 957e13c..c3a5828 100644 --- a/find_fk-92471cc6-9e3b-446c-995c-8ce2f9905b3f.json +++ b/find_fk-92471cc6-9e3b-446c-995c-8ce2f9905b3f.json @@ -1,6 +1,6 @@ -{ - "id": "92471cc6-9e3b-446c-995c-8ce2f9905b3f", - "prefix": "find_fk", - "description": "find fk in a db, per tables, schema, or all", - "body": "SELECT\r\n SCHEMA_NAME(tab.SCHEMA_ID) + '.' + tab.name AS [table]\r\n ,col.column_id\r\n ,col.name AS column_name\r\n ,CASE\r\n WHEN fk.OBJECT_ID IS NOT NULL THEN '>-'\r\n ELSE NULL\r\n END AS rel\r\n ,SCHEMA_NAME(pk_tab.SCHEMA_ID) + '.' + pk_tab.name AS primary_table\r\n ,pk_col.name AS pk_column_name\r\n ,fk_cols.constraint_column_id AS NO\r\n ,fk.name AS fk_constraint_name\r\nFROM sys.tables tab\r\n INNER JOIN sys.columns col\r\n ON col.OBJECT_ID = tab.OBJECT_ID\r\n LEFT OUTER JOIN sys.foreign_key_columns fk_cols\r\n ON fk_cols.parent_object_id = tab.OBJECT_ID\r\n AND fk_cols.parent_column_id = col.column_id\r\n LEFT OUTER JOIN sys.foreign_keys fk\r\n ON fk.OBJECT_ID = fk_cols.constraint_object_id\r\n LEFT OUTER JOIN sys.tables pk_tab\r\n ON pk_tab.OBJECT_ID = fk_cols.referenced_object_id\r\n LEFT OUTER JOIN sys.columns pk_col\r\n ON pk_col.column_id = fk_cols.referenced_column_id\r\n AND pk_col.OBJECT_ID = fk_cols.referenced_object_id\r\nWHERE fk.OBJECT_ID IS NOT NULL\r\nAND SCHEMA_NAME(tab.SCHEMA_ID) = 'dbo'\r\n--AND tab.name='entry'$CURSOR$\r\nORDER BY SCHEMA_NAME(tab.SCHEMA_ID) + '.' + tab.name\r\n ,col.column_id;" +{ + "id": "92471cc6-9e3b-446c-995c-8ce2f9905b3f", + "prefix": "find_fk", + "description": "find fk in a db, per tables, schema, or all", + "body": "SELECT\r\n SCHEMA_NAME(tab.SCHEMA_ID) + '.' + tab.name AS [table]\r\n ,col.column_id\r\n ,col.name AS column_name\r\n ,CASE\r\n WHEN fk.OBJECT_ID IS NOT NULL THEN '>-'\r\n ELSE NULL\r\n END AS rel\r\n ,SCHEMA_NAME(pk_tab.SCHEMA_ID) + '.' + pk_tab.name AS primary_table\r\n ,pk_col.name AS pk_column_name\r\n ,fk_cols.constraint_column_id AS NO\r\n ,fk.name AS fk_constraint_name\r\nFROM sys.tables tab\r\n INNER JOIN sys.columns col\r\n ON col.OBJECT_ID = tab.OBJECT_ID\r\n LEFT OUTER JOIN sys.foreign_key_columns fk_cols\r\n ON fk_cols.parent_object_id = tab.OBJECT_ID\r\n AND fk_cols.parent_column_id = col.column_id\r\n LEFT OUTER JOIN sys.foreign_keys fk\r\n ON fk.OBJECT_ID = fk_cols.constraint_object_id\r\n LEFT OUTER JOIN sys.tables pk_tab\r\n ON pk_tab.OBJECT_ID = fk_cols.referenced_object_id\r\n LEFT OUTER JOIN sys.columns pk_col\r\n ON pk_col.column_id = fk_cols.referenced_column_id\r\n AND pk_col.OBJECT_ID = fk_cols.referenced_object_id\r\nWHERE fk.OBJECT_ID IS NOT NULL\r\nAND SCHEMA_NAME(tab.SCHEMA_ID) = 'dbo'\r\n--AND tab.name='entry'$CURSOR$\r\nORDER BY SCHEMA_NAME(tab.SCHEMA_ID) + '.' + tab.name\r\n ,col.column_id;" } \ No newline at end of file diff --git a/find_query_plan_handle-e179aa64-7830-440b-a199-9c0a65750a8f.json b/find_query_plan_handle-e179aa64-7830-440b-a199-9c0a65750a8f.json index a2862a5..3d61a6c 100644 --- a/find_query_plan_handle-e179aa64-7830-440b-a199-9c0a65750a8f.json +++ b/find_query_plan_handle-e179aa64-7830-440b-a199-9c0a65750a8f.json @@ -1,6 +1,6 @@ -{ - "id": "e179aa64-7830-440b-a199-9c0a65750a8f", - "prefix": "find_query_plan_handle", - "description": "find a query plan from the cache and if needed drop it from the cache", - "body": "DECLARE @SearchForSql AS NVARCHAR(MAX) = N'TEXT_TO_FIND';\r\n\r\nSELECT usecounts,\r\n cacheobjtype,\r\n objtype,\r\n text,\r\n query_plan,\r\n [plan_handle]\r\n FROM sys.dm_exec_cached_plans\r\n CROSS APPLY sys.dm_exec_sql_text(plan_handle)\r\n CROSS APPLY sys.dm_exec_query_plan(plan_handle)\r\n WHERE text LIKE CONCAT('%', @SearchForSql, '%')\r\n AND text NOT LIKE '%-- Self Reference Marker --%';\r\n\r\n--DBCC FREEPROCCACHE (plan_handle_id_goes_here)" +{ + "id": "e179aa64-7830-440b-a199-9c0a65750a8f", + "prefix": "find_query_plan_handle", + "description": "find a query plan from the cache and if needed drop it from the cache", + "body": "DECLARE @SearchForSql AS NVARCHAR(MAX) = N'TEXT_TO_FIND';\r\n\r\nSELECT usecounts,\r\n cacheobjtype,\r\n objtype,\r\n text,\r\n query_plan,\r\n [plan_handle]\r\n FROM sys.dm_exec_cached_plans\r\n CROSS APPLY sys.dm_exec_sql_text(plan_handle)\r\n CROSS APPLY sys.dm_exec_query_plan(plan_handle)\r\n WHERE text LIKE CONCAT('%', @SearchForSql, '%')\r\n AND text NOT LIKE '%-- Self Reference Marker --%';\r\n\r\n--DBCC FREEPROCCACHE (plan_handle_id_goes_here)" } \ No newline at end of file diff --git a/fj-1eb7ea47-6ad2-40fd-a2b6-810996566e41.json b/fj-1eb7ea47-6ad2-40fd-a2b6-810996566e41.json index 1f888eb..550ec51 100644 --- a/fj-1eb7ea47-6ad2-40fd-a2b6-810996566e41.json +++ b/fj-1eb7ea47-6ad2-40fd-a2b6-810996566e41.json @@ -1,6 +1,6 @@ -{ - "id": "1eb7ea47-6ad2-40fd-a2b6-810996566e41", - "prefix": "fj", - "description": "FULL JOIN fragment", - "body": "FULL JOIN " +{ + "id": "1eb7ea47-6ad2-40fd-a2b6-810996566e41", + "prefix": "fj", + "description": "FULL JOIN fragment", + "body": "FULL JOIN " } \ No newline at end of file diff --git a/flh-03c4d511-8dc8-4ca8-9893-a5b7bcaf6181.json b/flh-03c4d511-8dc8-4ca8-9893-a5b7bcaf6181.json index fee527c..a7144ca 100644 --- a/flh-03c4d511-8dc8-4ca8-9893-a5b7bcaf6181.json +++ b/flh-03c4d511-8dc8-4ca8-9893-a5b7bcaf6181.json @@ -1,6 +1,6 @@ -{ - "id": "03c4d511-8dc8-4ca8-9893-a5b7bcaf6181", - "prefix": "flh", - "description": "print message without waiting for buffer to fill", - "body": "RAISERROR ('$CURSOR$', 0, 1) WITH NOWAIT;\r\n" +{ + "id": "03c4d511-8dc8-4ca8-9893-a5b7bcaf6181", + "prefix": "flh", + "description": "print message without waiting for buffer to fill", + "body": "RAISERROR ('$CURSOR$', 0, 1) WITH NOWAIT;\r\n" } \ No newline at end of file diff --git a/foj-b28b4fb4-9f5f-407b-93a0-81134c0d51d7.json b/foj-b28b4fb4-9f5f-407b-93a0-81134c0d51d7.json index 1dd3a1d..07a748f 100644 --- a/foj-b28b4fb4-9f5f-407b-93a0-81134c0d51d7.json +++ b/foj-b28b4fb4-9f5f-407b-93a0-81134c0d51d7.json @@ -1,6 +1,6 @@ -{ - "id": "b28b4fb4-9f5f-407b-93a0-81134c0d51d7", - "prefix": "foj", - "description": "FULL OUTER JOIN fragment", - "body": "FULL OUTER JOIN " +{ + "id": "b28b4fb4-9f5f-407b-93a0-81134c0d51d7", + "prefix": "foj", + "description": "FULL OUTER JOIN fragment", + "body": "FULL OUTER JOIN " } \ No newline at end of file diff --git a/free_disk_space-59cdebdd-b515-4da4-b9f2-b5a552d5d736.json b/free_disk_space-59cdebdd-b515-4da4-b9f2-b5a552d5d736.json index 6fcc700..9920377 100644 --- a/free_disk_space-59cdebdd-b515-4da4-b9f2-b5a552d5d736.json +++ b/free_disk_space-59cdebdd-b515-4da4-b9f2-b5a552d5d736.json @@ -1,6 +1,6 @@ -{ - "id": "59cdebdd-b515-4da4-b9f2-b5a552d5d736", - "prefix": "free_disk_space", - "description": "list disk usage and free space where db files are present", - "body": "--free disk space\r\nselect distinct\r\nconvert(varchar(512), b.volume_mount_point) as [volume_mount_point]\r\n, convert(varchar(512), b.logical_volume_name) as [logical_volume_name]\r\n, convert(decimal(18,1), round(((convert(float, b.available_bytes) / convert(float, b.total_bytes)) * 100),1)) as [percent_free]\r\n, convert(bigint, round(((b.available_bytes / 1024.0)/1024.0),0)) as [free_mb]\r\n, convert(bigint, round(((b.total_bytes / 1024.0)/1024.0),0)) as [total_mb]\r\n, convert(bigint, round((((b.total_bytes - b.available_bytes) / 1024.0)/1024.0),0)) as [used_mb]\r\n, CURRENT_TIMESTAMP AS now\r\n,REPLACE(@@SERVERNAME ,'\\apssql','')AS srvName\r\nfrom sys.master_files as [a]\r\nCROSS APPLY sys.dm_os_volume_stats(a.database_id, a.[file_id]) as [b]\r\nORDER BY [percent_free] ASC \r\n" +{ + "id": "59cdebdd-b515-4da4-b9f2-b5a552d5d736", + "prefix": "free_disk_space", + "description": "list disk usage and free space where db files are present", + "body": "--free disk space\r\nselect distinct\r\nconvert(varchar(512), b.volume_mount_point) as [volume_mount_point]\r\n, convert(varchar(512), b.logical_volume_name) as [logical_volume_name]\r\n, convert(decimal(18,1), round(((convert(float, b.available_bytes) / convert(float, b.total_bytes)) * 100),1)) as [percent_free]\r\n, convert(bigint, round(((b.available_bytes / 1024.0)/1024.0),0)) as [free_mb]\r\n, convert(bigint, round(((b.total_bytes / 1024.0)/1024.0),0)) as [total_mb]\r\n, convert(bigint, round((((b.total_bytes - b.available_bytes) / 1024.0)/1024.0),0)) as [used_mb]\r\n, CURRENT_TIMESTAMP AS now\r\n,REPLACE(@@SERVERNAME ,'\\apssql','')AS srvName\r\nfrom sys.master_files as [a]\r\nCROSS APPLY sys.dm_os_volume_stats(a.database_id, a.[file_id]) as [b]\r\nORDER BY [percent_free] ASC \r\n" } \ No newline at end of file diff --git a/gb-08831009-8e82-449e-ba11-53c03289ed6f.json b/gb-08831009-8e82-449e-ba11-53c03289ed6f.json index c811a34..357eba4 100644 --- a/gb-08831009-8e82-449e-ba11-53c03289ed6f.json +++ b/gb-08831009-8e82-449e-ba11-53c03289ed6f.json @@ -1,6 +1,6 @@ -{ - "id": "08831009-8e82-449e-ba11-53c03289ed6f", - "prefix": "gb", - "description": "GROUP BY fragment", - "body": "GROUP BY " +{ + "id": "08831009-8e82-449e-ba11-53c03289ed6f", + "prefix": "gb", + "description": "GROUP BY fragment", + "body": "GROUP BY " } \ No newline at end of file diff --git a/get_ou-fcdb6507-ae0e-4736-85b1-f88b50c64ab0.json b/get_ou-fcdb6507-ae0e-4736-85b1-f88b50c64ab0.json index 3bd1258..a869caf 100644 --- a/get_ou-fcdb6507-ae0e-4736-85b1-f88b50c64ab0.json +++ b/get_ou-fcdb6507-ae0e-4736-85b1-f88b50c64ab0.json @@ -1,6 +1,6 @@ -{ - "id": "fcdb6507-ae0e-4736-85b1-f88b50c64ab0", - "prefix": "get_ou", - "description": "get the local pharmacy OU into @ou_id", - "body": "DECLARE @ou_id INT \r\nEXEC Arizona.dbo.sp_bmc_Bmc_Applic_Default \r\n @in_job_type = 3,\r\n @in_param_int_1 = null, /* Company */\r\n @in_param_int_2 = null, /* Subsidiary */\r\n @in_param_varchar_1 = 'cvCurrentOrganizationalUnit',\r\n @out_default_value = @ou_id output,\r\n @out_param_int_1 = null" +{ + "id": "fcdb6507-ae0e-4736-85b1-f88b50c64ab0", + "prefix": "get_ou", + "description": "get the local pharmacy OU into @ou_id", + "body": "DECLARE @ou_id INT \r\nEXEC Arizona.dbo.sp_bmc_Bmc_Applic_Default \r\n @in_job_type = 3,\r\n @in_param_int_1 = null, /* Company */\r\n @in_param_int_2 = null, /* Subsidiary */\r\n @in_param_varchar_1 = 'cvCurrentOrganizationalUnit',\r\n @out_default_value = @ou_id output,\r\n @out_param_int_1 = null" } \ No newline at end of file diff --git a/hdr-2936aeed-26d4-416e-8c83-40b190dfca8a.json b/hdr-2936aeed-26d4-416e-8c83-40b190dfca8a.json index 9b6dfb0..640cec3 100644 --- a/hdr-2936aeed-26d4-416e-8c83-40b190dfca8a.json +++ b/hdr-2936aeed-26d4-416e-8c83-40b190dfca8a.json @@ -1,16 +1,16 @@ -{ - "id": "2936aeed-26d4-416e-8c83-40b190dfca8a", - "prefix": "hdr", - "description": "simple header", - "body": "/*============================================================================= \r\n\r\n$summary$\r\n\r\nParameters\r\n----------------------\r\n\r\n\r\nContext\r\n----------------------\r\n$contexte$\r\n\r\nCreation : $DATE(dd.MM.yyyy)$ / TSC\r\nModifications:\r\n\r\n=============================================================================*/ ", - "placeholders": [ - { - "name": "summary", - "defaultValue": "What does it does ?" - }, - { - "name": "contexte", - "defaultValue": "What is the context, where does it needs to run ?" - } - ] +{ + "id": "2936aeed-26d4-416e-8c83-40b190dfca8a", + "prefix": "hdr", + "description": "simple header", + "body": "/*============================================================================= \r\n\r\n$summary$\r\n\r\nParameters\r\n----------------------\r\n\r\n\r\nContext\r\n----------------------\r\n$contexte$\r\n\r\nCreation : $DATE(dd.MM.yyyy)$ / TSC\r\nModifications:\r\n\r\n=============================================================================*/ ", + "placeholders": [ + { + "name": "summary", + "defaultValue": "What does it does ?" + }, + { + "name": "contexte", + "defaultValue": "What is the context, where does it needs to run ?" + } + ] } \ No newline at end of file diff --git a/heap-4c4fa08a-025e-4fc1-b7a6-0eeec07eda83.json b/heap-4c4fa08a-025e-4fc1-b7a6-0eeec07eda83.json index b0e837d..4668bb4 100644 --- a/heap-4c4fa08a-025e-4fc1-b7a6-0eeec07eda83.json +++ b/heap-4c4fa08a-025e-4fc1-b7a6-0eeec07eda83.json @@ -1,6 +1,6 @@ -{ - "id": "4c4fa08a-025e-4fc1-b7a6-0eeec07eda83", - "prefix": "heap", - "description": "list all heap table(s)", - "body": "-- List all heap tables \r\nSELECT SCH.name + '.' + TBL.name AS TableName \r\nFROM sys.tables AS TBL \r\n INNER JOIN sys.schemas AS SCH \r\n ON TBL.schema_id = SCH.schema_id \r\n INNER JOIN sys.indexes AS IDX \r\n ON TBL.object_id = IDX.object_id \r\n AND IDX.type = 0 -- = Heap \r\nORDER BY TableName" +{ + "id": "4c4fa08a-025e-4fc1-b7a6-0eeec07eda83", + "prefix": "heap", + "description": "list all heap table(s)", + "body": "-- List all heap tables \r\nSELECT SCH.name + '.' + TBL.name AS TableName \r\nFROM sys.tables AS TBL \r\n INNER JOIN sys.schemas AS SCH \r\n ON TBL.schema_id = SCH.schema_id \r\n INNER JOIN sys.indexes AS IDX \r\n ON TBL.object_id = IDX.object_id \r\n AND IDX.type = 0 -- = Heap \r\nORDER BY TableName" } \ No newline at end of file diff --git a/hlog-77e7b615-5c82-407e-bea7-71d7c4a29e64.json b/hlog-77e7b615-5c82-407e-bea7-71d7c4a29e64.json index ad45261..152bf1d 100644 --- a/hlog-77e7b615-5c82-407e-bea7-71d7c4a29e64.json +++ b/hlog-77e7b615-5c82-407e-bea7-71d7c4a29e64.json @@ -1,6 +1,6 @@ -{ - "id": "77e7b615-5c82-407e-bea7-71d7c4a29e64", - "prefix": "hlog", - "description": "new log line in header", - "body": "$DATE(dd.MM.yyyy)$ / TSC" +{ + "id": "77e7b615-5c82-407e-bea7-71d7c4a29e64", + "prefix": "hlog", + "description": "new log line in header", + "body": "$DATE(dd.MM.yyyy)$ / TSC" } \ No newline at end of file diff --git a/idx1-fb34ee85-4240-4e00-bc54-1388acccb026.json b/idx1-fb34ee85-4240-4e00-bc54-1388acccb026.json index f98b665..40c0c73 100644 --- a/idx1-fb34ee85-4240-4e00-bc54-1388acccb026.json +++ b/idx1-fb34ee85-4240-4e00-bc54-1388acccb026.json @@ -1,6 +1,6 @@ -{ - "id": "fb34ee85-4240-4e00-bc54-1388acccb026", - "prefix": "idx1", - "description": "list all indexes on a given table", - "body": ";WITH ColInfo\r\n AS (SELECT TblName = o.name,\r\n SchemaTbl = s.name + '.' + o.name,\r\n IndexName = i.name,\r\n IsPrimaryKey = [i].[is_primary_key],\r\n IsUniqueConstraint = [i].[is_unique_constraint],\r\n IsUnique = [i].[is_unique],\r\n ColName = c.name,\r\n IsComputedCol = [c].[is_computed],\r\n IsIncludedCol = [ic].[is_included_column],\r\n [ic].[key_ordinal],\r\n FilterDefinition = [i].[filter_definition],\r\n i.[index_id],\r\n crlf = CHAR(13) + CHAR(10),\r\n crlfgo = ';' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10),\r\n [o].[object_id]\r\n FROM sys.objects o\r\n INNER JOIN sys.schemas s\r\n ON o.schema_id = s.schema_id\r\n INNER JOIN sys.columns c\r\n ON o.object_id = c.object_id\r\n INNER JOIN sys.indexes i\r\n ON c.object_id = i.object_id\r\n INNER JOIN sys.index_columns ic\r\n ON i.index_id = ic.index_id\r\n AND o.object_id = ic.object_id\r\n AND c.column_id = ic.column_id\r\n WHERE s.name = 'dbo'\r\n AND o.name = '$CURSOR$'\r\n--AND i.filter_definition IS NOT NULL\r\n)\r\nSELECT DISTINCT [x].[TblName],\r\n [x].[IndexName],\r\n [x].[index_id],\r\n [x].[IsPrimaryKey],\r\n [x].[IsUniqueConstraint],\r\n [x].[IsUnique],\r\n --,size.IndexSizeKB\r\n [c].[IndexColumns],\r\n [ci].[IncludedColumns],\r\n [cc].[ComputedColumns],\r\n [x].[FilterDefinition],\r\n [sz].[IndexSizeMB],\r\n [us].[Reads],\r\n [us].[Writes],\r\n DropCreateSQL = [x].[crlf] + '-- ' + x.IndexName + [x].[crlf] +\r\n --check drop\r\n 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + x.IndexName\r\n + ''' , ''IndexID'' ) IS NOT NULL BEGIN;' + [x].[crlf]\r\n + CASE\r\n WHEN [x].[IsPrimaryKey] = 1 THEN NULL\r\n WHEN [x].[IsUniqueConstraint] = 1 THEN\r\n --drop statement\r\n ' ALTER TABLE ' + [x].[SchemaTbl] + ' DROP CONSTRAINT ' + x.IndexName + ';'\r\n + [x].[crlf] + 'END' + [x].[crlfgo]\r\n --check create\r\n + 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + x.IndexName\r\n + ''' , ''IndexID'' ) IS NULL BEGIN;' + [x].[crlf] +\r\n --create statement\r\n +' ALTER TABLE '\r\n + [x].[SchemaTbl] + ' ADD CONSTRAINT ' + x.IndexName + ' UNIQUE ('\r\n + [c].[IndexColumns] + ');' + [x].[crlf] + 'END' + [x].[crlfgo]\r\n ELSE\r\n --drop statement\r\n ' DROP INDEX ' + [x].[SchemaTbl] + '.' + x.IndexName + ';' + [x].[crlf]\r\n + 'END' + [x].[crlfgo]\r\n --check create\r\n + 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + x.IndexName\r\n + ''' , ''IndexID'' ) IS NULL BEGIN;' + [x].[crlf] +\r\n --create statement\r\n +' CREATE '\r\n + CASE\r\n WHEN [x].[IsUnique] = 1 THEN 'UNIQUE '\r\n ELSE '' END + 'INDEX ' + x.IndexName + ' ON ' + [x].[SchemaTbl] + '('\r\n + [c].[IndexColumns] + ')'\r\n + ISNULL(' INCLUDE(' + [ci].[IncludedColumns] + ')', '')\r\n + ISNULL(' WHERE ' + [x].[FilterDefinition], '') + ';' + [x].[crlf] + 'END'\r\n + [x].[crlfgo] END\r\n FROM ColInfo x\r\n OUTER APPLY ( SELECT IndexColumns = STUFF([sq].[strXML], 1, 2, '')\r\n FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')\r\n FROM ColInfo x2\r\n WHERE x.TblName = [x2].[TblName]\r\n AND x.IndexName = [x2].[IndexName]\r\n AND [x2].[IsIncludedCol] = 0\r\n ORDER BY x2.key_ordinal\r\n FOR XML PATH('')) sq(strXML) ) c\r\n OUTER APPLY ( SELECT IncludedColumns = STUFF([sq].[strXML], 1, 2, '')\r\n FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')\r\n FROM ColInfo x2\r\n WHERE x.TblName = [x2].[TblName]\r\n AND x.IndexName = [x2].[IndexName]\r\n AND [x2].[IsIncludedCol] = 1\r\n ORDER BY x2.key_ordinal\r\n FOR XML PATH('')) sq(strXML) ) ci\r\n OUTER APPLY ( SELECT ComputedColumns = STUFF([sq].[strXML], 1, 2, '')\r\n FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')\r\n FROM ColInfo x2\r\n WHERE x.TblName = [x2].[TblName]\r\n AND x.IndexName = [x2].[IndexName]\r\n AND [x2].[IsComputedCol] = 1\r\n ORDER BY x2.key_ordinal\r\n FOR XML PATH('')) sq(strXML) ) cc\r\n OUTER APPLY ( SELECT tblName = o.name,\r\n o.type,\r\n i.name AS [IndexName],\r\n i.index_id,\r\n [s].[user_seeks] + [s].[user_scans] + [s].[user_lookups] AS [Reads],\r\n [s].[user_updates] AS [Writes],\r\n i.type_desc AS [IndexType],\r\n [i].[fill_factor] AS [FillFactor],\r\n [i].[has_filter],\r\n [i].[filter_definition],\r\n [s].[last_user_scan],\r\n [s].[last_user_lookup],\r\n [s].[last_user_seek]\r\n FROM sys.dm_db_index_usage_stats AS s WITH (NOLOCK)\r\n INNER JOIN sys.indexes AS i WITH (NOLOCK)\r\n ON s.object_id = i.object_id\r\n INNER JOIN sys.objects o WITH (NOLOCK)\r\n ON s.object_id = o.object_id\r\n WHERE o.type = 'U' -- user table\r\n AND i.index_id = s.index_id\r\n AND [s].[database_id] = DB_ID()\r\n AND o.name = x.TblName\r\n AND i.name = x.IndexName) us\r\n OUTER APPLY ( SELECT [i].[name] AS IndexName,\r\n SUM([s].[used_page_count]) * 8 / 1024 AS IndexSizeMB\r\n FROM sys.dm_db_partition_stats AS s\r\n JOIN sys.indexes AS i\r\n ON s.[object_id] = i.[object_id]\r\n AND s.index_id = i.index_id\r\n WHERE s.[object_id] = x.[object_id] --OBJECT_ID('dbo.document_line')\r\n AND [i].[name] = x.IndexName\r\n GROUP BY [i].[name]) sz\r\nORDER BY [x].[index_id];\r\n" +{ + "id": "fb34ee85-4240-4e00-bc54-1388acccb026", + "prefix": "idx1", + "description": "list all indexes on a given table", + "body": ";WITH ColInfo\r\n AS (SELECT TblName = o.name,\r\n SchemaTbl = s.name + '.' + o.name,\r\n IndexName = i.name,\r\n IsPrimaryKey = [i].[is_primary_key],\r\n IsUniqueConstraint = [i].[is_unique_constraint],\r\n IsUnique = [i].[is_unique],\r\n ColName = c.name,\r\n IsComputedCol = [c].[is_computed],\r\n IsIncludedCol = [ic].[is_included_column],\r\n [ic].[key_ordinal],\r\n FilterDefinition = [i].[filter_definition],\r\n i.[index_id],\r\n crlf = CHAR(13) + CHAR(10),\r\n crlfgo = ';' + CHAR(13) + CHAR(10) + 'GO' + CHAR(13) + CHAR(10),\r\n [o].[object_id]\r\n FROM sys.objects o\r\n INNER JOIN sys.schemas s\r\n ON o.schema_id = s.schema_id\r\n INNER JOIN sys.columns c\r\n ON o.object_id = c.object_id\r\n INNER JOIN sys.indexes i\r\n ON c.object_id = i.object_id\r\n INNER JOIN sys.index_columns ic\r\n ON i.index_id = ic.index_id\r\n AND o.object_id = ic.object_id\r\n AND c.column_id = ic.column_id\r\n WHERE s.name = 'dbo'\r\n AND o.name = '$CURSOR$'\r\n--AND i.filter_definition IS NOT NULL\r\n)\r\nSELECT DISTINCT [x].[TblName],\r\n [x].[IndexName],\r\n [x].[index_id],\r\n [x].[IsPrimaryKey],\r\n [x].[IsUniqueConstraint],\r\n [x].[IsUnique],\r\n --,size.IndexSizeKB\r\n [c].[IndexColumns],\r\n [ci].[IncludedColumns],\r\n [cc].[ComputedColumns],\r\n [x].[FilterDefinition],\r\n [sz].[IndexSizeMB],\r\n [us].[Reads],\r\n [us].[Writes],\r\n DropCreateSQL = [x].[crlf] + '-- ' + x.IndexName + [x].[crlf] +\r\n --check drop\r\n 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + x.IndexName\r\n + ''' , ''IndexID'' ) IS NOT NULL BEGIN;' + [x].[crlf]\r\n + CASE\r\n WHEN [x].[IsPrimaryKey] = 1 THEN NULL\r\n WHEN [x].[IsUniqueConstraint] = 1 THEN\r\n --drop statement\r\n ' ALTER TABLE ' + [x].[SchemaTbl] + ' DROP CONSTRAINT ' + x.IndexName + ';'\r\n + [x].[crlf] + 'END' + [x].[crlfgo]\r\n --check create\r\n + 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + x.IndexName\r\n + ''' , ''IndexID'' ) IS NULL BEGIN;' + [x].[crlf] +\r\n --create statement\r\n +' ALTER TABLE '\r\n + [x].[SchemaTbl] + ' ADD CONSTRAINT ' + x.IndexName + ' UNIQUE ('\r\n + [c].[IndexColumns] + ');' + [x].[crlf] + 'END' + [x].[crlfgo]\r\n ELSE\r\n --drop statement\r\n ' DROP INDEX ' + [x].[SchemaTbl] + '.' + x.IndexName + ';' + [x].[crlf]\r\n + 'END' + [x].[crlfgo]\r\n --check create\r\n + 'IF INDEXPROPERTY(OBJECT_ID(''' + [x].[SchemaTbl] + '''), ''' + x.IndexName\r\n + ''' , ''IndexID'' ) IS NULL BEGIN;' + [x].[crlf] +\r\n --create statement\r\n +' CREATE '\r\n + CASE\r\n WHEN [x].[IsUnique] = 1 THEN 'UNIQUE '\r\n ELSE '' END + 'INDEX ' + x.IndexName + ' ON ' + [x].[SchemaTbl] + '('\r\n + [c].[IndexColumns] + ')'\r\n + ISNULL(' INCLUDE(' + [ci].[IncludedColumns] + ')', '')\r\n + ISNULL(' WHERE ' + [x].[FilterDefinition], '') + ';' + [x].[crlf] + 'END'\r\n + [x].[crlfgo] END\r\n FROM ColInfo x\r\n OUTER APPLY ( SELECT IndexColumns = STUFF([sq].[strXML], 1, 2, '')\r\n FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')\r\n FROM ColInfo x2\r\n WHERE x.TblName = [x2].[TblName]\r\n AND x.IndexName = [x2].[IndexName]\r\n AND [x2].[IsIncludedCol] = 0\r\n ORDER BY x2.key_ordinal\r\n FOR XML PATH('')) sq(strXML) ) c\r\n OUTER APPLY ( SELECT IncludedColumns = STUFF([sq].[strXML], 1, 2, '')\r\n FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')\r\n FROM ColInfo x2\r\n WHERE x.TblName = [x2].[TblName]\r\n AND x.IndexName = [x2].[IndexName]\r\n AND [x2].[IsIncludedCol] = 1\r\n ORDER BY x2.key_ordinal\r\n FOR XML PATH('')) sq(strXML) ) ci\r\n OUTER APPLY ( SELECT ComputedColumns = STUFF([sq].[strXML], 1, 2, '')\r\n FROM ( SELECT ', ' + ISNULL([x2].[ColName], '')\r\n FROM ColInfo x2\r\n WHERE x.TblName = [x2].[TblName]\r\n AND x.IndexName = [x2].[IndexName]\r\n AND [x2].[IsComputedCol] = 1\r\n ORDER BY x2.key_ordinal\r\n FOR XML PATH('')) sq(strXML) ) cc\r\n OUTER APPLY ( SELECT tblName = o.name,\r\n o.type,\r\n i.name AS [IndexName],\r\n i.index_id,\r\n [s].[user_seeks] + [s].[user_scans] + [s].[user_lookups] AS [Reads],\r\n [s].[user_updates] AS [Writes],\r\n i.type_desc AS [IndexType],\r\n [i].[fill_factor] AS [FillFactor],\r\n [i].[has_filter],\r\n [i].[filter_definition],\r\n [s].[last_user_scan],\r\n [s].[last_user_lookup],\r\n [s].[last_user_seek]\r\n FROM sys.dm_db_index_usage_stats AS s WITH (NOLOCK)\r\n INNER JOIN sys.indexes AS i WITH (NOLOCK)\r\n ON s.object_id = i.object_id\r\n INNER JOIN sys.objects o WITH (NOLOCK)\r\n ON s.object_id = o.object_id\r\n WHERE o.type = 'U' -- user table\r\n AND i.index_id = s.index_id\r\n AND [s].[database_id] = DB_ID()\r\n AND o.name = x.TblName\r\n AND i.name = x.IndexName) us\r\n OUTER APPLY ( SELECT [i].[name] AS IndexName,\r\n SUM([s].[used_page_count]) * 8 / 1024 AS IndexSizeMB\r\n FROM sys.dm_db_partition_stats AS s\r\n JOIN sys.indexes AS i\r\n ON s.[object_id] = i.[object_id]\r\n AND s.index_id = i.index_id\r\n WHERE s.[object_id] = x.[object_id] --OBJECT_ID('dbo.document_line')\r\n AND [i].[name] = x.IndexName\r\n GROUP BY [i].[name]) sz\r\nORDER BY [x].[index_id];\r\n" } \ No newline at end of file diff --git a/idxCheck-57ed331c-5e96-43bf-a88d-53b47658a9cc.json b/idxCheck-57ed331c-5e96-43bf-a88d-53b47658a9cc.json index 9c4d851..22839f0 100644 --- a/idxCheck-57ed331c-5e96-43bf-a88d-53b47658a9cc.json +++ b/idxCheck-57ed331c-5e96-43bf-a88d-53b47658a9cc.json @@ -1,16 +1,16 @@ -{ - "id": "57ed331c-5e96-43bf-a88d-53b47658a9cc", - "prefix": "idxCheck", - "description": "IF block with check if an index exists", - "body": "IF INDEXPROPERTY(OBJECT_ID('$table$'), '$idxName$' , 'IndexID' ) IS NOT NULL BEGIN;\r\n\t$CURSOR$\r\nEND;\r\n", - "placeholders": [ - { - "name": "table", - "defaultValue": null - }, - { - "name": "idxName", - "defaultValue": null - } - ] +{ + "id": "57ed331c-5e96-43bf-a88d-53b47658a9cc", + "prefix": "idxCheck", + "description": "IF block with check if an index exists", + "body": "IF INDEXPROPERTY(OBJECT_ID('$table$'), '$idxName$' , 'IndexID' ) IS NOT NULL BEGIN;\r\n\t$CURSOR$\r\nEND;\r\n", + "placeholders": [ + { + "name": "table", + "defaultValue": null + }, + { + "name": "idxName", + "defaultValue": null + } + ] } \ No newline at end of file diff --git a/ij-e73221cc-c9ce-4a44-9d70-0f8d81e0b66f.json b/ij-e73221cc-c9ce-4a44-9d70-0f8d81e0b66f.json index 8464ad6..c4d80a1 100644 --- a/ij-e73221cc-c9ce-4a44-9d70-0f8d81e0b66f.json +++ b/ij-e73221cc-c9ce-4a44-9d70-0f8d81e0b66f.json @@ -1,6 +1,6 @@ -{ - "id": "e73221cc-c9ce-4a44-9d70-0f8d81e0b66f", - "prefix": "ij", - "description": "INNER JOIN fragment", - "body": "JOIN " +{ + "id": "e73221cc-c9ce-4a44-9d70-0f8d81e0b66f", + "prefix": "ij", + "description": "INNER JOIN fragment", + "body": "JOIN " } \ No newline at end of file diff --git a/last_bkp-436caa4d-2f0c-4638-9457-971734c1e8bd.json b/last_bkp-436caa4d-2f0c-4638-9457-971734c1e8bd.json index b1fdb73..1aecc90 100644 --- a/last_bkp-436caa4d-2f0c-4638-9457-971734c1e8bd.json +++ b/last_bkp-436caa4d-2f0c-4638-9457-971734c1e8bd.json @@ -1,6 +1,6 @@ -{ - "id": "436caa4d-2f0c-4638-9457-971734c1e8bd", - "prefix": "last_bkp", - "description": "see last full backups", - "body": "WITH LastBackUp AS\r\n(\r\n SELECT bs.database_name,\r\n bs.backup_size,\r\n bs.backup_start_date,\r\n bmf.physical_device_name,\r\n Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )\r\n FROM msdb.dbo.backupmediafamily bmf\r\n JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id\r\n JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id\r\n WHERE bs.[type] = 'D'\r\n AND bs.is_copy_only = 0\r\n)\r\n,lastBkpYesterday AS (\r\n SELECT bs.database_name,\r\n bs.backup_size,\r\n bs.backup_start_date,\r\n bmf.physical_device_name,\r\n Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )\r\n FROM msdb.dbo.backupmediafamily bmf\r\n JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id\r\n JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id\r\n WHERE bs.[type] = 'D'\r\n AND bs.is_copy_only = 0\r\n AND bs.backup_start_date < DATEADD(DAY,0,DATEDIFF(DAY,0,GETDATE()))\r\n)\r\nSELECT \r\n sd.name AS [Database],\r\n REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, lb.backup_size / 1048576), 1),',',''''),'.00','') AS [backup size MB],\r\n lb.backup_start_date AS [Last Full DB Backup Date],\r\n lb.physical_device_name AS [Last Backup File Location],\r\n lby.backup_start_date AS [Yesterday Full DB Backup Date],\r\n lb.physical_device_name AS [Yesterday Backup File Location]\r\nFROM sys.databases AS sd\r\n LEFT JOIN LastBackUp AS lb ON sd.name = lb.database_name AND lb.Position = 1\r\n LEFT JOIN lastBkpYesterday lby ON sd.name=lby.database_name and lby.Position=1\r\nORDER BY [Database];\r\n\r\n" +{ + "id": "436caa4d-2f0c-4638-9457-971734c1e8bd", + "prefix": "last_bkp", + "description": "see last full backups", + "body": "WITH LastBackUp AS\r\n(\r\n SELECT bs.database_name,\r\n bs.backup_size,\r\n bs.backup_start_date,\r\n bmf.physical_device_name,\r\n Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )\r\n FROM msdb.dbo.backupmediafamily bmf\r\n JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id\r\n JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id\r\n WHERE bs.[type] = 'D'\r\n AND bs.is_copy_only = 0\r\n)\r\n,lastBkpYesterday AS (\r\n SELECT bs.database_name,\r\n bs.backup_size,\r\n bs.backup_start_date,\r\n bmf.physical_device_name,\r\n Position = ROW_NUMBER() OVER( PARTITION BY bs.database_name ORDER BY bs.backup_start_date DESC )\r\n FROM msdb.dbo.backupmediafamily bmf\r\n JOIN msdb.dbo.backupmediaset bms ON bmf.media_set_id = bms.media_set_id\r\n JOIN msdb.dbo.backupset bs ON bms.media_set_id = bs.media_set_id\r\n WHERE bs.[type] = 'D'\r\n AND bs.is_copy_only = 0\r\n AND bs.backup_start_date < DATEADD(DAY,0,DATEDIFF(DAY,0,GETDATE()))\r\n)\r\nSELECT \r\n sd.name AS [Database],\r\n REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, lb.backup_size / 1048576), 1),',',''''),'.00','') AS [backup size MB],\r\n lb.backup_start_date AS [Last Full DB Backup Date],\r\n lb.physical_device_name AS [Last Backup File Location],\r\n lby.backup_start_date AS [Yesterday Full DB Backup Date],\r\n lb.physical_device_name AS [Yesterday Backup File Location]\r\nFROM sys.databases AS sd\r\n LEFT JOIN LastBackUp AS lb ON sd.name = lb.database_name AND lb.Position = 1\r\n LEFT JOIN lastBkpYesterday lby ON sd.name=lby.database_name and lby.Position=1\r\nORDER BY [Database];\r\n\r\n" } \ No newline at end of file diff --git a/list_triggers-68d2751a-42d4-45e5-8d0a-a3c3f7cb4eee.json b/list_triggers-68d2751a-42d4-45e5-8d0a-a3c3f7cb4eee.json index 8da2496..42bd175 100644 --- a/list_triggers-68d2751a-42d4-45e5-8d0a-a3c3f7cb4eee.json +++ b/list_triggers-68d2751a-42d4-45e5-8d0a-a3c3f7cb4eee.json @@ -1,6 +1,6 @@ -{ - "id": "68d2751a-42d4-45e5-8d0a-a3c3f7cb4eee", - "prefix": "list_triggers", - "description": "list all triggers in the current db", - "body": "SELECT table_name = OBJECT_NAME(parent_object_id) ,\r\n trigger_name = name ,\r\n trigger_owner = USER_NAME(schema_id) ,\r\n OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger') AS isupdate ,\r\n OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger') AS isdelete ,\r\n OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger') AS isinsert ,\r\n OBJECTPROPERTY(object_id, 'ExecIsAfterTrigger') AS isafter ,\r\n OBJECTPROPERTY(object_id, 'ExecIsInsteadOfTrigger') AS isinsteadof ,\r\n CASE OBJECTPROPERTY(object_id, 'ExecIsTriggerDisabled')\r\n WHEN 1 THEN 'Disabled'\r\n ELSE 'Enabled'\r\n END AS status\r\nFROM sys.objects\r\nWHERE type = 'TR'\r\n--$CURSOR$AND [name] LIKE '%vesta%'\r\nORDER BY OBJECT_NAME(parent_object_id)" +{ + "id": "68d2751a-42d4-45e5-8d0a-a3c3f7cb4eee", + "prefix": "list_triggers", + "description": "list all triggers in the current db", + "body": "SELECT table_name = OBJECT_NAME(parent_object_id) ,\r\n trigger_name = name ,\r\n trigger_owner = USER_NAME(schema_id) ,\r\n OBJECTPROPERTY(object_id, 'ExecIsUpdateTrigger') AS isupdate ,\r\n OBJECTPROPERTY(object_id, 'ExecIsDeleteTrigger') AS isdelete ,\r\n OBJECTPROPERTY(object_id, 'ExecIsInsertTrigger') AS isinsert ,\r\n OBJECTPROPERTY(object_id, 'ExecIsAfterTrigger') AS isafter ,\r\n OBJECTPROPERTY(object_id, 'ExecIsInsteadOfTrigger') AS isinsteadof ,\r\n CASE OBJECTPROPERTY(object_id, 'ExecIsTriggerDisabled')\r\n WHEN 1 THEN 'Disabled'\r\n ELSE 'Enabled'\r\n END AS status\r\nFROM sys.objects\r\nWHERE type = 'TR'\r\n--$CURSOR$AND [name] LIKE '%vesta%'\r\nORDER BY OBJECT_NAME(parent_object_id)" } \ No newline at end of file diff --git a/lj-fcc48410-f0a9-43ff-b257-ef36d4ed7923.json b/lj-fcc48410-f0a9-43ff-b257-ef36d4ed7923.json index bfdff45..2ddf00b 100644 --- a/lj-fcc48410-f0a9-43ff-b257-ef36d4ed7923.json +++ b/lj-fcc48410-f0a9-43ff-b257-ef36d4ed7923.json @@ -1,6 +1,6 @@ -{ - "id": "fcc48410-f0a9-43ff-b257-ef36d4ed7923", - "prefix": "lj", - "description": "LEFT JOIN fragment", - "body": "LEFT JOIN " +{ + "id": "fcc48410-f0a9-43ff-b257-ef36d4ed7923", + "prefix": "lj", + "description": "LEFT JOIN fragment", + "body": "LEFT JOIN " } \ No newline at end of file diff --git a/loj-99e2f5cc-5da0-4121-8f2e-082c6c4c1211.json b/loj-99e2f5cc-5da0-4121-8f2e-082c6c4c1211.json index 3d51892..c9a4b99 100644 --- a/loj-99e2f5cc-5da0-4121-8f2e-082c6c4c1211.json +++ b/loj-99e2f5cc-5da0-4121-8f2e-082c6c4c1211.json @@ -1,6 +1,6 @@ -{ - "id": "99e2f5cc-5da0-4121-8f2e-082c6c4c1211", - "prefix": "loj", - "description": "LEFT OUTER JOIN fragment", - "body": "LEFT OUTER JOIN " +{ + "id": "99e2f5cc-5da0-4121-8f2e-082c6c4c1211", + "prefix": "loj", + "description": "LEFT OUTER JOIN fragment", + "body": "LEFT OUTER JOIN " } \ No newline at end of file diff --git a/mio-badb18aa-a652-4f7e-a6fc-ae6d2a4c90d5.json b/mio-badb18aa-a652-4f7e-a6fc-ae6d2a4c90d5.json index 69514d4..5ad1a76 100644 --- a/mio-badb18aa-a652-4f7e-a6fc-ae6d2a4c90d5.json +++ b/mio-badb18aa-a652-4f7e-a6fc-ae6d2a4c90d5.json @@ -1,6 +1,6 @@ -{ - "id": "badb18aa-a652-4f7e-a6fc-ae6d2a4c90d5", - "prefix": "mio", - "description": "only my hostname", - "body": "IF HOST_NAME()='CGAL41556'\r\nBEGIN\r\n \r\nEND " +{ + "id": "badb18aa-a652-4f7e-a6fc-ae6d2a4c90d5", + "prefix": "mio", + "description": "only my hostname", + "body": "IF HOST_NAME()='CGAL41556'\r\nBEGIN\r\n \r\nEND " } \ No newline at end of file diff --git a/mon-ffc01a1e-c871-47db-9265-d31ee09e0802.json b/mon-ffc01a1e-c871-47db-9265-d31ee09e0802.json index e8e0155..5231134 100644 --- a/mon-ffc01a1e-c871-47db-9265-d31ee09e0802.json +++ b/mon-ffc01a1e-c871-47db-9265-d31ee09e0802.json @@ -1,6 +1,6 @@ -{ - "id": "ffc01a1e-c871-47db-9265-d31ee09e0802", - "prefix": "mon", - "description": "check des triggers monitoring ", - "body": "--should yields around 240 \r\nselect count(*) from Arizona.sys.triggers\r\nwhere name like '%Mon%'" +{ + "id": "ffc01a1e-c871-47db-9265-d31ee09e0802", + "prefix": "mon", + "description": "check des triggers monitoring ", + "body": "--should yields around 240 \r\nselect count(*) from Arizona.sys.triggers\r\nwhere name like '%Mon%'" } \ No newline at end of file diff --git a/monitor_amr-a9eb2b32-353d-4eb3-a1d9-a89a1440a2ba.json b/monitor_amr-a9eb2b32-353d-4eb3-a1d9-a89a1440a2ba.json index 0173fc8..23fe5d2 100644 --- a/monitor_amr-a9eb2b32-353d-4eb3-a1d9-a89a1440a2ba.json +++ b/monitor_amr-a9eb2b32-353d-4eb3-a1d9-a89a1440a2ba.json @@ -1,6 +1,6 @@ -{ - "id": "a9eb2b32-353d-4eb3-a1d9-a89a1440a2ba", - "prefix": "monitor_amr", - "description": "list amr pending in the pharmacy", - "body": "EXEC [ActiveSystemServer].[amr].[MonitoringReport]" +{ + "id": "a9eb2b32-353d-4eb3-a1d9-a89a1440a2ba", + "prefix": "monitor_amr", + "description": "list amr pending in the pharmacy", + "body": "EXEC [ActiveSystemServer].[amr].[MonitoringReport]" } \ No newline at end of file diff --git a/mro-b5ab431f-3892-4b58-ac91-d7befb0ee191.json b/mro-b5ab431f-3892-4b58-ac91-d7befb0ee191.json index e092e13..90f43a3 100644 --- a/mro-b5ab431f-3892-4b58-ac91-d7befb0ee191.json +++ b/mro-b5ab431f-3892-4b58-ac91-d7befb0ee191.json @@ -1,6 +1,6 @@ -{ - "id": "b5ab431f-3892-4b58-ac91-d7befb0ee191", - "prefix": "mro", - "description": "Retrieve 20 most recently created objects", - "body": "\r\n -- NOTE: 'sys.objects'/'create_date' is only available in SQL Server 2005+. Replace with 'sysobjects'/'crdate' in SQL Server 2000.\r\nSELECT TOP (20) [name], [type], create_date\r\nFROM sys.objects\r\nORDER BY create_date DESC" +{ + "id": "b5ab431f-3892-4b58-ac91-d7befb0ee191", + "prefix": "mro", + "description": "Retrieve 20 most recently created objects", + "body": "\r\n -- NOTE: 'sys.objects'/'create_date' is only available in SQL Server 2005+. Replace with 'sysobjects'/'crdate' in SQL Server 2000.\r\nSELECT TOP (20) [name], [type], create_date\r\nFROM sys.objects\r\nORDER BY create_date DESC" } \ No newline at end of file diff --git a/nbr-ba5eb4fd-ac8f-427c-a24a-5cb97b8faa98.json b/nbr-ba5eb4fd-ac8f-427c-a24a-5cb97b8faa98.json index d5c93e3..f1a2510 100644 --- a/nbr-ba5eb4fd-ac8f-427c-a24a-5cb97b8faa98.json +++ b/nbr-ba5eb4fd-ac8f-427c-a24a-5cb97b8faa98.json @@ -1,6 +1,6 @@ -{ - "id": "ba5eb4fd-ac8f-427c-a24a-5cb97b8faa98", - "prefix": "nbr", - "description": "variable table with 10 rows, for cross join population", - "body": "DECLARE @nbr TABLE (\r\n\tval INT\r\n);\r\nINSERT INTO @nbr(val)\r\nVALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0);\r\n" +{ + "id": "ba5eb4fd-ac8f-427c-a24a-5cb97b8faa98", + "prefix": "nbr", + "description": "variable table with 10 rows, for cross join population", + "body": "DECLARE @nbr TABLE (\r\n\tval INT\r\n);\r\nINSERT INTO @nbr(val)\r\nVALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(0);\r\n" } \ No newline at end of file diff --git a/newCol-7d139776-36e1-44e4-98a4-7360ca60dc70.json b/newCol-7d139776-36e1-44e4-98a4-7360ca60dc70.json index ab82134..1c3cfb1 100644 --- a/newCol-7d139776-36e1-44e4-98a4-7360ca60dc70.json +++ b/newCol-7d139776-36e1-44e4-98a4-7360ca60dc70.json @@ -1,24 +1,24 @@ -{ - "id": "7d139776-36e1-44e4-98a4-7360ca60dc70", - "prefix": "newCol", - "description": "add new column", - "body": "IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table$' AND TABLE_SCHEMA='$schema$' AND COLUMN_NAME = '$column$')\r\nBEGIN\r\n\tALTER TABLE $schema$.$table$ ADD $column$ $type$ NOT NULL;\r\nEND ", - "placeholders": [ - { - "name": "schema", - "defaultValue": null - }, - { - "name": "table", - "defaultValue": null - }, - { - "name": "column", - "defaultValue": null - }, - { - "name": "type", - "defaultValue": null - } - ] +{ + "id": "7d139776-36e1-44e4-98a4-7360ca60dc70", + "prefix": "newCol", + "description": "add new column", + "body": "IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table$' AND TABLE_SCHEMA='$schema$' AND COLUMN_NAME = '$column$')\r\nBEGIN\r\n\tALTER TABLE $schema$.$table$ ADD $column$ $type$ NOT NULL;\r\nEND ", + "placeholders": [ + { + "name": "schema", + "defaultValue": null + }, + { + "name": "table", + "defaultValue": null + }, + { + "name": "column", + "defaultValue": null + }, + { + "name": "type", + "defaultValue": null + } + ] } \ No newline at end of file diff --git a/nl-06e0e196-f6a3-4ae9-aea2-43ec5910821a.json b/nl-06e0e196-f6a3-4ae9-aea2-43ec5910821a.json index 90dacb0..af462ad 100644 --- a/nl-06e0e196-f6a3-4ae9-aea2-43ec5910821a.json +++ b/nl-06e0e196-f6a3-4ae9-aea2-43ec5910821a.json @@ -1,6 +1,6 @@ -{ - "id": "06e0e196-f6a3-4ae9-aea2-43ec5910821a", - "prefix": "nl", - "description": "", - "body": "WITH(NOLOCK)" +{ + "id": "06e0e196-f6a3-4ae9-aea2-43ec5910821a", + "prefix": "nl", + "description": "", + "body": "WITH(NOLOCK)" } \ No newline at end of file diff --git a/ob-94dc16da-08e3-46ca-b4b7-0325b252d35c.json b/ob-94dc16da-08e3-46ca-b4b7-0325b252d35c.json index 3c20c07..9f2ac22 100644 --- a/ob-94dc16da-08e3-46ca-b4b7-0325b252d35c.json +++ b/ob-94dc16da-08e3-46ca-b4b7-0325b252d35c.json @@ -1,6 +1,6 @@ -{ - "id": "94dc16da-08e3-46ca-b4b7-0325b252d35c", - "prefix": "ob", - "description": "ORDER BY fragment", - "body": "ORDER BY " +{ + "id": "94dc16da-08e3-46ca-b4b7-0325b252d35c", + "prefix": "ob", + "description": "ORDER BY fragment", + "body": "ORDER BY " } \ No newline at end of file diff --git a/opts-fd320b21-00b9-41dc-a72a-0c9a90d1e259.json b/opts-fd320b21-00b9-41dc-a72a-0c9a90d1e259.json index 7bca546..3a543a7 100644 --- a/opts-fd320b21-00b9-41dc-a72a-0c9a90d1e259.json +++ b/opts-fd320b21-00b9-41dc-a72a-0c9a90d1e259.json @@ -1,6 +1,6 @@ -{ - "id": "fd320b21-00b9-41dc-a72a-0c9a90d1e259", - "prefix": "opts", - "description": "connection options set", - "body": "DECLARE @options INT\r\nSELECT @options = @@OPTIONS\r\n\r\nPRINT 'Current option value: '+CONVERT(VARCHAR(10), @options)\r\nIF ( (1 & @options) = 1 ) PRINT 'DISABLE_DEF_CNST_CHK'\r\nIF ( (2 & @options) = 2 ) PRINT 'IMPLICIT_TRANSACTIONS'\r\nIF ( (4 & @options) = 4 ) PRINT 'CURSOR_CLOSE_ON_COMMIT'\r\nIF ( (8 & @options) = 8 ) PRINT 'ANSI_WARNINGS'\r\nIF ( (16 & @options) = 16 ) PRINT 'ANSI_PADDING'\r\nIF ( (32 & @options) = 32 ) PRINT 'ANSI_NULLS'\r\nIF ( (64 & @options) = 64 ) PRINT 'ARITHABORT'\r\nIF ( (128 & @options) = 128 ) PRINT 'ARITHIGNORE'\r\nIF ( (256 & @options) = 256 ) PRINT 'QUOTED_IDENTIFIER'\r\nIF ( (512 & @options) = 512 ) PRINT 'NOCOUNT'\r\nIF ( (1024 & @options) = 1024 ) PRINT 'ANSI_NULL_DFLT_ON'\r\nIF ( (2048 & @options) = 2048 ) PRINT 'ANSI_NULL_DFLT_OFF'\r\nIF ( (4096 & @options) = 4096 ) PRINT 'CONCAT_NULL_YIELDS_NULL'\r\nIF ( (8192 & @options) = 8192 ) PRINT 'NUMERIC_ROUNDABORT'\r\nIF ( (16384 & @options) = 16384 ) PRINT 'XACT_ABORT' \r\n" +{ + "id": "fd320b21-00b9-41dc-a72a-0c9a90d1e259", + "prefix": "opts", + "description": "connection options set", + "body": "DECLARE @options INT\r\nSELECT @options = @@OPTIONS\r\n\r\nPRINT 'Current option value: '+CONVERT(VARCHAR(10), @options)\r\nIF ( (1 & @options) = 1 ) PRINT 'DISABLE_DEF_CNST_CHK'\r\nIF ( (2 & @options) = 2 ) PRINT 'IMPLICIT_TRANSACTIONS'\r\nIF ( (4 & @options) = 4 ) PRINT 'CURSOR_CLOSE_ON_COMMIT'\r\nIF ( (8 & @options) = 8 ) PRINT 'ANSI_WARNINGS'\r\nIF ( (16 & @options) = 16 ) PRINT 'ANSI_PADDING'\r\nIF ( (32 & @options) = 32 ) PRINT 'ANSI_NULLS'\r\nIF ( (64 & @options) = 64 ) PRINT 'ARITHABORT'\r\nIF ( (128 & @options) = 128 ) PRINT 'ARITHIGNORE'\r\nIF ( (256 & @options) = 256 ) PRINT 'QUOTED_IDENTIFIER'\r\nIF ( (512 & @options) = 512 ) PRINT 'NOCOUNT'\r\nIF ( (1024 & @options) = 1024 ) PRINT 'ANSI_NULL_DFLT_ON'\r\nIF ( (2048 & @options) = 2048 ) PRINT 'ANSI_NULL_DFLT_OFF'\r\nIF ( (4096 & @options) = 4096 ) PRINT 'CONCAT_NULL_YIELDS_NULL'\r\nIF ( (8192 & @options) = 8192 ) PRINT 'NUMERIC_ROUNDABORT'\r\nIF ( (16384 & @options) = 16384 ) PRINT 'XACT_ABORT' \r\n" } \ No newline at end of file diff --git a/percent-59cf80eb-b43b-4e5a-9e33-3dbcc1102c6c.json b/percent-59cf80eb-b43b-4e5a-9e33-3dbcc1102c6c.json index 88e9c19..fa2704d 100644 --- a/percent-59cf80eb-b43b-4e5a-9e33-3dbcc1102c6c.json +++ b/percent-59cf80eb-b43b-4e5a-9e33-3dbcc1102c6c.json @@ -1,6 +1,6 @@ -{ - "id": "59cf80eb-b43b-4e5a-9e33-3dbcc1102c6c", - "prefix": "percent", - "description": "% of operation (BKP, RESTORE, COMPACT)", - "body": "SELECT [r].[session_id],\r\n [r].[command],\r\n CONVERT(NUMERIC(6, 2), [r].[percent_complete]) AS [Percent Complete],\r\n CONVERT(VARCHAR(20), DATEADD(ms, [r].[estimated_completion_time], GETDATE()), 20) AS [ETA Completion Time],\r\n CONVERT(NUMERIC(10, 2), [r].[total_elapsed_time] / 1000.0 / 60.0) AS [Elapsed Min],\r\n CONVERT(NUMERIC(10, 2), [r].[estimated_completion_time] / 1000.0 / 60.0) AS [ETA Min],\r\n CONVERT(NUMERIC(10, 2), [r].[estimated_completion_time] / 1000.0 / 60.0 / 60.0) AS [ETA Hours],\r\n CONVERT(\r\n VARCHAR(1000),\r\n ( SELECT SUBSTRING(\r\n text,\r\n r.statement_start_offset / 2,\r\n CASE\r\n WHEN r.statement_end_offset = -1 THEN 1000\r\n ELSE (r.statement_end_offset - r.statement_start_offset) / 2 END)\r\n FROM sys.dm_exec_sql_text(sql_handle) )) AS [SQL]\r\n FROM sys.dm_exec_requests r\r\nWHERE [r].[command] IN ( 'RESTORE DATABASE', 'BACKUP DATABASE', 'DbccFilesCompact', 'DbccSpaceReclaim' );\r\n\r\n" +{ + "id": "59cf80eb-b43b-4e5a-9e33-3dbcc1102c6c", + "prefix": "percent", + "description": "% of operation (BKP, RESTORE, COMPACT)", + "body": "SELECT [r].[session_id],\r\n [r].[command],\r\n CONVERT(NUMERIC(6, 2), [r].[percent_complete]) AS [Percent Complete],\r\n CONVERT(VARCHAR(20), DATEADD(ms, [r].[estimated_completion_time], GETDATE()), 20) AS [ETA Completion Time],\r\n CONVERT(NUMERIC(10, 2), [r].[total_elapsed_time] / 1000.0 / 60.0) AS [Elapsed Min],\r\n CONVERT(NUMERIC(10, 2), [r].[estimated_completion_time] / 1000.0 / 60.0) AS [ETA Min],\r\n CONVERT(NUMERIC(10, 2), [r].[estimated_completion_time] / 1000.0 / 60.0 / 60.0) AS [ETA Hours],\r\n CONVERT(\r\n VARCHAR(1000),\r\n ( SELECT SUBSTRING(\r\n text,\r\n r.statement_start_offset / 2,\r\n CASE\r\n WHEN r.statement_end_offset = -1 THEN 1000\r\n ELSE (r.statement_end_offset - r.statement_start_offset) / 2 END)\r\n FROM sys.dm_exec_sql_text(sql_handle) )) AS [SQL]\r\n FROM sys.dm_exec_requests r\r\nWHERE [r].[command] IN ( 'RESTORE DATABASE', 'BACKUP DATABASE', 'DbccFilesCompact', 'DbccSpaceReclaim' );\r\n\r\n" } \ No newline at end of file diff --git a/pharmacy_code-2de5009b-c299-46aa-ac66-f1019d24ed05.json b/pharmacy_code-2de5009b-c299-46aa-ac66-f1019d24ed05.json index 318729b..e47bb8f 100644 --- a/pharmacy_code-2de5009b-c299-46aa-ac66-f1019d24ed05.json +++ b/pharmacy_code-2de5009b-c299-46aa-ac66-f1019d24ed05.json @@ -1,6 +1,6 @@ -{ - "id": "2de5009b-c299-46aa-ac66-f1019d24ed05", - "prefix": "pharmacy_code", - "description": "fetch pharmacy code from a pharmacy", - "body": "SELECT DISTINCT [dh].[DH_pharmacy_code]\r\nFROM [Arizona].[dbo].[Document_header] [dh]" +{ + "id": "2de5009b-c299-46aa-ac66-f1019d24ed05", + "prefix": "pharmacy_code", + "description": "fetch pharmacy code from a pharmacy", + "body": "SELECT DISTINCT [dh].[DH_pharmacy_code]\r\nFROM [Arizona].[dbo].[Document_header] [dh]" } \ No newline at end of file diff --git a/plan-349bfc81-104e-44ab-afc5-f1cf8adaea6b.json b/plan-349bfc81-104e-44ab-afc5-f1cf8adaea6b.json index 867fde9..39e5b4a 100644 --- a/plan-349bfc81-104e-44ab-afc5-f1cf8adaea6b.json +++ b/plan-349bfc81-104e-44ab-afc5-f1cf8adaea6b.json @@ -1,6 +1,6 @@ -{ - "id": "349bfc81-104e-44ab-afc5-f1cf8adaea6b", - "prefix": "plan", - "description": "fetch query plan from cache", - "body": "SELECT [text]\r\n\t,cp.size_in_bytes\r\n\t,plan_handle\r\nFROM sys.dm_exec_cached_plans AS cp\r\nCROSS APPLY sys.dm_exec_sql_text(plan_handle)\r\nWHERE cp.cacheobjtype = N'Compiled Plan'\r\n\tAND cp.objtype = N'Adhoc'\r\n\tAND cp.usecounts = 1\r\n--AND [text] LIKE '%tblChecksum%'\r\nORDER BY cp.size_in_bytes DESC;\r\n" +{ + "id": "349bfc81-104e-44ab-afc5-f1cf8adaea6b", + "prefix": "plan", + "description": "fetch query plan from cache", + "body": "SELECT [text]\r\n\t,cp.size_in_bytes\r\n\t,plan_handle\r\nFROM sys.dm_exec_cached_plans AS cp\r\nCROSS APPLY sys.dm_exec_sql_text(plan_handle)\r\nWHERE cp.cacheobjtype = N'Compiled Plan'\r\n\tAND cp.objtype = N'Adhoc'\r\n\tAND cp.usecounts = 1\r\n--AND [text] LIKE '%tblChecksum%'\r\nORDER BY cp.size_in_bytes DESC;\r\n" } \ No newline at end of file diff --git a/ple-678da7f8-3efa-4e3e-810b-01ae866ea4b5.json b/ple-678da7f8-3efa-4e3e-810b-01ae866ea4b5.json index cd6c79f..62a4acc 100644 --- a/ple-678da7f8-3efa-4e3e-810b-01ae866ea4b5.json +++ b/ple-678da7f8-3efa-4e3e-810b-01ae866ea4b5.json @@ -1,6 +1,6 @@ -{ - "id": "678da7f8-3efa-4e3e-810b-01ae866ea4b5", - "prefix": "ple", - "description": "get current page life expectancy", - "body": "SELECT \r\n\tobject_name\r\n\t,counter_name\r\n\t,value\t\t\t= cntr_value\r\nFROM sys.dm_os_performance_counters\r\nWHERE 1=1\r\nAND LTRIM(RTRIM(object_name)) LIKE '%:Buffer Manager'\r\nAND LTRIM(RTRIM(counter_name)) = 'Page life expectancy' \r\n" +{ + "id": "678da7f8-3efa-4e3e-810b-01ae866ea4b5", + "prefix": "ple", + "description": "get current page life expectancy", + "body": "SELECT \r\n\tobject_name\r\n\t,counter_name\r\n\t,value\t\t\t= cntr_value\r\nFROM sys.dm_os_performance_counters\r\nWHERE 1=1\r\nAND LTRIM(RTRIM(object_name)) LIKE '%:Buffer Manager'\r\nAND LTRIM(RTRIM(counter_name)) = 'Page life expectancy' \r\n" } \ No newline at end of file diff --git a/pos_clean_repli_checks-54378923-de49-4c06-81a4-ab890719c1a4.json b/pos_clean_repli_checks-54378923-de49-4c06-81a4-ab890719c1a4.json index e33ff51..c8c1989 100644 --- a/pos_clean_repli_checks-54378923-de49-4c06-81a4-ab890719c1a4.json +++ b/pos_clean_repli_checks-54378923-de49-4c06-81a4-ab890719c1a4.json @@ -1,6 +1,6 @@ -{ - "id": "54378923-de49-4c06-81a4-ab890719c1a4", - "prefix": "pos_clean_repli_checks", - "description": "kill all query doing a replication check from the pos, so that the replication can work", - "body": "DECLARE @kill VARCHAR(8000);\r\nSET @kill = '';\r\nSELECT @kill = @kill + 'kill ' + CONVERT(VARCHAR(5), session_id) + ';'\r\n FROM sys.dm_exec_requests\r\n CROSS APPLY sys.dm_exec_sql_text(sql_handle)\r\n WHERE database_id = DB_ID('activepos_write')\r\n AND session_id <> @@SPID\r\n AND text LIKE '%AND NOT EXISTS (SELECT * FROM vw_T_Sales_Order_header%';\r\n--EXEC(@kill);\r\n\r\nPRINT @kill;" +{ + "id": "54378923-de49-4c06-81a4-ab890719c1a4", + "prefix": "pos_clean_repli_checks", + "description": "kill all query doing a replication check from the pos, so that the replication can work", + "body": "DECLARE @kill VARCHAR(8000);\r\nSET @kill = '';\r\nSELECT @kill = @kill + 'kill ' + CONVERT(VARCHAR(5), session_id) + ';'\r\n FROM sys.dm_exec_requests\r\n CROSS APPLY sys.dm_exec_sql_text(sql_handle)\r\n WHERE database_id = DB_ID('activepos_write')\r\n AND session_id <> @@SPID\r\n AND text LIKE '%AND NOT EXISTS (SELECT * FROM vw_T_Sales_Order_header%';\r\n--EXEC(@kill);\r\n\r\nPRINT @kill;" } \ No newline at end of file diff --git a/pt-3b355313-2d70-4420-90fc-d6976eef283a.json b/pt-3b355313-2d70-4420-90fc-d6976eef283a.json index 3c8d03c..b2535ab 100644 --- a/pt-3b355313-2d70-4420-90fc-d6976eef283a.json +++ b/pt-3b355313-2d70-4420-90fc-d6976eef283a.json @@ -1,6 +1,6 @@ -{ - "id": "3b355313-2d70-4420-90fc-d6976eef283a", - "prefix": "pt", - "description": "", - "body": "PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - $CURSOR$';\r\n" +{ + "id": "3b355313-2d70-4420-90fc-d6976eef283a", + "prefix": "pt", + "description": "", + "body": "PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - $CURSOR$';\r\n" } \ No newline at end of file diff --git a/ptc-04440efb-13a7-42c3-833f-7d9f30c90ff3.json b/ptc-04440efb-13a7-42c3-833f-7d9f30c90ff3.json index 40a4241..6f1ced4 100644 --- a/ptc-04440efb-13a7-42c3-833f-7d9f30c90ff3.json +++ b/ptc-04440efb-13a7-42c3-833f-7d9f30c90ff3.json @@ -1,6 +1,6 @@ -{ - "id": "04440efb-13a7-42c3-833f-7d9f30c90ff3", - "prefix": "ptc", - "description": "", - "body": "PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - $CURSOR$. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.';\r\n" +{ + "id": "04440efb-13a7-42c3-833f-7d9f30c90ff3", + "prefix": "ptc", + "description": "", + "body": "PRINT CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 114)+' - $CURSOR$. '+REPLACE(REPLACE(CONVERT(VARCHAR(100), CONVERT(MONEY, @@rowcount), 1),',',''''),'.00','')+' row(s) affected.';\r\n" } \ No newline at end of file diff --git a/pval-2f90e674-1d0d-4ad7-9238-12e184767a4c.json b/pval-2f90e674-1d0d-4ad7-9238-12e184767a4c.json index b68dde7..eac9f9e 100644 --- a/pval-2f90e674-1d0d-4ad7-9238-12e184767a4c.json +++ b/pval-2f90e674-1d0d-4ad7-9238-12e184767a4c.json @@ -1,6 +1,6 @@ -{ - "id": "2f90e674-1d0d-4ad7-9238-12e184767a4c", - "prefix": "pval", - "description": "", - "body": "'+ISNULL(CONVERT(VARCHAR(200),$CURSOR$),'NULL')+'" +{ + "id": "2f90e674-1d0d-4ad7-9238-12e184767a4c", + "prefix": "pval", + "description": "", + "body": "'+ISNULL(CONVERT(VARCHAR(200),$CURSOR$),'NULL')+'" } \ No newline at end of file diff --git a/query_store_enable-32fd4a4f-53d3-4bb1-aa70-ee59e64426c9.json b/query_store_enable-32fd4a4f-53d3-4bb1-aa70-ee59e64426c9.json index 5eef9e8..d7427d2 100644 --- a/query_store_enable-32fd4a4f-53d3-4bb1-aa70-ee59e64426c9.json +++ b/query_store_enable-32fd4a4f-53d3-4bb1-aa70-ee59e64426c9.json @@ -1,6 +1,6 @@ -{ - "id": "32fd4a4f-53d3-4bb1-aa70-ee59e64426c9", - "prefix": "query_store_enable", - "description": "", - "body": "DECLARE @tpl VARCHAR(444) = 'ALTER DATABASE @db@ SET QUERY_STORE = ON;'\r\n\r\nSELECT name, REPLACE(@tpl, '@db@', d.[name]) AS q, *\r\nFROM sys.databases d\r\nWHERE [d].[database_id]>4 --no system db's\r\nAND d.[is_read_only] = 0 --RW db's only\r\nAND d.[state] = 0 --online\r\n" +{ + "id": "32fd4a4f-53d3-4bb1-aa70-ee59e64426c9", + "prefix": "query_store_enable", + "description": "", + "body": "DECLARE @tpl VARCHAR(444) = 'ALTER DATABASE @db@ SET QUERY_STORE = ON;'\r\n\r\nSELECT name, REPLACE(@tpl, '@db@', d.[name]) AS q, *\r\nFROM sys.databases d\r\nWHERE [d].[database_id]>4 --no system db's\r\nAND d.[is_read_only] = 0 --RW db's only\r\nAND d.[state] = 0 --online\r\n" } \ No newline at end of file diff --git a/reg-f1c69117-2ba6-46d4-a3b6-ef957ac692fb.json b/reg-f1c69117-2ba6-46d4-a3b6-ef957ac692fb.json index 7357152..c1c7a42 100644 --- a/reg-f1c69117-2ba6-46d4-a3b6-ef957ac692fb.json +++ b/reg-f1c69117-2ba6-46d4-a3b6-ef957ac692fb.json @@ -1,12 +1,12 @@ -{ - "id": "f1c69117-2ba6-46d4-a3b6-ef957ac692fb", - "prefix": "reg", - "description": "", - "body": "--#region $name$\r\n--#endregion $name$", - "placeholders": [ - { - "name": "name", - "defaultValue": null - } - ] +{ + "id": "f1c69117-2ba6-46d4-a3b6-ef957ac692fb", + "prefix": "reg", + "description": "", + "body": "--#region $name$\r\n--#endregion $name$", + "placeholders": [ + { + "name": "name", + "defaultValue": null + } + ] } \ No newline at end of file diff --git a/repl-8c60aa30-593b-4050-b490-044f10ecd07f.json b/repl-8c60aa30-593b-4050-b490-044f10ecd07f.json index fda56ff..193882b 100644 --- a/repl-8c60aa30-593b-4050-b490-044f10ecd07f.json +++ b/repl-8c60aa30-593b-4050-b490-044f10ecd07f.json @@ -1,6 +1,6 @@ -{ - "id": "8c60aa30-593b-4050-b490-044f10ecd07f", - "prefix": "repl", - "description": "POS replication ", - "body": "SELECT [pos].[POS_hostname], [pos].[POS_MAC_address], [pos].[POS_number], [pos].[POS_type]\r\nFROM [Arizona].[dbo].[Point_of_sale] [pos]\r\nWHERE [pos].[POS_active]=1\r\nAND [pos].[POS_type] IN (1,2)\r\nAND [pos].[POS_number] < 99\r\nORDER BY [pos].[POS_number]\r\n;\r\n\r\nSELECT ActivePos_write.upd.DatabaseVersion() AS currentVersion;\r\n\r\nSELECT SettingValue AS backupSrc\r\n FROM ActiveSystemServer.cfg.Settings\r\n WHERE SettingId LIKE 'Values.Modules.Replication.DbInitializationBackupPath%'\r\n AND LEN(SettingValue) > 1;\r\n\r\n--last backup\r\nSELECT\r\n JobName = J.name,\r\n H.*\r\nFROM\r\n msdb.dbo.sysjobs AS J\r\n CROSS APPLY (\r\n SELECT TOP 20\r\n JobName = J.name,\r\n StepNumber = T.step_id,\r\n StepName = T.step_name,\r\n StepStatus = CASE T.run_status\r\n WHEN 0 THEN 'Failed'\r\n WHEN 1 THEN 'Succeeded'\r\n WHEN 2 THEN 'Retry'\r\n WHEN 3 THEN 'Canceled'\r\n ELSE 'Running' END,\r\n ExecutedAt = msdb.dbo.agent_datetime(T.run_date, T.run_time),\r\n ExecutingHours = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) / 60,\r\n ExecutingMinutes = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) % 60,\r\n Message = T.message\r\n ,t.[instance_id]\r\n FROM msdb.dbo.sysjobhistory AS T\r\n WHERE T.job_id = J.job_id\r\n ORDER BY t.[instance_id] DESC\r\n ) AS H\r\nWHERE [J].[name]='D91030 - Backup ActivePos_Read'\r\nAND [H].[StepNumber] = 0\r\nORDER BY J.name\r\n\r\nRETURN\r\n\r\n--start backup\r\nEXEC msdb.dbo.sp_start_job @job_name = N'D91030 - Backup ActivePos_Read' , @step_name = 'Purge old ActivePos_Read backups'\r\n\r\nWAITFOR DELAY '00:00:05.000'\r\n\r\nWHILE EXISTS(\r\n SELECT sj.name\r\n , sja.*\r\n FROM msdb.dbo.sysjobactivity AS sja\r\n INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id\r\n WHERE sj.[name]='D91030 - Backup ActivePos_Read'\r\n AND sja.start_execution_date IS NOT NULL\r\n AND sja.stop_execution_date IS NULL\r\n) BEGIN\r\n --PRINT 'job is still running '+CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n DECLARE @t VARCHAR(20) = CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n RAISERROR('%s, job is still running', 0, 1, @t) WITH NOWAIT;\r\n WAITFOR DELAY '00:00:05.000'\r\nEND \r\n\r\n--check POS and PHCY versions\r\nSELECT ActivePos_write.upd.DatabaseVersion() AS currentVersion\r\nEXEC ('SELECT ActivePos_write.upd.DatabaseVersion()') AT xxx\r\n\r\n--force restore after manual copy\r\nEXEC ('exec ActivePos_write.dbo.InitializeActivePosReadFromBackup @BackUpFileWithPath = ''c:\\temp\\ActivePos_read.22.1.223.2401.bak''') AT xxx\r\n\r\n--to start on the pos to force a restore of the backup. adapt version, mac and UNC before running\r\nexec ActiveSystemClient.dbo.DBAReplPosSubscription \r\n\t @mac = '9C-7B-EF-43-5A-98', \r\n\t @serverDbVersion = '23.2.23.19501', \r\n\t @preferedReplinibackup= '\\\\cvi247aps-replinibackup.coop-vitality.ch\\replinibackup\\ActivePos_read.23.2.23.19501.bak'\r\n\r\n\r\n--restart service on pos\r\nEXEC ('EXEC xp_cmdshell ''net stop ActiveposClientService'';EXEC xp_cmdshell ''net start ActiveposClientService''') AT xxx\r\n\r\n--subscription\r\nEXEC ActivePos_read..sp_dropsubscription @publication = N'ActivePosTran', @article = N'all', @subscriber ='xxx'\r\nEXEC ActiveSystemServer.dbo.RepairReplication\r\n" +{ + "id": "8c60aa30-593b-4050-b490-044f10ecd07f", + "prefix": "repl", + "description": "POS replication ", + "body": "SELECT [pos].[POS_hostname], [pos].[POS_MAC_address], [pos].[POS_number], [pos].[POS_type]\r\nFROM [Arizona].[dbo].[Point_of_sale] [pos]\r\nWHERE [pos].[POS_active]=1\r\nAND [pos].[POS_type] IN (1,2)\r\nAND [pos].[POS_number] < 99\r\nORDER BY [pos].[POS_number]\r\n;\r\n\r\nSELECT ActivePos_write.upd.DatabaseVersion() AS currentVersion;\r\n\r\nSELECT SettingValue AS backupSrc\r\n FROM ActiveSystemServer.cfg.Settings\r\n WHERE SettingId LIKE 'Values.Modules.Replication.DbInitializationBackupPath%'\r\n AND LEN(SettingValue) > 1;\r\n\r\n--last backup\r\nSELECT\r\n JobName = J.name,\r\n H.*\r\nFROM\r\n msdb.dbo.sysjobs AS J\r\n CROSS APPLY (\r\n SELECT TOP 20\r\n JobName = J.name,\r\n StepNumber = T.step_id,\r\n StepName = T.step_name,\r\n StepStatus = CASE T.run_status\r\n WHEN 0 THEN 'Failed'\r\n WHEN 1 THEN 'Succeeded'\r\n WHEN 2 THEN 'Retry'\r\n WHEN 3 THEN 'Canceled'\r\n ELSE 'Running' END,\r\n ExecutedAt = msdb.dbo.agent_datetime(T.run_date, T.run_time),\r\n ExecutingHours = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) / 60,\r\n ExecutingMinutes = ((T.run_duration/10000 * 3600 + (T.run_duration/100) % 100 * 60 + T.run_duration % 100 + 31 ) / 60) % 60,\r\n Message = T.message\r\n ,t.[instance_id]\r\n FROM msdb.dbo.sysjobhistory AS T\r\n WHERE T.job_id = J.job_id\r\n ORDER BY t.[instance_id] DESC\r\n ) AS H\r\nWHERE [J].[name]='D91030 - Backup ActivePos_Read'\r\nAND [H].[StepNumber] = 0\r\nORDER BY J.name\r\n\r\nRETURN\r\n\r\n--start backup\r\nEXEC msdb.dbo.sp_start_job @job_name = N'D91030 - Backup ActivePos_Read' , @step_name = 'Purge old ActivePos_Read backups'\r\n\r\nWAITFOR DELAY '00:00:05.000'\r\n\r\nWHILE EXISTS(\r\n SELECT sj.name\r\n , sja.*\r\n FROM msdb.dbo.sysjobactivity AS sja\r\n INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id\r\n WHERE sj.[name]='D91030 - Backup ActivePos_Read'\r\n AND sja.start_execution_date IS NOT NULL\r\n AND sja.stop_execution_date IS NULL\r\n) BEGIN\r\n --PRINT 'job is still running '+CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n DECLARE @t VARCHAR(20) = CONVERT(VARCHAR(20), CURRENT_TIMESTAMP, 120);\r\n RAISERROR('%s, job is still running', 0, 1, @t) WITH NOWAIT;\r\n WAITFOR DELAY '00:00:05.000'\r\nEND \r\n\r\n--check POS and PHCY versions\r\nSELECT ActivePos_write.upd.DatabaseVersion() AS currentVersion\r\nEXEC ('SELECT ActivePos_write.upd.DatabaseVersion()') AT xxx\r\n\r\n--force restore after manual copy\r\nEXEC ('exec ActivePos_write.dbo.InitializeActivePosReadFromBackup @BackUpFileWithPath = ''c:\\temp\\ActivePos_read.22.1.223.2401.bak''') AT xxx\r\n\r\n--to start on the pos to force a restore of the backup. adapt version, mac and UNC before running\r\nexec ActiveSystemClient.dbo.DBAReplPosSubscription \r\n\t @mac = '9C-7B-EF-43-5A-98', \r\n\t @serverDbVersion = '23.2.23.19501', \r\n\t @preferedReplinibackup= '\\\\cvi247aps-replinibackup.coop-vitality.ch\\replinibackup\\ActivePos_read.23.2.23.19501.bak'\r\n\r\n\r\n--restart service on pos\r\nEXEC ('EXEC xp_cmdshell ''net stop ActiveposClientService'';EXEC xp_cmdshell ''net start ActiveposClientService''') AT xxx\r\n\r\n--subscription\r\nEXEC ActivePos_read..sp_dropsubscription @publication = N'ActivePosTran', @article = N'all', @subscriber ='xxx'\r\nEXEC ActiveSystemServer.dbo.RepairReplication\r\n" } \ No newline at end of file diff --git a/ret-f4a33a56-bbd3-4585-9038-bf8d52dc876c.json b/ret-f4a33a56-bbd3-4585-9038-bf8d52dc876c.json index 715f2c1..92b36a9 100644 --- a/ret-f4a33a56-bbd3-4585-9038-bf8d52dc876c.json +++ b/ret-f4a33a56-bbd3-4585-9038-bf8d52dc876c.json @@ -1,6 +1,6 @@ -{ - "id": "f4a33a56-bbd3-4585-9038-bf8d52dc876c", - "prefix": "ret", - "description": "", - "body": "return" +{ + "id": "f4a33a56-bbd3-4585-9038-bf8d52dc876c", + "prefix": "ret", + "description": "", + "body": "return" } \ No newline at end of file diff --git a/rj-388131b5-079c-4b86-8dd7-e92c403babf8.json b/rj-388131b5-079c-4b86-8dd7-e92c403babf8.json index 9122d3b..65af560 100644 --- a/rj-388131b5-079c-4b86-8dd7-e92c403babf8.json +++ b/rj-388131b5-079c-4b86-8dd7-e92c403babf8.json @@ -1,6 +1,6 @@ -{ - "id": "388131b5-079c-4b86-8dd7-e92c403babf8", - "prefix": "rj", - "description": "RIGHT JOIN fragment", - "body": "RIGHT JOIN " +{ + "id": "388131b5-079c-4b86-8dd7-e92c403babf8", + "prefix": "rj", + "description": "RIGHT JOIN fragment", + "body": "RIGHT JOIN " } \ No newline at end of file diff --git a/roj-a34a0f62-e0c5-49e2-a41d-181da6aa288d.json b/roj-a34a0f62-e0c5-49e2-a41d-181da6aa288d.json index c91767f..933ceb3 100644 --- a/roj-a34a0f62-e0c5-49e2-a41d-181da6aa288d.json +++ b/roj-a34a0f62-e0c5-49e2-a41d-181da6aa288d.json @@ -1,6 +1,6 @@ -{ - "id": "a34a0f62-e0c5-49e2-a41d-181da6aa288d", - "prefix": "roj", - "description": "RIGHT OUTER JOIN fragment", - "body": "RIGHT OUTER JOIN " +{ + "id": "a34a0f62-e0c5-49e2-a41d-181da6aa288d", + "prefix": "roj", + "description": "RIGHT OUTER JOIN fragment", + "body": "RIGHT OUTER JOIN " } \ No newline at end of file diff --git a/rt-f3809a25-f817-475f-9f45-39ea588477dc.json b/rt-f3809a25-f817-475f-9f45-39ea588477dc.json index dc52bcd..9026254 100644 --- a/rt-f3809a25-f817-475f-9f45-39ea588477dc.json +++ b/rt-f3809a25-f817-475f-9f45-39ea588477dc.json @@ -1,6 +1,6 @@ -{ - "id": "f3809a25-f817-475f-9f45-39ea588477dc", - "prefix": "rt", - "description": "Rollback transaction", - "body": "ROLLBACK TRANSACTION " +{ + "id": "f3809a25-f817-475f-9f45-39ea588477dc", + "prefix": "rt", + "description": "Rollback transaction", + "body": "ROLLBACK TRANSACTION " } \ No newline at end of file diff --git a/scf-337977e4-5af3-4c42-9cff-7e2059961365.json b/scf-337977e4-5af3-4c42-9cff-7e2059961365.json index 223cdc7..010efd9 100644 --- a/scf-337977e4-5af3-4c42-9cff-7e2059961365.json +++ b/scf-337977e4-5af3-4c42-9cff-7e2059961365.json @@ -1,6 +1,6 @@ -{ - "id": "337977e4-5af3-4c42-9cff-7e2059961365", - "prefix": "scf", - "description": "Count number of records returned by query", - "body": "SELECT COUNT(*) FROM " +{ + "id": "337977e4-5af3-4c42-9cff-7e2059961365", + "prefix": "scf", + "description": "Count number of records returned by query", + "body": "SELECT COUNT(*) FROM " } \ No newline at end of file diff --git a/searchCode-0970ec7e-b7c0-4a04-be1d-c4cc12ec73a7.json b/searchCode-0970ec7e-b7c0-4a04-be1d-c4cc12ec73a7.json index 08142bc..2bf13aa 100644 --- a/searchCode-0970ec7e-b7c0-4a04-be1d-c4cc12ec73a7.json +++ b/searchCode-0970ec7e-b7c0-4a04-be1d-c4cc12ec73a7.json @@ -1,6 +1,6 @@ -{ - "id": "0970ec7e-b7c0-4a04-be1d-c4cc12ec73a7", - "prefix": "searchCode", - "description": "Search through procs, functions and trigger a specific keyword. Avoid to check out a repo to do that search.", - "body": "SET TRAN ISOLATION LEVEL READ UNCOMMITTED\r\n\r\nDECLARE\r\n @SEARCHSTRING VARCHAR(255)\r\n ,@notcontain VARCHAR(255);\r\n\r\nSELECT\r\n @SEARCHSTRING = '$CURSOR$'\r\n ,@notcontain = '';\r\n\r\nSELECT DISTINCT\r\n sysobjects.name AS [Object Name]\r\n ,CASE\r\n WHEN sysobjects.xtype = 'P' THEN 'Stored Proc'\r\n WHEN sysobjects.xtype = 'TF' THEN 'Function'\r\n WHEN sysobjects.xtype = 'TR' THEN 'Trigger'\r\n END AS [Object Type]\r\nFROM sysobjects\r\n ,syscomments\r\nWHERE sysobjects.id = syscomments.id\r\nAND sysobjects.type IN ( 'P', 'TF', 'TR' )\r\nAND sysobjects.category = 0\r\nAND CHARINDEX(@SEARCHSTRING, syscomments.text) > 0\r\nAND ((\r\n CHARINDEX(@notcontain, syscomments.text) = 0\r\n OR CHARINDEX(@notcontain, syscomments.text) <> 0\r\n )\r\n);" +{ + "id": "0970ec7e-b7c0-4a04-be1d-c4cc12ec73a7", + "prefix": "searchCode", + "description": "Search through procs, functions and trigger a specific keyword. Avoid to check out a repo to do that search.", + "body": "SET TRAN ISOLATION LEVEL READ UNCOMMITTED\r\n\r\nDECLARE\r\n @SEARCHSTRING VARCHAR(255)\r\n ,@notcontain VARCHAR(255);\r\n\r\nSELECT\r\n @SEARCHSTRING = '$CURSOR$'\r\n ,@notcontain = '';\r\n\r\nSELECT DISTINCT\r\n sysobjects.name AS [Object Name]\r\n ,CASE\r\n WHEN sysobjects.xtype = 'P' THEN 'Stored Proc'\r\n WHEN sysobjects.xtype = 'TF' THEN 'Function'\r\n WHEN sysobjects.xtype = 'TR' THEN 'Trigger'\r\n END AS [Object Type]\r\nFROM sysobjects\r\n ,syscomments\r\nWHERE sysobjects.id = syscomments.id\r\nAND sysobjects.type IN ( 'P', 'TF', 'TR' )\r\nAND sysobjects.category = 0\r\nAND CHARINDEX(@SEARCHSTRING, syscomments.text) > 0\r\nAND ((\r\n CHARINDEX(@notcontain, syscomments.text) = 0\r\n OR CHARINDEX(@notcontain, syscomments.text) <> 0\r\n )\r\n);" } \ No newline at end of file diff --git a/seria-65cd3b01-5d90-454e-a523-dbb80156d2c6.json b/seria-65cd3b01-5d90-454e-a523-dbb80156d2c6.json index 202192c..061ad3e 100644 --- a/seria-65cd3b01-5d90-454e-a523-dbb80156d2c6.json +++ b/seria-65cd3b01-5d90-454e-a523-dbb80156d2c6.json @@ -1,6 +1,6 @@ -{ - "id": "65cd3b01-5d90-454e-a523-dbb80156d2c6", - "prefix": "seria", - "description": "change temporarily the isolation mode, get back to initial mode afterward", - "body": "DECLARE @initialIsolation VARCHAR(50);\r\nSELECT @initialIsolation = CASE transaction_isolation_level \r\n\t\tWHEN 0 THEN 'Unspecified' \r\n\t\tWHEN 1 THEN 'ReadUncommitted' \r\n\t\tWHEN 2 THEN 'ReadCommitted' \r\n\t\tWHEN 3 THEN 'Repeatable' \r\n\t\tWHEN 4 THEN 'Serializable' \r\n\t\tWHEN 5 THEN 'Snapshot' \r\n\tEND \r\nFROM sys.dm_exec_sessions \r\nwhere session_id = @@SPID;\r\n\r\nSET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\r\n$CURSOR$\r\nEXEC('SET TRANSACTION ISOLATION LEVEL '+@initialIsolation+';');\r\n" +{ + "id": "65cd3b01-5d90-454e-a523-dbb80156d2c6", + "prefix": "seria", + "description": "change temporarily the isolation mode, get back to initial mode afterward", + "body": "DECLARE @initialIsolation VARCHAR(50);\r\nSELECT @initialIsolation = CASE transaction_isolation_level \r\n\t\tWHEN 0 THEN 'Unspecified' \r\n\t\tWHEN 1 THEN 'ReadUncommitted' \r\n\t\tWHEN 2 THEN 'ReadCommitted' \r\n\t\tWHEN 3 THEN 'Repeatable' \r\n\t\tWHEN 4 THEN 'Serializable' \r\n\t\tWHEN 5 THEN 'Snapshot' \r\n\tEND \r\nFROM sys.dm_exec_sessions \r\nwhere session_id = @@SPID;\r\n\r\nSET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\r\n$CURSOR$\r\nEXEC('SET TRANSACTION ISOLATION LEVEL '+@initialIsolation+';');\r\n" } \ No newline at end of file diff --git a/server_start_time-d18e8e6b-64fd-44ac-acba-111a57d4f411.json b/server_start_time-d18e8e6b-64fd-44ac-acba-111a57d4f411.json index 2cfafd7..3afc0be 100644 --- a/server_start_time-d18e8e6b-64fd-44ac-acba-111a57d4f411.json +++ b/server_start_time-d18e8e6b-64fd-44ac-acba-111a57d4f411.json @@ -1,6 +1,6 @@ -{ - "id": "d18e8e6b-64fd-44ac-acba-111a57d4f411", - "prefix": "server_start_time", - "description": "", - "body": "SELECT a.[sqlserver_start_time], * \r\nFROM [sys].[dm_os_sys_info] a" +{ + "id": "d18e8e6b-64fd-44ac-acba-111a57d4f411", + "prefix": "server_start_time", + "description": "", + "body": "SELECT a.[sqlserver_start_time], * \r\nFROM [sys].[dm_os_sys_info] a" } \ No newline at end of file diff --git a/session_options-3a792d1a-98ee-4d0e-98f7-c44d4b158772.json b/session_options-3a792d1a-98ee-4d0e-98f7-c44d4b158772.json index 962e053..f474e19 100644 --- a/session_options-3a792d1a-98ee-4d0e-98f7-c44d4b158772.json +++ b/session_options-3a792d1a-98ee-4d0e-98f7-c44d4b158772.json @@ -1,6 +1,6 @@ -{ - "id": "3a792d1a-98ee-4d0e-98f7-c44d4b158772", - "prefix": "session_options", - "description": "show current session options", - "body": "with OPTION_VALUES as (\r\nselect\r\noptionValues.id,\r\noptionValues.name,\r\noptionValues.description,\r\nrow_number() over (partition by 1 order by id) as bitNum\r\nfrom (values\r\n(1, 'DISABLE_DEF_CNST_CHK', 'Controls interim or deferred constraint checking.'),\r\n(2, 'IMPLICIT_TRANSACTIONS', 'For dblib network library connections, controls whether a transaction is started implicitly when a statement is executed. The IMPLICIT_TRANSACTIONS setting has no effect on ODBC or OLEDB connections.'),\r\n(4, 'CURSOR_CLOSE_ON_COMMIT', 'Controls behavior of cursors after a commit operation has been performed.'),\r\n(8, 'ANSI_WARNINGS', 'Controls truncation and NULL in aggregate warnings.'),\r\n(16, 'ANSI_PADDING', 'Controls padding of fixed-length variables.'),\r\n(32, 'ANSI_NULLS', 'Controls NULL handling when using equality operators.'),\r\n(64, 'ARITHABORT', 'Terminates a query when an overflow or divide-by-zero error occurs during query execution.'),\r\n(128, 'ARITHIGNORE', 'Returns NULL when an overflow or divide-by-zero error occurs during a query.'),\r\n(256, 'QUOTED_IDENTIFIER', 'Differentiates between single and double quotation marks when evaluating an expression.'),\r\n(512, 'NOCOUNT', 'Turns off the message returned at the end of each statement that states how many rows were affected.'),\r\n(1024, 'ANSI_NULL_DFLT_ON', 'Alters the session'+char(39)+'s behavior to use ANSI compatibility for nullability. New columns defined without explicit nullability are defined to allow nulls.'),\r\n(2048, 'ANSI_NULL_DFLT_OFF', 'Alters the session'+char(39)+'s behavior not to use ANSI compatibility for nullability. New columns defined without explicit nullability do not allow nulls.'),\r\n(4096, 'CONCAT_NULL_YIELDS_NULL', 'Returns NULL when concatenating a NULL value with a string.'),\r\n(8192, 'NUMERIC_ROUNDABORT', 'Generates an error when a loss of precision occurs in an expression.'),\r\n(16384, 'XACT_ABORT', 'Rolls back a transaction if a Transact-SQL statement raises a run-time error.')\r\n) as optionValues(id, name, description)\r\n)\r\nselect *, case when (@@options & id) = id then 1 else 0 end as setting\r\nfrom OPTION_VALUES\r\nORDER BY [setting];" +{ + "id": "3a792d1a-98ee-4d0e-98f7-c44d4b158772", + "prefix": "session_options", + "description": "show current session options", + "body": "with OPTION_VALUES as (\r\nselect\r\noptionValues.id,\r\noptionValues.name,\r\noptionValues.description,\r\nrow_number() over (partition by 1 order by id) as bitNum\r\nfrom (values\r\n(1, 'DISABLE_DEF_CNST_CHK', 'Controls interim or deferred constraint checking.'),\r\n(2, 'IMPLICIT_TRANSACTIONS', 'For dblib network library connections, controls whether a transaction is started implicitly when a statement is executed. The IMPLICIT_TRANSACTIONS setting has no effect on ODBC or OLEDB connections.'),\r\n(4, 'CURSOR_CLOSE_ON_COMMIT', 'Controls behavior of cursors after a commit operation has been performed.'),\r\n(8, 'ANSI_WARNINGS', 'Controls truncation and NULL in aggregate warnings.'),\r\n(16, 'ANSI_PADDING', 'Controls padding of fixed-length variables.'),\r\n(32, 'ANSI_NULLS', 'Controls NULL handling when using equality operators.'),\r\n(64, 'ARITHABORT', 'Terminates a query when an overflow or divide-by-zero error occurs during query execution.'),\r\n(128, 'ARITHIGNORE', 'Returns NULL when an overflow or divide-by-zero error occurs during a query.'),\r\n(256, 'QUOTED_IDENTIFIER', 'Differentiates between single and double quotation marks when evaluating an expression.'),\r\n(512, 'NOCOUNT', 'Turns off the message returned at the end of each statement that states how many rows were affected.'),\r\n(1024, 'ANSI_NULL_DFLT_ON', 'Alters the session'+char(39)+'s behavior to use ANSI compatibility for nullability. New columns defined without explicit nullability are defined to allow nulls.'),\r\n(2048, 'ANSI_NULL_DFLT_OFF', 'Alters the session'+char(39)+'s behavior not to use ANSI compatibility for nullability. New columns defined without explicit nullability do not allow nulls.'),\r\n(4096, 'CONCAT_NULL_YIELDS_NULL', 'Returns NULL when concatenating a NULL value with a string.'),\r\n(8192, 'NUMERIC_ROUNDABORT', 'Generates an error when a loss of precision occurs in an expression.'),\r\n(16384, 'XACT_ABORT', 'Rolls back a transaction if a Transact-SQL statement raises a run-time error.')\r\n) as optionValues(id, name, description)\r\n)\r\nselect *, case when (@@options & id) = id then 1 else 0 end as setting\r\nfrom OPTION_VALUES\r\nORDER BY [setting];" } \ No newline at end of file diff --git a/sf-c4978137-d293-4c35-9760-3dbfb2bfae23.json b/sf-c4978137-d293-4c35-9760-3dbfb2bfae23.json index 9903a2d..13d6364 100644 --- a/sf-c4978137-d293-4c35-9760-3dbfb2bfae23.json +++ b/sf-c4978137-d293-4c35-9760-3dbfb2bfae23.json @@ -1,6 +1,6 @@ -{ - "id": "c4978137-d293-4c35-9760-3dbfb2bfae23", - "prefix": "sf", - "description": "SELECT * FROM fragment", - "body": "SELECT * \r\nFROM $CURSOR$" +{ + "id": "c4978137-d293-4c35-9760-3dbfb2bfae23", + "prefix": "sf", + "description": "SELECT * FROM fragment", + "body": "SELECT * \r\nFROM $CURSOR$" } \ No newline at end of file diff --git a/sql_start_time-0b2557af-0b26-4c47-b15c-72a9d0314562.json b/sql_start_time-0b2557af-0b26-4c47-b15c-72a9d0314562.json index e9bb4e8..6d6527f 100644 --- a/sql_start_time-0b2557af-0b26-4c47-b15c-72a9d0314562.json +++ b/sql_start_time-0b2557af-0b26-4c47-b15c-72a9d0314562.json @@ -1,6 +1,6 @@ -{ - "id": "0b2557af-0b26-4c47-b15c-72a9d0314562", - "prefix": "sql_start_time", - "description": "", - "body": "SELECT [sqlserver_start_time], [physical_memory_kb], [cpu_count]\r\nFROM sys.[dm_os_sys_info]" +{ + "id": "0b2557af-0b26-4c47-b15c-72a9d0314562", + "prefix": "sql_start_time", + "description": "", + "body": "SELECT [sqlserver_start_time], [physical_memory_kb], [cpu_count]\r\nFROM sys.[dm_os_sys_info]" } \ No newline at end of file diff --git a/st-a9bcbeb5-94ca-4ce8-a371-1c82a0662d19.json b/st-a9bcbeb5-94ca-4ce8-a371-1c82a0662d19.json index 75dd95c..33cfcb1 100644 --- a/st-a9bcbeb5-94ca-4ce8-a371-1c82a0662d19.json +++ b/st-a9bcbeb5-94ca-4ce8-a371-1c82a0662d19.json @@ -1,6 +1,6 @@ -{ - "id": "a9bcbeb5-94ca-4ce8-a371-1c82a0662d19", - "prefix": "st", - "description": "SELECT top 100 rows", - "body": "SELECT TOP (100) * FROM $CURSOR$" +{ + "id": "a9bcbeb5-94ca-4ce8-a371-1c82a0662d19", + "prefix": "st", + "description": "SELECT top 100 rows", + "body": "SELECT TOP (100) * FROM $CURSOR$" } \ No newline at end of file diff --git a/stats-28526a01-97d7-4fc6-9e51-d7fc1764e6b3.json b/stats-28526a01-97d7-4fc6-9e51-d7fc1764e6b3.json index fd814b9..9f5a429 100644 --- a/stats-28526a01-97d7-4fc6-9e51-d7fc1764e6b3.json +++ b/stats-28526a01-97d7-4fc6-9e51-d7fc1764e6b3.json @@ -1,6 +1,6 @@ -{ - "id": "28526a01-97d7-4fc6-9e51-d7fc1764e6b3", - "prefix": "stats", - "description": "sql server statistics", - "body": "SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS TableName,\r\n c.name AS ColumnName,\r\n t.name AS tblName,\r\n s.name AS StatName,\r\n STATS_DATE(s.[object_id], s.stats_id) AS LastUpdated,\r\n DATEDIFF(d, STATS_DATE(s.[object_id], s.stats_id), GETDATE()) AS DaysOld,\r\n dsp.modification_counter,\r\n s.auto_created,\r\n s.user_created,\r\n s.no_recompute,\r\n s.[object_id],\r\n s.stats_id,\r\n sc.stats_column_id,\r\n sc.column_id\r\n FROM sys.stats s\r\n JOIN sys.stats_columns sc\r\n ON sc.[object_id] = s.[object_id]\r\n AND sc.stats_id = s.stats_id\r\n JOIN sys.columns c\r\n ON c.[object_id] = sc.[object_id]\r\n AND c.column_id = sc.column_id\r\n JOIN sys.tables t\r\n ON t.object_id = c.object_id\r\n JOIN sys.partitions par\r\n ON par.[object_id] = s.[object_id]\r\n JOIN sys.objects obj\r\n ON par.[object_id] = obj.[object_id]\r\n CROSS APPLY sys.dm_db_stats_properties(sc.[object_id], s.stats_id) AS dsp\r\n WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1\r\n AND ( s.auto_created = 1\r\n OR s.user_created = 1)\r\n --AND t.name = 'Document_header'\r\n ORDER BY DaysOld;" +{ + "id": "28526a01-97d7-4fc6-9e51-d7fc1764e6b3", + "prefix": "stats", + "description": "sql server statistics", + "body": "SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS TableName,\r\n c.name AS ColumnName,\r\n t.name AS tblName,\r\n s.name AS StatName,\r\n STATS_DATE(s.[object_id], s.stats_id) AS LastUpdated,\r\n DATEDIFF(d, STATS_DATE(s.[object_id], s.stats_id), GETDATE()) AS DaysOld,\r\n dsp.modification_counter,\r\n s.auto_created,\r\n s.user_created,\r\n s.no_recompute,\r\n s.[object_id],\r\n s.stats_id,\r\n sc.stats_column_id,\r\n sc.column_id\r\n FROM sys.stats s\r\n JOIN sys.stats_columns sc\r\n ON sc.[object_id] = s.[object_id]\r\n AND sc.stats_id = s.stats_id\r\n JOIN sys.columns c\r\n ON c.[object_id] = sc.[object_id]\r\n AND c.column_id = sc.column_id\r\n JOIN sys.tables t\r\n ON t.object_id = c.object_id\r\n JOIN sys.partitions par\r\n ON par.[object_id] = s.[object_id]\r\n JOIN sys.objects obj\r\n ON par.[object_id] = obj.[object_id]\r\n CROSS APPLY sys.dm_db_stats_properties(sc.[object_id], s.stats_id) AS dsp\r\n WHERE OBJECTPROPERTY(s.object_id, 'IsUserTable') = 1\r\n AND ( s.auto_created = 1\r\n OR s.user_created = 1)\r\n --AND t.name = 'Document_header'\r\n ORDER BY DaysOld;" } \ No newline at end of file diff --git a/tc-ea735b8e-4db5-4048-bce6-c8dee79b5790.json b/tc-ea735b8e-4db5-4048-bce6-c8dee79b5790.json index 782305c..4850ba6 100644 --- a/tc-ea735b8e-4db5-4048-bce6-c8dee79b5790.json +++ b/tc-ea735b8e-4db5-4048-bce6-c8dee79b5790.json @@ -1,6 +1,6 @@ -{ - "id": "ea735b8e-4db5-4048-bce6-c8dee79b5790", - "prefix": "tc", - "description": "TRY ... CATCH fragment", - "body": "BEGIN TRY\r\n $SELECTEDTEXT$\r\nEND TRY\r\nBEGIN CATCH\r\n $CURSOR$\r\nEND CATCH" +{ + "id": "ea735b8e-4db5-4048-bce6-c8dee79b5790", + "prefix": "tc", + "description": "TRY ... CATCH fragment", + "body": "BEGIN TRY\r\n $SELECTEDTEXT$\r\nEND TRY\r\nBEGIN CATCH\r\n $CURSOR$\r\nEND CATCH" } \ No newline at end of file diff --git a/timings-44e197f3-6a63-40ce-8e3c-1a1c18e4434d.json b/timings-44e197f3-6a63-40ce-8e3c-1a1c18e4434d.json index 6585600..f7feba1 100644 --- a/timings-44e197f3-6a63-40ce-8e3c-1a1c18e4434d.json +++ b/timings-44e197f3-6a63-40ce-8e3c-1a1c18e4434d.json @@ -1,12 +1,12 @@ -{ - "id": "44e197f3-6a63-40ce-8e3c-1a1c18e4434d", - "prefix": "timings", - "description": "Wraps a simple timings test harness around the selected code", - "body": "/**\r\nCopyright (c) Red Gate Software Ltd 2017\r\nAll rights Reserved. Use of this code is subject to the terms of a license agreement with Red Gate Software Limited.\r\n\r\nFor more info, see https://www.red-gate.com/hub/product-learning/sql-prompt/record-t-sql-execution-times-using-sql-prompt-snippet\r\n**/\r\n\r\nDECLARE @log table\r\n(\r\n TheOrder int IDENTITY(1, 1),\r\n WhatHappened varchar(200),\r\n WhenItDid datetime2 DEFAULT GETDATE()\r\n)\r\n----start of timing\r\nINSERT INTO @log(WhatHappened)\r\nSELECT 'Starting $routine$' --place at the start\r\n \r\n$SELECTEDTEXT$$CURSOR$\r\n \r\n--where the routine you want to time ends\r\nINSERT INTO @log(WhatHappened)\r\nSELECT '$routine$ took '\r\nSELECT ending.WhatHappened, DATEDIFF(ms, starting.WhenItDid, ending.WhenItDid)\r\nFROM @log starting\r\n INNER JOIN @log ending\r\n ON ending.TheOrder = starting.TheOrder + 1\r\n--list out all the timings", - "placeholders": [ - { - "name": "routine", - "defaultValue": "" - } - ] +{ + "id": "44e197f3-6a63-40ce-8e3c-1a1c18e4434d", + "prefix": "timings", + "description": "Wraps a simple timings test harness around the selected code", + "body": "/**\r\nCopyright (c) Red Gate Software Ltd 2017\r\nAll rights Reserved. Use of this code is subject to the terms of a license agreement with Red Gate Software Limited.\r\n\r\nFor more info, see https://www.red-gate.com/hub/product-learning/sql-prompt/record-t-sql-execution-times-using-sql-prompt-snippet\r\n**/\r\n\r\nDECLARE @log table\r\n(\r\n TheOrder int IDENTITY(1, 1),\r\n WhatHappened varchar(200),\r\n WhenItDid datetime2 DEFAULT GETDATE()\r\n)\r\n----start of timing\r\nINSERT INTO @log(WhatHappened)\r\nSELECT 'Starting $routine$' --place at the start\r\n \r\n$SELECTEDTEXT$$CURSOR$\r\n \r\n--where the routine you want to time ends\r\nINSERT INTO @log(WhatHappened)\r\nSELECT '$routine$ took '\r\nSELECT ending.WhatHappened, DATEDIFF(ms, starting.WhenItDid, ending.WhenItDid)\r\nFROM @log starting\r\n INNER JOIN @log ending\r\n ON ending.TheOrder = starting.TheOrder + 1\r\n--list out all the timings", + "placeholders": [ + { + "name": "routine", + "defaultValue": "" + } + ] } \ No newline at end of file diff --git a/today-0241a35e-0b6d-4056-8add-202af745a853.json b/today-0241a35e-0b6d-4056-8add-202af745a853.json index 98a643d..03afb2a 100644 --- a/today-0241a35e-0b6d-4056-8add-202af745a853.json +++ b/today-0241a35e-0b6d-4056-8add-202af745a853.json @@ -1,6 +1,6 @@ -{ - "id": "0241a35e-0b6d-4056-8add-202af745a853", - "prefix": "today", - "description": "return the current date without time", - "body": "DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP), 0)" +{ + "id": "0241a35e-0b6d-4056-8add-202af745a853", + "prefix": "today", + "description": "return the current date without time", + "body": "DATEADD(DAY, DATEDIFF(DAY, 0, CURRENT_TIMESTAMP), 0)" } \ No newline at end of file diff --git a/tstamp-386e4ced-49f8-4a1c-8b35-0b68ae05ca17.json b/tstamp-386e4ced-49f8-4a1c-8b35-0b68ae05ca17.json index 4cd19ec..f81627f 100644 --- a/tstamp-386e4ced-49f8-4a1c-8b35-0b68ae05ca17.json +++ b/tstamp-386e4ced-49f8-4a1c-8b35-0b68ae05ca17.json @@ -1,6 +1,6 @@ -{ - "id": "386e4ced-49f8-4a1c-8b35-0b68ae05ca17", - "prefix": "tstamp", - "description": "get timestamp", - "body": "SELECT \r\n\tCONVERT(VARCHAR(4), DATEPART(YEAR, CURRENT_TIMESTAMP))\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(MONTH, CURRENT_TIMESTAMP)),2)\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(DAY, CURRENT_TIMESTAMP)),2)\r\n\t+'_'\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(HOUR, CURRENT_TIMESTAMP)),2)\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(MINUTE, CURRENT_TIMESTAMP)),2)\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(SECOND, CURRENT_TIMESTAMP)),2)\r\n" +{ + "id": "386e4ced-49f8-4a1c-8b35-0b68ae05ca17", + "prefix": "tstamp", + "description": "get timestamp", + "body": "SELECT \r\n\tCONVERT(VARCHAR(4), DATEPART(YEAR, CURRENT_TIMESTAMP))\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(MONTH, CURRENT_TIMESTAMP)),2)\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(DAY, CURRENT_TIMESTAMP)),2)\r\n\t+'_'\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(HOUR, CURRENT_TIMESTAMP)),2)\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(MINUTE, CURRENT_TIMESTAMP)),2)\r\n\t+RIGHT('00'+CONVERT(VARCHAR(2), DATEPART(SECOND, CURRENT_TIMESTAMP)),2)\r\n" } \ No newline at end of file diff --git a/version-28ccb2a9-263a-46db-92e8-27d58971f114.json b/version-28ccb2a9-263a-46db-92e8-27d58971f114.json index 3cbd4c8..6f40d9e 100644 --- a/version-28ccb2a9-263a-46db-92e8-27d58971f114.json +++ b/version-28ccb2a9-263a-46db-92e8-27d58971f114.json @@ -1,6 +1,6 @@ -{ - "id": "28ccb2a9-263a-46db-92e8-27d58971f114", - "prefix": "version", - "description": "get tripaharm version", - "body": "--pharma\r\nSELECT ActivePos_write.upd.DatabaseVersion()\r\n\r\n--central\r\nSELECT TOP 3 * \r\nFROM arizona.dbo.APS_version_history h\r\nWHERE [h].[APSVH_program_name]='Arizona'\r\nAND [h].[APSVH_program_version] IS NOT NULL \r\nORDER BY [APSVH_APS_TS] DESC " +{ + "id": "28ccb2a9-263a-46db-92e8-27d58971f114", + "prefix": "version", + "description": "get tripaharm version", + "body": "--pharma\r\nSELECT ActivePos_write.upd.DatabaseVersion()\r\n\r\n--central\r\nSELECT TOP 3 * \r\nFROM arizona.dbo.APS_version_history h\r\nWHERE [h].[APSVH_program_name]='Arizona'\r\nAND [h].[APSVH_program_version] IS NOT NULL \r\nORDER BY [APSVH_APS_TS] DESC " } \ No newline at end of file diff --git a/wac-300173f4-302f-4816-b1ac-58a1fe45acf9.json b/wac-300173f4-302f-4816-b1ac-58a1fe45acf9.json index 473a706..ef0805a 100644 --- a/wac-300173f4-302f-4816-b1ac-58a1fe45acf9.json +++ b/wac-300173f4-302f-4816-b1ac-58a1fe45acf9.json @@ -1,6 +1,6 @@ -{ - "id": "300173f4-302f-4816-b1ac-58a1fe45acf9", - "prefix": "wac", - "description": "sp_whoIsActive for a pos (works in master db)", - "body": "USE master\r\nIF OBJECT_ID('dbo.sp_whoisactive') IS NOT NULL \r\n\tDROP PROCEDURE dbo.sp_whoisactive;\r\nGO\r\n\r\nGO\r\nSET QUOTED_IDENTIFIER ON;\r\nSET ANSI_PADDING ON;\r\nSET CONCAT_NULL_YIELDS_NULL ON;\r\nSET ANSI_WARNINGS ON;\r\nSET NUMERIC_ROUNDABORT OFF;\r\nSET ARITHABORT ON;\r\nGO\r\n\r\nIF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_WhoIsActive')\r\n EXEC ('CREATE PROC dbo.sp_WhoIsActive AS SELECT ''stub version, to be replaced''')\r\nGO\r\n\r\n/*********************************************************************************************\r\nWho Is Active? v12.00 (2021-11-10)\r\n(C) 2007-2021, Adam Machanic\r\n\r\nFeedback: https://github.com/amachanic/sp_whoisactive/issues\r\nReleases: https://github.com/amachanic/sp_whoisactive/releases\r\nDocs: http://whoisactive.com\r\n\r\nLicense:\r\n https://github.com/amachanic/sp_whoisactive/blob/master/LICENSE\r\n*********************************************************************************************/\r\nALTER PROC dbo.sp_WhoIsActive\r\n(\r\n--~\r\n --Filters--Both inclusive and exclusive\r\n --Set either filter to '' to disable\r\n --Valid filter types are: session, program, database, login, and host\r\n --Session is a session ID, and either 0 or '' can be used to indicate \"all\" sessions\r\n --All other filter types support % or _ as wildcards\r\n @filter sysname = '',\r\n @filter_type VARCHAR(10) = 'session',\r\n @not_filter sysname = '',\r\n @not_filter_type VARCHAR(10) = 'session',\r\n\r\n --Retrieve data about the calling session?\r\n @show_own_spid BIT = 0,\r\n\r\n --Retrieve data about system sessions?\r\n @show_system_spids BIT = 0,\r\n\r\n --Controls how sleeping SPIDs are handled, based on the idea of levels of interest\r\n --0 does not pull any sleeping SPIDs\r\n --1 pulls only those sleeping SPIDs that also have an open transaction\r\n --2 pulls all sleeping SPIDs\r\n @show_sleeping_spids TINYINT = 1,\r\n\r\n --If 1, gets the full stored procedure or running batch, when available\r\n --If 0, gets only the actual statement that is currently running in the batch or procedure\r\n @get_full_inner_text BIT = 0,\r\n\r\n --Get associated query plans for running tasks, if available\r\n --If @get_plans = 1, gets the plan based on the request's statement offset\r\n --If @get_plans = 2, gets the entire plan based on the request's plan_handle\r\n @get_plans TINYINT = 0,\r\n\r\n --Get the associated outer ad hoc query or stored procedure call, if available\r\n @get_outer_command BIT = 0,\r\n\r\n --Enables pulling transaction log write info, transaction duration, and the\r\n --implicit_transaction identification column\r\n @get_transaction_info BIT = 0,\r\n\r\n --Get information on active tasks, based on three interest levels\r\n --Level 0 does not pull any task-related information\r\n --Level 1 is a lightweight mode that pulls the top non-CXPACKET wait, giving preference to blockers\r\n --Level 2 pulls all available task-based metrics, including:\r\n --number of active tasks, current wait stats, physical I/O, context switches, and blocker information\r\n @get_task_info TINYINT = 1,\r\n\r\n --Gets associated locks for each request, aggregated in an XML format\r\n @get_locks BIT = 0,\r\n\r\n --Get average time for past runs of an active query\r\n --(based on the combination of plan handle, sql handle, and offset)\r\n @get_avg_time BIT = 0,\r\n\r\n --Get additional non-performance-related information about the session or request\r\n --text_size, language, date_format, date_first, quoted_identifier, arithabort, ansi_null_dflt_on,\r\n --ansi_defaults, ansi_warnings, ansi_padding, ansi_nulls, concat_null_yields_null,\r\n --transaction_isolation_level, lock_timeout, deadlock_priority, row_count, command_type\r\n --\r\n --If a SQL Agent job is running, an subnode called agent_info will be populated with some or all of\r\n --the following: job_id, job_name, step_id, step_name, msdb_query_error (in the event of an error)\r\n --\r\n --If @get_task_info is set to 2 and a lock wait is detected, a subnode called block_info will be\r\n --populated with some or all of the following: lock_type, database_name, object_id, file_id, hobt_id,\r\n --applock_hash, metadata_resource, metadata_class_id, object_name, schema_name\r\n @get_additional_info BIT = 0,\r\n\r\n --Get additional information related to workspace memory\r\n --requested_memory, granted_memory, max_used_memory, and memory_info.\r\n --\r\n --Not available for SQL Server 2005.\r\n @get_memory_info BIT = 0,\r\n\r\n --Walk the blocking chain and count the number of\r\n --total SPIDs blocked all the way down by a given session\r\n --Also enables task_info Level 1, if @get_task_info is set to 0\r\n @find_block_leaders BIT = 0,\r\n\r\n --Pull deltas on various metrics\r\n --Interval in seconds to wait before doing the second data pull\r\n @delta_interval TINYINT = 0,\r\n\r\n --List of desired output columns, in desired order\r\n --Note that the final output will be the intersection of all enabled features and all\r\n --columns in the list. Therefore, only columns associated with enabled features will\r\n --actually appear in the output. Likewise, removing columns from this list may effectively\r\n --disable features, even if they are turned on\r\n --\r\n --Each element in this list must be one of the valid output column names. Names must be\r\n --delimited by square brackets. White space, formatting, and additional characters are\r\n --allowed, as long as the list contains exact matches of delimited valid column names.\r\n @output_column_list VARCHAR(8000) = '[dd%][session_id][sql_text][sql_command][login_name][wait_info][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][query_plan][locks][%]',\r\n\r\n --Column(s) by which to sort output, optionally with sort directions.\r\n --Valid column choices:\r\n --session_id, physical_io, reads, physical_reads, writes, tempdb_allocations,\r\n --tempdb_current, CPU, context_switches, used_memory, physical_io_delta, reads_delta,\r\n --physical_reads_delta, writes_delta, tempdb_allocations_delta, tempdb_current_delta,\r\n --CPU_delta, context_switches_delta, used_memory_delta, tasks, tran_start_time,\r\n --open_tran_count, blocking_session_id, blocked_session_count, percent_complete,\r\n --host_name, login_name, database_name, start_time, login_time, program_name\r\n --\r\n --Note that column names in the list must be bracket-delimited. Commas and/or white\r\n --space are not required.\r\n @sort_order VARCHAR(500) = '[start_time] ASC',\r\n\r\n --Formats some of the output columns in a more \"human readable\" form\r\n --0 disables outfput format\r\n --1 formats the output for variable-width fonts\r\n --2 formats the output for fixed-width fonts\r\n @format_output TINYINT = 1,\r\n\r\n --If set to a non-blank value, the script will attempt to insert into the specified\r\n --destination table. Please note that the script will not verify that the table exists,\r\n --or that it has the correct schema, before doing the insert.\r\n --Table can be specified in one, two, or three-part format\r\n @destination_table VARCHAR(4000) = '',\r\n\r\n --If set to 1, no data collection will happen and no result set will be returned; instead,\r\n --a CREATE TABLE statement will be returned via the @schema parameter, which will match\r\n --the schema of the result set that would be returned by using the same collection of the\r\n --rest of the parameters. The CREATE TABLE statement will have a placeholder token of\r\n -- in place of an actual table name.\r\n @return_schema BIT = 0,\r\n @schema VARCHAR(MAX) = NULL OUTPUT,\r\n\r\n --Help! What do I do?\r\n @help BIT = 0\r\n--~\r\n)\r\n/*\r\nOUTPUT COLUMNS\r\n--------------\r\nFormatted/Non: [session_id] [smallint] NOT NULL\r\n Session ID (a.k.a. SPID)\r\n\r\nFormatted: [dd hh:mm:ss.mss] [varchar](15) NULL\r\nNon-Formatted: \r\n For an active request, time the query has been running\r\n For a sleeping session, time since the last batch completed\r\n\r\nFormatted: [dd hh:mm:ss.mss (avg)] [varchar](15) NULL\r\nNon-Formatted: [avg_elapsed_time] [int] NULL\r\n (Requires @get_avg_time option)\r\n How much time has the active portion of the query taken in the past, on average?\r\n\r\nFormatted: [physical_io] [varchar](30) NULL\r\nNon-Formatted: [physical_io] [bigint] NULL\r\n Shows the number of physical I/Os, for active requests\r\n\r\nFormatted: [reads] [varchar](30) NULL\r\nNon-Formatted: [reads] [bigint] NULL\r\n For an active request, number of reads done for the current query\r\n For a sleeping session, total number of reads done over the lifetime of the session\r\n\r\nFormatted: [physical_reads] [varchar](30) NULL\r\nNon-Formatted: [physical_reads] [bigint] NULL\r\n For an active request, number of physical reads done for the current query\r\n For a sleeping session, total number of physical reads done over the lifetime of the session\r\n\r\nFormatted: [writes] [varchar](30) NULL\r\nNon-Formatted: [writes] [bigint] NULL\r\n For an active request, number of writes done for the current query\r\n For a sleeping session, total number of writes done over the lifetime of the session\r\n\r\nFormatted: [tempdb_allocations] [varchar](30) NULL\r\nNon-Formatted: [tempdb_allocations] [bigint] NULL\r\n For an active request, number of TempDB writes done for the current query\r\n For a sleeping session, total number of TempDB writes done over the lifetime of the session\r\n\r\nFormatted: [tempdb_current] [varchar](30) NULL\r\nNon-Formatted: [tempdb_current] [bigint] NULL\r\n For an active request, number of TempDB pages currently allocated for the query\r\n For a sleeping session, number of TempDB pages currently allocated for the session\r\n\r\nFormatted: [CPU] [varchar](30) NULL\r\nNon-Formatted: [CPU] [bigint] NULL\r\n For an active request, total CPU time consumed by the current query\r\n For a sleeping session, total CPU time consumed over the lifetime of the session\r\n\r\nFormatted: [context_switches] [varchar](30) NULL\r\nNon-Formatted: [context_switches] [bigint] NULL\r\n Shows the number of context switches, for active requests\r\n\r\nFormatted: [used_memory] [varchar](30) NOT NULL\r\nNon-Formatted: [used_memory] [bigint] NOT NULL\r\n For an active request, total memory consumption for the current query\r\n For a sleeping session, total current memory consumption\r\n\r\nFormatted: [max_used_memory] [varchar](30) NULL\r\nNon-Formatted: [max_used_memory] [bigint] NULL\r\n (Requires @get_memory_info = 1)\r\n For an active request, the maximum amount of memory that has been used during\r\n processing up to the point of observation for the current query\r\n\r\nFormatted: [requested_memory] [varchar](30) NULL\r\nNon-Formatted: [requested_memory] [bigint] NULL\r\n (Requires @get_memory_info = 1)\r\n For an active request, the amount of memory requested by the query processor\r\n for hash, sort, and parallelism operations\r\n\r\nFormatted: [granted_memory] [varchar](30) NULL\r\nNon-Formatted: [granted_memory] [bigint] NULL\r\n (Requires @get_memory_info = 1)\r\n For an active request, the amount of memory granted to the query processor\r\n for hash, sort, and parallelism operations\r\n\r\nFormatted: [physical_io_delta] [varchar](30) NULL\r\nNon-Formatted: [physical_io_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of physical I/Os reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [reads_delta] [varchar](30) NULL\r\nNon-Formatted: [reads_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of reads reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [physical_reads_delta] [varchar](30) NULL\r\nNon-Formatted: [physical_reads_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of physical reads reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [writes_delta] [varchar](30) NULL\r\nNon-Formatted: [writes_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of writes reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [tempdb_allocations_delta] [varchar](30) NULL\r\nNon-Formatted: [tempdb_allocations_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of TempDB writes reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [tempdb_current_delta] [varchar](30) NULL\r\nNon-Formatted: [tempdb_current_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of allocated TempDB pages reported on the first and second\r\n collections. If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [CPU_delta] [varchar](30) NULL\r\nNon-Formatted: [CPU_delta] [int] NULL\r\n (Requires @delta_interval option)\r\n Difference between the CPU time reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [context_switches_delta] [varchar](30) NULL\r\nNon-Formatted: [context_switches_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the context switches count reported on the first and second collections\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [used_memory_delta] [varchar](30) NULL\r\nNon-Formatted: [used_memory_delta] [bigint] NULL\r\n Difference between the memory usage reported on the first and second collections\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [max_used_memory_delta] [varchar](30) NULL\r\nNon-Formatted: [max_used_memory_delta] [bigint] NULL\r\n Difference between the max memory usage reported on the first and second collections\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [tasks] [varchar](30) NULL\r\nNon-Formatted: [tasks] [smallint] NULL\r\n Number of worker tasks currently allocated, for active requests\r\n\r\nFormatted/Non: [status] [varchar](30) NOT NULL\r\n Activity status for the session (running, sleeping, etc)\r\n\r\nFormatted/Non: [wait_info] [nvarchar](4000) NULL\r\n Aggregates wait information, in the following format:\r\n (Ax: Bms/Cms/Dms)E\r\n A is the number of waiting tasks currently waiting on resource type E. B/C/D are wait\r\n times, in milliseconds. If only one thread is waiting, its wait time will be shown as B.\r\n If two tasks are waiting, each of their wait times will be shown (B/C). If three or more\r\n tasks are waiting, the minimum, average, and maximum wait times will be shown (B/C/D).\r\n If wait type E is a page latch wait and the page is of a \"special\" type (e.g. PFS, GAM, SGAM),\r\n the page type will be identified.\r\n If wait type E is CXPACKET, CXCONSUMER, CXSYNC_PORT, or CXSYNC_CONSUMER the nodeId from the\r\n query plan will be identified\r\n\r\nFormatted/Non: [locks] [xml] NULL\r\n (Requires @get_locks option)\r\n Aggregates lock information, in XML format.\r\n The lock XML includes the lock mode, locked object, and aggregates the number of requests.\r\n Attempts are made to identify locked objects by name\r\n\r\nFormatted/Non: [tran_start_time] [datetime] NULL\r\n (Requires @get_transaction_info option)\r\n Date and time that the first transaction opened by a session caused a transaction log\r\n write to occur.\r\n\r\nFormatted/Non: [tran_log_writes] [nvarchar](4000) NULL\r\n (Requires @get_transaction_info option)\r\n Aggregates transaction log write information, in the following format:\r\n A:wB (C kB)\r\n A is a database that has been touched by an active transaction\r\n B is the number of log writes that have been made in the database as a result of the transaction\r\n C is the number of log kilobytes consumed by the log records\r\n\r\nFormatted/Non: [implicit_tran] [nvarchar](3) NULL\r\n (Requires @get_transaction_info option)\r\n For active read-write transactions, returns on \"ON\" the transaction has been started as a result\r\n of the session using the implicit_transactions option, or \"OFF\" otherwise.\r\n\r\nFormatted: [open_tran_count] [varchar](30) NULL\r\nNon-Formatted: [open_tran_count] [smallint] NULL\r\n Shows the number of open transactions the session has open\r\n\r\nFormatted: [sql_command] [xml] NULL\r\nNon-Formatted: [sql_command] [nvarchar](max) NULL\r\n (Requires @get_outer_command option)\r\n Shows the \"outer\" SQL command, i.e. the text of the batch or RPC sent to the server,\r\n if available\r\n\r\nFormatted: [sql_text] [xml] NULL\r\nNon-Formatted: [sql_text] [nvarchar](max) NULL\r\n Shows the SQL text for active requests or the last statement executed\r\n for sleeping sessions, if available in either case.\r\n If @get_full_inner_text option is set, shows the full text of the batch.\r\n Otherwise, shows only the active statement within the batch.\r\n If the query text is locked, a special timeout message will be sent, in the following format:\r\n \r\n If an error occurs, an error message will be sent, in the following format:\r\n \r\n\r\nFormatted/Non: [query_plan] [xml] NULL\r\n (Requires @get_plans option)\r\n Shows the query plan for the request, if available.\r\n If the plan is locked, a special timeout message will be sent, in the following format:\r\n \r\n If an error occurs, an error message will be sent, in the following format:\r\n \r\n\r\nFormatted/Non: [blocking_session_id] [smallint] NULL\r\n When applicable, shows the blocking SPID\r\n\r\nFormatted: [blocked_session_count] [varchar](30) NULL\r\nNon-Formatted: [blocked_session_count] [smallint] NULL\r\n (Requires @find_block_leaders option)\r\n The total number of SPIDs blocked by this session,\r\n all the way down the blocking chain.\r\n\r\nFormatted: [percent_complete] [varchar](30) NULL\r\nNon-Formatted: [percent_complete] [real] NULL\r\n When applicable, shows the percent complete (e.g. for backups, restores, and some rollbacks)\r\n\r\nFormatted/Non: [host_name] [sysname] NOT NULL\r\n Shows the host name for the connection\r\n\r\nFormatted/Non: [login_name] [sysname] NOT NULL\r\n Shows the login name for the connection\r\n\r\nFormatted/Non: [database_name] [sysname] NULL\r\n Shows the connected database\r\n\r\nFormatted/Non: [program_name] [sysname] NULL\r\n Shows the reported program/application name\r\n\r\nFormatted/Non: [additional_info] [xml] NULL\r\n (Requires @get_additional_info option)\r\n Returns additional non-performance-related session/request information\r\n If the script finds a SQL Agent job running, the name of the job and job step will be reported\r\n If @get_task_info = 2 and the script finds a lock wait, the locked object will be reported\r\n\r\nFormatted/Non: [start_time] [datetime] NOT NULL\r\n For active requests, shows the time the request started\r\n For sleeping sessions, shows the time the last batch completed\r\n\r\nFormatted/Non: [login_time] [datetime] NOT NULL\r\n Shows the time that the session connected\r\n\r\nFormatted/Non: [request_id] [int] NULL\r\n For active requests, shows the request_id\r\n Should be 0 unless MARS is being used\r\n\r\nFormatted/Non: [collection_time] [datetime] NOT NULL\r\n Time that this script's final SELECT ran\r\n\r\nFormatted/Non: [memory_info] [xml] NULL\r\n (Requires @get_memory_info)\r\n For active queries that require workspace memory, returns information on memory grants,\r\n resource semaphores, and the resource governor settings that are impacting the allocation.\r\n*/\r\nAS\r\nBEGIN;\r\n SET NOCOUNT ON;\r\n SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;\r\n SET QUOTED_IDENTIFIER ON;\r\n SET ANSI_PADDING ON;\r\n SET CONCAT_NULL_YIELDS_NULL ON;\r\n SET ANSI_WARNINGS ON;\r\n SET NUMERIC_ROUNDABORT OFF;\r\n SET ARITHABORT ON;\r\n\r\n IF\r\n @filter IS NULL\r\n OR @filter_type IS NULL\r\n OR @not_filter IS NULL\r\n OR @not_filter_type IS NULL\r\n OR @show_own_spid IS NULL\r\n OR @show_system_spids IS NULL\r\n OR @show_sleeping_spids IS NULL\r\n OR @get_full_inner_text IS NULL\r\n OR @get_plans IS NULL\r\n OR @get_outer_command IS NULL\r\n OR @get_transaction_info IS NULL\r\n OR @get_task_info IS NULL\r\n OR @get_locks IS NULL\r\n OR @get_avg_time IS NULL\r\n OR @get_additional_info IS NULL\r\n OR @find_block_leaders IS NULL\r\n OR @delta_interval IS NULL\r\n OR @format_output IS NULL\r\n OR @output_column_list IS NULL\r\n OR @sort_order IS NULL\r\n OR @return_schema IS NULL\r\n OR @destination_table IS NULL\r\n OR @help IS NULL\r\n BEGIN;\r\n RAISERROR('Input parameters cannot be NULL', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @filter_type NOT IN ('session', 'program', 'database', 'login', 'host')\r\n BEGIN;\r\n RAISERROR('Valid filter types are: session, program, database, login, host', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @filter_type = 'session' AND @filter LIKE '%[^0123456789]%'\r\n BEGIN;\r\n RAISERROR('Session filters must be valid integers', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @not_filter_type NOT IN ('session', 'program', 'database', 'login', 'host')\r\n BEGIN;\r\n RAISERROR('Valid filter types are: session, program, database, login, host', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @not_filter_type = 'session' AND @not_filter LIKE '%[^0123456789]%'\r\n BEGIN;\r\n RAISERROR('Session filters must be valid integers', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @show_sleeping_spids NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @show_sleeping_spids are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @get_plans NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @get_plans are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @get_task_info NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @get_task_info are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @format_output NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @format_output are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @get_memory_info = 1 AND NOT EXISTS (SELECT * FROM sys.all_objects WHERE name = 'resource_governor_resource_pools')\r\n BEGIN;\r\n RAISERROR('@get_memory_info is not available for SQL Server 2005.', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @help = 1\r\n BEGIN;\r\n DECLARE\r\n @header VARCHAR(MAX),\r\n @params VARCHAR(MAX),\r\n @outputs VARCHAR(MAX);\r\n\r\n SELECT\r\n @header =\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n CONVERT\r\n (\r\n VARCHAR(MAX),\r\n SUBSTRING\r\n (\r\n t.text,\r\n CHARINDEX('/' + REPLICATE('*', 93), t.text) + 94,\r\n CHARINDEX(REPLICATE('*', 93) + '/', t.text) - (CHARINDEX('/' + REPLICATE('*', 93), t.text) + 94)\r\n )\r\n ),\r\n CHAR(13)+CHAR(10),\r\n CHAR(13)\r\n ),\r\n ' ',\r\n ''\r\n ),\r\n @params =\r\n CHAR(13) +\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n CONVERT\r\n (\r\n VARCHAR(MAX),\r\n SUBSTRING\r\n (\r\n t.text,\r\n CHARINDEX('--~', t.text) + 5,\r\n CHARINDEX('--~', t.text, CHARINDEX('--~', t.text) + 5) - (CHARINDEX('--~', t.text) + 5)\r\n )\r\n ),\r\n CHAR(13)+CHAR(10),\r\n CHAR(13)\r\n ),\r\n ' ',\r\n ''\r\n ),\r\n @outputs =\r\n CHAR(13) +\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n CONVERT\r\n (\r\n VARCHAR(MAX),\r\n SUBSTRING\r\n (\r\n t.text,\r\n CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32,\r\n CHARINDEX('*/', t.text, CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32) - (CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32)\r\n )\r\n ),\r\n ' ',\r\n CHAR(255)\r\n ),\r\n CHAR(13)+CHAR(10),\r\n CHAR(13)\r\n ),\r\n ' ',\r\n ''\r\n ) +\r\n CHAR(13)\r\n FROM sys.dm_exec_requests AS r\r\n CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t\r\n WHERE\r\n r.session_id = @@SPID;\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@header) - 1)\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n )\r\n SELECT\r\n RTRIM(LTRIM(\r\n SUBSTRING\r\n (\r\n @header,\r\n number + 1,\r\n CHARINDEX(CHAR(13), @header, number + 1) - number - 1\r\n )\r\n )) AS [------header---------------------------------------------------------------------------------------------------------------]\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@header, number, 1) = CHAR(13);\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@params) - 1)\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n RTRIM(LTRIM(\r\n SUBSTRING\r\n (\r\n @params,\r\n number + 1,\r\n CHARINDEX(CHAR(13), @params, number + 1) - number - 1\r\n )\r\n )) AS token,\r\n number,\r\n CASE\r\n WHEN SUBSTRING(@params, number + 1, 1) = CHAR(13) THEN number\r\n ELSE COALESCE(NULLIF(CHARINDEX(',' + CHAR(13) + CHAR(13), @params, number), 0), LEN(@params))\r\n END AS param_group,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n CHARINDEX(',' + CHAR(13) + CHAR(13), @params, number),\r\n SUBSTRING(@params, number+1, 1)\r\n ORDER BY\r\n number\r\n ) AS group_order\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@params, number, 1) = CHAR(13)\r\n ),\r\n parsed_tokens AS\r\n (\r\n SELECT\r\n MIN\r\n (\r\n CASE\r\n WHEN token LIKE '@%' THEN token\r\n ELSE NULL\r\n END\r\n ) AS parameter,\r\n MIN\r\n (\r\n CASE\r\n WHEN token LIKE '--%' THEN RIGHT(token, LEN(token) - 2)\r\n ELSE NULL\r\n END\r\n ) AS description,\r\n param_group,\r\n group_order\r\n FROM tokens\r\n WHERE\r\n NOT\r\n (\r\n token = ''\r\n AND group_order > 1\r\n )\r\n GROUP BY\r\n param_group,\r\n group_order\r\n )\r\n SELECT\r\n CASE\r\n WHEN description IS NULL AND parameter IS NULL THEN '-------------------------------------------------------------------------'\r\n WHEN param_group = MAX(param_group) OVER() THEN parameter\r\n ELSE COALESCE(LEFT(parameter, LEN(parameter) - 1), '')\r\n END AS [------parameter----------------------------------------------------------],\r\n CASE\r\n WHEN description IS NULL AND parameter IS NULL THEN '----------------------------------------------------------------------------------------------------------------------'\r\n ELSE COALESCE(description, '')\r\n END AS [------description-----------------------------------------------------------------------------------------------------]\r\n FROM parsed_tokens\r\n ORDER BY\r\n param_group,\r\n group_order;\r\n \r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@outputs) - 1)\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n RTRIM(LTRIM(\r\n SUBSTRING\r\n (\r\n @outputs,\r\n number + 1,\r\n CASE\r\n WHEN\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) <\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2, @outputs, number + 1), 0), LEN(@outputs))\r\n THEN COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) - number - 1\r\n ELSE\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2, @outputs, number + 1), 0), LEN(@outputs)) - number - 1\r\n END\r\n )\r\n )) AS token,\r\n number,\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) AS output_group,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs))\r\n ORDER BY\r\n number\r\n ) AS output_group_order\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@outputs, number, 10) = CHAR(13) + 'Formatted'\r\n OR SUBSTRING(@outputs, number, 2) = CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2\r\n ),\r\n output_tokens AS\r\n (\r\n SELECT\r\n *,\r\n CASE output_group_order\r\n WHEN 2 THEN MAX(CASE output_group_order WHEN 1 THEN token ELSE NULL END) OVER (PARTITION BY output_group)\r\n ELSE ''\r\n END COLLATE Latin1_General_Bin2 AS column_info\r\n FROM tokens\r\n )\r\n SELECT\r\n CASE output_group_order\r\n WHEN 1 THEN '-----------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+1, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info))\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)-1)\r\n END\r\n ELSE ''\r\n END AS formatted_column_name,\r\n CASE output_group_order\r\n WHEN 1 THEN '-----------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN\r\n SUBSTRING(column_info, CHARINDEX(']', column_info)+2, LEN(column_info))\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(']', column_info)+2, CHARINDEX('Non-Formatted:', column_info, CHARINDEX(']', column_info)+2) - CHARINDEX(']', column_info)-3)\r\n END\r\n ELSE ''\r\n END AS formatted_column_type,\r\n CASE output_group_order\r\n WHEN 1 THEN '---------------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN ''\r\n ELSE\r\n CASE\r\n WHEN SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, 1) = '<' THEN\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, CHARINDEX('>', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info)))\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info)))\r\n END\r\n END\r\n ELSE ''\r\n END AS unformatted_column_name,\r\n CASE output_group_order\r\n WHEN 1 THEN '---------------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN ''\r\n ELSE\r\n CASE\r\n WHEN SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, 1) = '<' THEN ''\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(']', column_info, CHARINDEX('Non-Formatted:', column_info))+2, CHARINDEX('Non-Formatted:', column_info, CHARINDEX(']', column_info)+2) - CHARINDEX(']', column_info)-3)\r\n END\r\n END\r\n ELSE ''\r\n END AS unformatted_column_type,\r\n CASE output_group_order\r\n WHEN 1 THEN '----------------------------------------------------------------------------------------------------------------------'\r\n ELSE REPLACE(token, CHAR(255) COLLATE Latin1_General_Bin2, '')\r\n END AS [------description-----------------------------------------------------------------------------------------------------]\r\n FROM output_tokens\r\n WHERE\r\n NOT\r\n (\r\n output_group_order = 1\r\n AND output_group = LEN(@outputs)\r\n )\r\n ORDER BY\r\n output_group,\r\n CASE output_group_order\r\n WHEN 1 THEN 99\r\n ELSE output_group_order\r\n END;\r\n\r\n RETURN;\r\n END;\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@output_column_list))\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n '|[' +\r\n SUBSTRING\r\n (\r\n @output_column_list,\r\n number + 1,\r\n CHARINDEX(']', @output_column_list, number) - number - 1\r\n ) + '|]' AS token,\r\n number\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@output_column_list, number, 1) = '['\r\n ),\r\n ordered_columns AS\r\n (\r\n SELECT\r\n x.column_name,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n x.column_name\r\n ORDER BY\r\n tokens.number,\r\n x.default_order\r\n ) AS r,\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY\r\n tokens.number,\r\n x.default_order\r\n ) AS s\r\n FROM tokens\r\n JOIN\r\n (\r\n SELECT '[session_id]' AS column_name, 1 AS default_order\r\n UNION ALL\r\n SELECT '[dd hh:mm:ss.mss]', 2\r\n WHERE\r\n @format_output IN (1, 2)\r\n UNION ALL\r\n SELECT '[dd hh:mm:ss.mss (avg)]', 3\r\n WHERE\r\n @format_output IN (1, 2)\r\n AND @get_avg_time = 1\r\n UNION ALL\r\n SELECT '[avg_elapsed_time]', 4\r\n WHERE\r\n @format_output = 0\r\n AND @get_avg_time = 1\r\n UNION ALL\r\n SELECT '[physical_io]', 5\r\n WHERE\r\n @get_task_info = 2\r\n UNION ALL\r\n SELECT '[reads]', 6\r\n UNION ALL\r\n SELECT '[physical_reads]', 7\r\n UNION ALL\r\n SELECT '[writes]', 8\r\n UNION ALL\r\n SELECT '[tempdb_allocations]', 9\r\n UNION ALL\r\n SELECT '[tempdb_current]', 10\r\n UNION ALL\r\n SELECT '[CPU]', 11\r\n UNION ALL\r\n SELECT '[context_switches]', 12\r\n WHERE\r\n @get_task_info = 2\r\n UNION ALL\r\n SELECT '[used_memory]', 13\r\n UNION ALL\r\n SELECT '[max_used_memory]', 14\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[requested_memory]', 15\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[granted_memory]', 16\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[physical_io_delta]', 17\r\n WHERE\r\n @delta_interval > 0 \r\n AND @get_task_info = 2\r\n UNION ALL\r\n SELECT '[reads_delta]', 18\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[physical_reads_delta]', 19\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[writes_delta]', 20\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[tempdb_allocations_delta]', 21\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[tempdb_current_delta]', 22\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[CPU_delta]', 23\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[context_switches_delta]', 24\r\n WHERE\r\n @delta_interval > 0\r\n AND @get_task_info = 2\r\n UNION ALL\r\n SELECT '[used_memory_delta]', 25\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[max_used_memory_delta]', 26\r\n WHERE\r\n @delta_interval > 0\r\n AND @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[tasks]', 27\r\n WHERE\r\n @get_task_info = 2\r\n UNION ALL\r\n SELECT '[status]', 28\r\n UNION ALL\r\n SELECT '[wait_info]', 29\r\n WHERE\r\n @get_task_info > 0\r\n OR @find_block_leaders = 1\r\n UNION ALL\r\n SELECT '[locks]', 30\r\n WHERE\r\n @get_locks = 1\r\n UNION ALL\r\n SELECT '[tran_start_time]', 31\r\n WHERE\r\n @get_transaction_info = 1\r\n UNION ALL\r\n SELECT '[tran_log_writes]', 32\r\n WHERE\r\n @get_transaction_info = 1\r\n UNION ALL\r\n SELECT '[implicit_tran]', 33\r\n WHERE\r\n @get_transaction_info = 1\r\n UNION ALL\r\n SELECT '[open_tran_count]', 34\r\n UNION ALL\r\n SELECT '[sql_command]', 35\r\n WHERE\r\n @get_outer_command = 1\r\n UNION ALL\r\n SELECT '[sql_text]', 36\r\n UNION ALL\r\n SELECT '[query_plan]', 37\r\n WHERE\r\n @get_plans >= 1\r\n UNION ALL\r\n SELECT '[blocking_session_id]', 38\r\n WHERE\r\n @get_task_info > 0\r\n OR @find_block_leaders = 1\r\n UNION ALL\r\n SELECT '[blocked_session_count]', 39\r\n WHERE\r\n @find_block_leaders = 1\r\n UNION ALL\r\n SELECT '[percent_complete]', 40\r\n UNION ALL\r\n SELECT '[host_name]', 41\r\n UNION ALL\r\n SELECT '[login_name]', 42\r\n UNION ALL\r\n SELECT '[database_name]', 43\r\n UNION ALL\r\n SELECT '[program_name]', 44\r\n UNION ALL\r\n SELECT '[additional_info]', 45\r\n WHERE\r\n @get_additional_info = 1\r\n UNION ALL\r\n SELECT '[memory_info]', 46\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[start_time]', 47\r\n UNION ALL\r\n SELECT '[login_time]', 48\r\n UNION ALL\r\n SELECT '[request_id]', 49\r\n UNION ALL\r\n SELECT '[collection_time]', 50\r\n ) AS x ON\r\n x.column_name LIKE token ESCAPE '|'\r\n )\r\n SELECT\r\n @output_column_list =\r\n STUFF\r\n (\r\n (\r\n SELECT\r\n ',' + column_name as [text()]\r\n FROM ordered_columns\r\n WHERE\r\n r = 1\r\n ORDER BY\r\n s\r\n FOR XML\r\n PATH('')\r\n ),\r\n 1,\r\n 1,\r\n ''\r\n );\r\n \r\n IF COALESCE(RTRIM(@output_column_list), '') = ''\r\n BEGIN;\r\n RAISERROR('No valid column matches found in @output_column_list or no columns remain due to selected options.', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @destination_table <> ''\r\n BEGIN;\r\n SET @destination_table =\r\n --database\r\n COALESCE(QUOTENAME(PARSENAME(@destination_table, 3)) + '.', '') +\r\n --schema\r\n COALESCE(QUOTENAME(PARSENAME(@destination_table, 2)) + '.', '') +\r\n --table\r\n COALESCE(QUOTENAME(PARSENAME(@destination_table, 1)), '');\r\n \r\n IF COALESCE(RTRIM(@destination_table), '') = ''\r\n BEGIN;\r\n RAISERROR('Destination table not properly formatted.', 16, 1);\r\n RETURN;\r\n END;\r\n END;\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@sort_order))\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n '|[' +\r\n SUBSTRING\r\n (\r\n @sort_order,\r\n number + 1,\r\n CHARINDEX(']', @sort_order, number) - number - 1\r\n ) + '|]' AS token,\r\n SUBSTRING\r\n (\r\n @sort_order,\r\n CHARINDEX(']', @sort_order, number) + 1,\r\n COALESCE(NULLIF(CHARINDEX('[', @sort_order, CHARINDEX(']', @sort_order, number)), 0), LEN(@sort_order)) - CHARINDEX(']', @sort_order, number)\r\n ) AS next_chunk,\r\n number\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@sort_order, number, 1) = '['\r\n ),\r\n ordered_columns AS\r\n (\r\n SELECT\r\n x.column_name +\r\n CASE\r\n WHEN LOWER(tokens.next_chunk) LIKE '%asc%' THEN ' ASC'\r\n WHEN LOWER(tokens.next_chunk) LIKE '%desc%' THEN ' DESC'\r\n ELSE ''\r\n END AS column_name,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n x.column_name\r\n ORDER BY\r\n tokens.number\r\n ) AS r,\r\n tokens.number\r\n FROM tokens\r\n JOIN\r\n (\r\n SELECT '[session_id]' AS column_name\r\n UNION ALL\r\n SELECT '[physical_io]'\r\n UNION ALL\r\n SELECT '[reads]'\r\n UNION ALL\r\n SELECT '[physical_reads]'\r\n UNION ALL\r\n SELECT '[writes]'\r\n UNION ALL\r\n SELECT '[tempdb_allocations]'\r\n UNION ALL\r\n SELECT '[tempdb_current]'\r\n UNION ALL\r\n SELECT '[CPU]'\r\n UNION ALL\r\n SELECT '[context_switches]'\r\n UNION ALL\r\n SELECT '[used_memory]'\r\n UNION ALL\r\n SELECT '[max_used_memory]'\r\n UNION ALL\r\n SELECT '[requested_memory]'\r\n UNION ALL\r\n SELECT '[granted_memory]'\r\n UNION ALL\r\n SELECT '[physical_io_delta]'\r\n UNION ALL\r\n SELECT '[reads_delta]'\r\n UNION ALL\r\n SELECT '[physical_reads_delta]'\r\n UNION ALL\r\n SELECT '[writes_delta]'\r\n UNION ALL\r\n SELECT '[tempdb_allocations_delta]'\r\n UNION ALL\r\n SELECT '[tempdb_current_delta]'\r\n UNION ALL\r\n SELECT '[CPU_delta]'\r\n UNION ALL\r\n SELECT '[context_switches_delta]'\r\n UNION ALL\r\n SELECT '[used_memory_delta]'\r\n UNION ALL\r\n SELECT '[max_used_memory_delta]'\r\n UNION ALL\r\n SELECT '[tasks]'\r\n UNION ALL\r\n SELECT '[tran_start_time]'\r\n UNION ALL\r\n SELECT '[open_tran_count]'\r\n UNION ALL\r\n SELECT '[blocking_session_id]'\r\n UNION ALL\r\n SELECT '[blocked_session_count]'\r\n UNION ALL\r\n SELECT '[percent_complete]'\r\n UNION ALL\r\n SELECT '[host_name]'\r\n UNION ALL\r\n SELECT '[login_name]'\r\n UNION ALL\r\n SELECT '[database_name]'\r\n UNION ALL\r\n SELECT '[start_time]'\r\n UNION ALL\r\n SELECT '[login_time]'\r\n UNION ALL\r\n SELECT '[program_name]'\r\n ) AS x ON\r\n x.column_name LIKE token ESCAPE '|'\r\n )\r\n SELECT\r\n @sort_order = COALESCE(z.sort_order, '')\r\n FROM\r\n (\r\n SELECT\r\n STUFF\r\n (\r\n (\r\n SELECT\r\n ',' + column_name as [text()]\r\n FROM ordered_columns\r\n WHERE\r\n r = 1\r\n ORDER BY\r\n number\r\n FOR XML\r\n PATH('')\r\n ),\r\n 1,\r\n 1,\r\n ''\r\n ) AS sort_order\r\n ) AS z;\r\n\r\n CREATE TABLE #sessions\r\n (\r\n recursion SMALLINT NOT NULL,\r\n session_id SMALLINT NOT NULL,\r\n request_id INT NOT NULL,\r\n session_number INT NOT NULL,\r\n elapsed_time INT NOT NULL,\r\n avg_elapsed_time INT NULL,\r\n physical_io BIGINT NULL,\r\n reads BIGINT NULL,\r\n physical_reads BIGINT NULL,\r\n writes BIGINT NULL,\r\n tempdb_allocations BIGINT NULL,\r\n tempdb_current BIGINT NULL,\r\n CPU BIGINT NULL,\r\n thread_CPU_snapshot BIGINT NULL,\r\n context_switches BIGINT NULL,\r\n used_memory BIGINT NOT NULL,\r\n max_used_memory BIGINT NULL,\r\n requested_memory BIGINT NULL,\r\n granted_memory BIGINT NULL,\r\n tasks SMALLINT NULL,\r\n status VARCHAR(30) NOT NULL,\r\n wait_info NVARCHAR(4000) NULL,\r\n locks XML NULL,\r\n transaction_id BIGINT NULL,\r\n tran_start_time DATETIME NULL,\r\n tran_log_writes NVARCHAR(4000) NULL,\r\n implicit_tran NVARCHAR(3) NULL,\r\n open_tran_count SMALLINT NULL,\r\n sql_command XML NULL,\r\n sql_handle VARBINARY(64) NULL,\r\n statement_start_offset INT NULL,\r\n statement_end_offset INT NULL,\r\n sql_text XML NULL,\r\n plan_handle VARBINARY(64) NULL,\r\n query_plan XML NULL,\r\n blocking_session_id SMALLINT NULL,\r\n blocked_session_count SMALLINT NULL,\r\n percent_complete REAL NULL,\r\n host_name sysname NULL,\r\n login_name sysname NOT NULL,\r\n database_name sysname NULL,\r\n program_name sysname NULL,\r\n additional_info XML NULL,\r\n memory_info XML NULL,\r\n start_time DATETIME NOT NULL,\r\n login_time DATETIME NULL,\r\n last_request_start_time DATETIME NULL,\r\n PRIMARY KEY CLUSTERED (session_id, request_id, recursion) WITH (IGNORE_DUP_KEY = ON),\r\n UNIQUE NONCLUSTERED (transaction_id, session_id, request_id, recursion) WITH (IGNORE_DUP_KEY = ON)\r\n );\r\n\r\n IF @return_schema = 0\r\n BEGIN;\r\n --Disable unnecessary autostats on the table\r\n CREATE STATISTICS s_session_id ON #sessions (session_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_id ON #sessions (request_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_transaction_id ON #sessions (transaction_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_session_number ON #sessions (session_number)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_status ON #sessions (status)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_start_time ON #sessions (start_time)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_last_request_start_time ON #sessions (last_request_start_time)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_recursion ON #sessions (recursion)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n\r\n DECLARE @recursion SMALLINT;\r\n SET @recursion =\r\n CASE @delta_interval\r\n WHEN 0 THEN 1\r\n ELSE -1\r\n END;\r\n\r\n DECLARE @first_collection_ms_ticks BIGINT;\r\n DECLARE @last_collection_start DATETIME;\r\n DECLARE @sys_info BIT;\r\n SET @sys_info = ISNULL(CONVERT(BIT, SIGN(OBJECT_ID('sys.dm_os_sys_info'))), 0);\r\n\r\n --Used for the delta pull\r\n REDO:;\r\n \r\n IF\r\n @get_locks = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[locks|]%' ESCAPE '|'\r\n BEGIN;\r\n SELECT\r\n y.resource_type,\r\n y.database_name,\r\n y.object_id,\r\n y.file_id,\r\n y.page_type,\r\n y.hobt_id,\r\n y.allocation_unit_id,\r\n y.index_id,\r\n y.schema_id,\r\n y.principal_id,\r\n y.request_mode,\r\n y.request_status,\r\n y.session_id,\r\n y.resource_description,\r\n y.request_count,\r\n s.request_id,\r\n s.start_time,\r\n CONVERT(sysname, NULL) AS object_name,\r\n CONVERT(sysname, NULL) AS index_name,\r\n CONVERT(sysname, NULL) AS schema_name,\r\n CONVERT(sysname, NULL) AS principal_name,\r\n CONVERT(NVARCHAR(2048), NULL) AS query_error\r\n INTO #locks\r\n FROM\r\n (\r\n SELECT\r\n sp.spid AS session_id,\r\n CASE sp.status\r\n WHEN 'sleeping' THEN CONVERT(INT, 0)\r\n ELSE sp.request_id\r\n END AS request_id,\r\n CASE sp.status\r\n WHEN 'sleeping' THEN sp.last_batch\r\n ELSE COALESCE(req.start_time, sp.last_batch)\r\n END AS start_time,\r\n sp.dbid\r\n FROM sys.sysprocesses AS sp\r\n OUTER APPLY\r\n (\r\n SELECT TOP(1)\r\n CASE\r\n WHEN\r\n (\r\n sp.hostprocess > ''\r\n OR r.total_elapsed_time < 0\r\n ) THEN\r\n r.start_time\r\n ELSE\r\n DATEADD\r\n (\r\n ms,\r\n 1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),\r\n DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())\r\n )\r\n END AS start_time\r\n FROM sys.dm_exec_requests AS r\r\n WHERE\r\n r.session_id = sp.spid\r\n AND r.request_id = sp.request_id\r\n ) AS req\r\n WHERE\r\n --Process inclusive filter\r\n 1 =\r\n CASE\r\n WHEN @filter <> '' THEN\r\n CASE @filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN\r\n CONVERT(SMALLINT, @filter) = 0\r\n OR sp.spid = CONVERT(SMALLINT, @filter)\r\n THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'program' THEN\r\n CASE\r\n WHEN sp.program_name LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'login' THEN\r\n CASE\r\n WHEN sp.loginame LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'host' THEN\r\n CASE\r\n WHEN sp.hostname LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'database' THEN\r\n CASE\r\n WHEN DB_NAME(sp.dbid) LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n ELSE 0\r\n END\r\n ELSE 1\r\n END\r\n --Process exclusive filter\r\n AND 0 =\r\n CASE\r\n WHEN @not_filter <> '' THEN\r\n CASE @not_filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN sp.spid = CONVERT(SMALLINT, @not_filter) THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'program' THEN\r\n CASE\r\n WHEN sp.program_name LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'login' THEN\r\n CASE\r\n WHEN sp.loginame LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'host' THEN\r\n CASE\r\n WHEN sp.hostname LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'database' THEN\r\n CASE\r\n WHEN DB_NAME(sp.dbid) LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n ELSE 0\r\n END\r\n ELSE 0\r\n END\r\n AND\r\n (\r\n @show_own_spid = 1\r\n OR sp.spid <> @@SPID\r\n )\r\n AND\r\n (\r\n @show_system_spids = 1\r\n OR sp.hostprocess > ''\r\n )\r\n AND sp.ecid = 0\r\n ) AS s\r\n INNER HASH JOIN\r\n (\r\n SELECT\r\n x.resource_type,\r\n x.database_name,\r\n x.object_id,\r\n x.file_id,\r\n CASE\r\n WHEN x.page_no = 1 OR x.page_no % 8088 = 0 THEN 'PFS'\r\n WHEN x.page_no = 2 OR x.page_no % 511232 = 0 THEN 'GAM'\r\n WHEN x.page_no = 3 OR (x.page_no - 1) % 511232 = 0 THEN 'SGAM'\r\n WHEN x.page_no = 6 OR (x.page_no - 6) % 511232 = 0 THEN 'DCM'\r\n WHEN x.page_no = 7 OR (x.page_no - 7) % 511232 = 0 THEN 'BCM'\r\n WHEN x.page_no IS NOT NULL THEN '*'\r\n ELSE NULL\r\n END AS page_type,\r\n x.hobt_id,\r\n x.allocation_unit_id,\r\n x.index_id,\r\n x.schema_id,\r\n x.principal_id,\r\n x.request_mode,\r\n x.request_status,\r\n x.session_id,\r\n x.request_id,\r\n CASE\r\n WHEN COALESCE(x.object_id, x.file_id, x.hobt_id, x.allocation_unit_id, x.index_id, x.schema_id, x.principal_id) IS NULL THEN NULLIF(resource_description, '')\r\n ELSE NULL\r\n END AS resource_description,\r\n COUNT(*) AS request_count\r\n FROM\r\n (\r\n SELECT\r\n tl.resource_type +\r\n CASE\r\n WHEN tl.resource_subtype = '' THEN ''\r\n ELSE '.' + tl.resource_subtype\r\n END AS resource_type,\r\n COALESCE(DB_NAME(tl.resource_database_id), N'(null)') AS database_name,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_type = 'OBJECT' THEN tl.resource_associated_entity_id\r\n WHEN tl.resource_description LIKE '%object_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('object_id = ', tl.resource_description) + 12),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('object_id = ', tl.resource_description) + 12),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('object_id = ', tl.resource_description) + 12)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS object_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_type = 'FILE' THEN CONVERT(INT, tl.resource_description)\r\n WHEN tl.resource_type IN ('PAGE', 'EXTENT', 'RID') THEN LEFT(tl.resource_description, CHARINDEX(':', tl.resource_description)-1)\r\n ELSE NULL\r\n END\r\n ) AS file_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_type IN ('PAGE', 'EXTENT', 'RID') THEN\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n CHARINDEX(':', tl.resource_description) + 1,\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(':', tl.resource_description, CHARINDEX(':', tl.resource_description) + 1),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX(':', tl.resource_description) + 1)\r\n )\r\n ELSE NULL\r\n END\r\n ) AS page_no,\r\n CASE\r\n WHEN tl.resource_type IN ('PAGE', 'KEY', 'RID', 'HOBT') THEN tl.resource_associated_entity_id\r\n ELSE NULL\r\n END AS hobt_id,\r\n CASE\r\n WHEN tl.resource_type = 'ALLOCATION_UNIT' THEN tl.resource_associated_entity_id\r\n ELSE NULL\r\n END AS allocation_unit_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN\r\n /*TODO: Deal with server principals*/\r\n tl.resource_subtype <> 'SERVER_PRINCIPAL'\r\n AND tl.resource_description LIKE '%index_id or stats_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS index_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_description LIKE '%schema_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('schema_id = ', tl.resource_description) + 12),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('schema_id = ', tl.resource_description) + 12),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('schema_id = ', tl.resource_description) + 12)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS schema_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_description LIKE '%principal_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('principal_id = ', tl.resource_description) + 15),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('principal_id = ', tl.resource_description) + 15),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('principal_id = ', tl.resource_description) + 15)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS principal_id,\r\n tl.request_mode,\r\n tl.request_status,\r\n tl.request_session_id AS session_id,\r\n tl.request_request_id AS request_id,\r\n\r\n /*TODO: Applocks, other resource_descriptions*/\r\n RTRIM(tl.resource_description) AS resource_description,\r\n tl.resource_associated_entity_id\r\n /*********************************************/\r\n FROM\r\n (\r\n SELECT\r\n request_session_id,\r\n CONVERT(VARCHAR(120), resource_type) COLLATE Latin1_General_Bin2 AS resource_type,\r\n CONVERT(VARCHAR(120), resource_subtype) COLLATE Latin1_General_Bin2 AS resource_subtype,\r\n resource_database_id,\r\n CONVERT(VARCHAR(512), resource_description) COLLATE Latin1_General_Bin2 AS resource_description,\r\n resource_associated_entity_id,\r\n CONVERT(VARCHAR(120), request_mode) COLLATE Latin1_General_Bin2 AS request_mode,\r\n CONVERT(VARCHAR(120), request_status) COLLATE Latin1_General_Bin2 AS request_status,\r\n request_request_id\r\n FROM sys.dm_tran_locks\r\n ) AS tl\r\n ) AS x\r\n GROUP BY\r\n x.resource_type,\r\n x.database_name,\r\n x.object_id,\r\n x.file_id,\r\n CASE\r\n WHEN x.page_no = 1 OR x.page_no % 8088 = 0 THEN 'PFS'\r\n WHEN x.page_no = 2 OR x.page_no % 511232 = 0 THEN 'GAM'\r\n WHEN x.page_no = 3 OR (x.page_no - 1) % 511232 = 0 THEN 'SGAM'\r\n WHEN x.page_no = 6 OR (x.page_no - 6) % 511232 = 0 THEN 'DCM'\r\n WHEN x.page_no = 7 OR (x.page_no - 7) % 511232 = 0 THEN 'BCM'\r\n WHEN x.page_no IS NOT NULL THEN '*'\r\n ELSE NULL\r\n END,\r\n x.hobt_id,\r\n x.allocation_unit_id,\r\n x.index_id,\r\n x.schema_id,\r\n x.principal_id,\r\n x.request_mode,\r\n x.request_status,\r\n x.session_id,\r\n x.request_id,\r\n CASE\r\n WHEN COALESCE(x.object_id, x.file_id, x.hobt_id, x.allocation_unit_id, x.index_id, x.schema_id, x.principal_id) IS NULL THEN NULLIF(resource_description, '')\r\n ELSE NULL\r\n END\r\n ) AS y ON\r\n y.session_id = s.session_id\r\n AND y.request_id = s.request_id\r\n OPTION (HASH GROUP);\r\n\r\n --Disable unnecessary autostats on the table\r\n CREATE STATISTICS s_database_name ON #locks (database_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_object_id ON #locks (object_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_hobt_id ON #locks (hobt_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_allocation_unit_id ON #locks (allocation_unit_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_index_id ON #locks (index_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_schema_id ON #locks (schema_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_principal_id ON #locks (principal_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_id ON #locks (request_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_start_time ON #locks (start_time)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_resource_type ON #locks (resource_type)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_object_name ON #locks (object_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_schema_name ON #locks (schema_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_page_type ON #locks (page_type)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_mode ON #locks (request_mode)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_status ON #locks (request_status)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_resource_description ON #locks (resource_description)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_index_name ON #locks (index_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_principal_name ON #locks (principal_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n END;\r\n \r\n DECLARE\r\n @sql VARCHAR(MAX),\r\n @sql_n NVARCHAR(MAX),\r\n @core_session_join VARCHAR(MAX);\r\n\r\n SET @core_session_join =\r\n '@sessions AS sp\r\n LEFT OUTER LOOP JOIN sys.dm_exec_sessions AS s ON\r\n s.session_id = sp.session_id\r\n AND s.login_time = sp.login_time\r\n LEFT OUTER LOOP JOIN sys.dm_exec_requests AS r ON\r\n sp.status <> ''sleeping''\r\n AND r.session_id = sp.session_id\r\n AND r.request_id = sp.request_id\r\n AND\r\n (\r\n (\r\n s.is_user_process = 0\r\n AND sp.is_user_process = 0\r\n )\r\n OR\r\n (\r\n r.start_time = s.last_request_start_time\r\n AND s.last_request_end_time <= sp.last_request_end_time\r\n )\r\n ) ';\r\n\r\n SET @sql =\r\n CONVERT(VARCHAR(MAX), '') +\r\n 'DECLARE @blocker BIT;\r\n SET @blocker = 0;\r\n DECLARE @i INT;\r\n SET @i = 2147483647;\r\n\r\n DECLARE @sessions TABLE\r\n (\r\n session_id SMALLINT NOT NULL,\r\n request_id INT NOT NULL,\r\n login_time DATETIME,\r\n last_request_end_time DATETIME,\r\n status VARCHAR(30),\r\n statement_start_offset INT,\r\n statement_end_offset INT,\r\n sql_handle BINARY(20),\r\n host_name NVARCHAR(128),\r\n login_name NVARCHAR(128),\r\n program_name NVARCHAR(128),\r\n database_id SMALLINT,\r\n memory_usage INT,\r\n open_tran_count SMALLINT,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'wait_type NVARCHAR(32),\r\n wait_resource NVARCHAR(256),\r\n wait_time BIGINT,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'blocked SMALLINT,\r\n is_user_process BIT,\r\n cmd VARCHAR(32),\r\n PRIMARY KEY CLUSTERED (session_id, request_id) WITH (IGNORE_DUP_KEY = ON)\r\n );\r\n\r\n DECLARE @blockers TABLE\r\n (\r\n session_id INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON)\r\n );\r\n\r\n BLOCKERS:;\r\n\r\n INSERT @sessions\r\n (\r\n session_id,\r\n request_id,\r\n login_time,\r\n last_request_end_time,\r\n status,\r\n statement_start_offset,\r\n statement_end_offset,\r\n sql_handle,\r\n host_name,\r\n login_name,\r\n program_name,\r\n database_id,\r\n memory_usage,\r\n open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'wait_type,\r\n wait_resource,\r\n wait_time,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'blocked,\r\n is_user_process,\r\n cmd\r\n )\r\n SELECT TOP(@i)\r\n spy.session_id,\r\n spy.request_id,\r\n spy.login_time,\r\n spy.last_request_end_time,\r\n spy.status,\r\n spy.statement_start_offset,\r\n spy.statement_end_offset,\r\n spy.sql_handle,\r\n spy.host_name,\r\n spy.login_name,\r\n spy.program_name,\r\n spy.database_id,\r\n spy.memory_usage,\r\n spy.open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'spy.wait_type,\r\n CASE\r\n WHEN\r\n spy.wait_type LIKE N''PAGE%LATCH_%''\r\n OR spy.wait_type IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'')\r\n OR spy.wait_type LIKE N''LATCH[_]%''\r\n OR spy.wait_type = N''OLEDB'' THEN\r\n spy.wait_resource\r\n ELSE\r\n NULL\r\n END AS wait_resource,\r\n spy.wait_time,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'spy.blocked,\r\n spy.is_user_process,\r\n spy.cmd\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n spx.*,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n spx.session_id,\r\n spx.request_id\r\n ORDER BY\r\n CASE\r\n WHEN spx.wait_type LIKE N''LCK[_]%'' THEN\r\n 1\r\n ELSE\r\n 99\r\n END,\r\n spx.wait_time DESC,\r\n spx.blocked DESC\r\n ) AS r\r\n '\r\n ELSE\r\n '1 AS r\r\n '\r\n END +\r\n 'FROM\r\n (\r\n SELECT TOP(@i)\r\n sp0.session_id,\r\n sp0.request_id,\r\n sp0.login_time,\r\n sp0.last_request_end_time,\r\n LOWER(sp0.status) AS status,\r\n CASE\r\n WHEN sp0.cmd = ''CREATE INDEX'' THEN\r\n 0\r\n ELSE\r\n sp0.stmt_start\r\n END AS statement_start_offset,\r\n CASE\r\n WHEN sp0.cmd = N''CREATE INDEX'' THEN\r\n -1\r\n ELSE\r\n COALESCE(NULLIF(sp0.stmt_end, 0), -1)\r\n END AS statement_end_offset,\r\n sp0.sql_handle,\r\n sp0.host_name,\r\n sp0.login_name,\r\n sp0.program_name,\r\n sp0.database_id,\r\n sp0.memory_usage,\r\n sp0.open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'CASE\r\n WHEN sp0.wait_time > 0 AND sp0.wait_type NOT IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n sp0.wait_type\r\n ELSE\r\n NULL\r\n END AS wait_type,\r\n CASE\r\n WHEN sp0.wait_time > 0 AND sp0.wait_type NOT IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n sp0.wait_resource\r\n ELSE\r\n NULL\r\n END AS wait_resource,\r\n CASE\r\n WHEN sp0.wait_type NOT IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n sp0.wait_time\r\n ELSE\r\n 0\r\n END AS wait_time,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'sp0.blocked,\r\n sp0.is_user_process,\r\n sp0.cmd\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n sp1.session_id,\r\n sp1.request_id,\r\n sp1.login_time,\r\n sp1.last_request_end_time,\r\n sp1.status,\r\n sp1.cmd,\r\n sp1.stmt_start,\r\n sp1.stmt_end,\r\n MAX(NULLIF(sp1.sql_handle, 0x00)) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS sql_handle,\r\n sp1.host_name,\r\n MAX(sp1.login_name) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS login_name,\r\n sp1.program_name,\r\n sp1.database_id,\r\n MAX(sp1.memory_usage) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS memory_usage,\r\n MAX(sp1.open_tran_count) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS open_tran_count,\r\n sp1.wait_type,\r\n sp1.wait_resource,\r\n sp1.wait_time,\r\n sp1.blocked,\r\n sp1.hostprocess,\r\n sp1.is_user_process\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n sp2.spid AS session_id,\r\n v2.request_id,\r\n MAX(sp2.login_time) AS login_time,\r\n MAX(sp2.last_batch) AS last_request_end_time,\r\n MAX(CONVERT(VARCHAR(30), RTRIM(sp2.status)) COLLATE Latin1_General_Bin2) AS status,\r\n MAX(CONVERT(VARCHAR(32), RTRIM(sp2.cmd)) COLLATE Latin1_General_Bin2) AS cmd,\r\n MAX(sp2.stmt_start) AS stmt_start,\r\n MAX(sp2.stmt_end) AS stmt_end,\r\n MAX(sp2.sql_handle) AS sql_handle,\r\n MAX(CONVERT(sysname, RTRIM(sp2.hostname)) COLLATE SQL_Latin1_General_CP1_CI_AS) AS host_name,\r\n MAX(CONVERT(sysname, RTRIM(sp2.loginame)) COLLATE SQL_Latin1_General_CP1_CI_AS) AS login_name,\r\n MAX\r\n (\r\n CASE\r\n WHEN blk.queue_id IS NOT NULL THEN\r\n N''Service Broker\r\n database_id: '' + CONVERT(NVARCHAR, blk.database_id) +\r\n N'' queue_id: '' + CONVERT(NVARCHAR, blk.queue_id)\r\n ELSE\r\n CONVERT\r\n (\r\n sysname,\r\n RTRIM(sp2.program_name)\r\n )\r\n END COLLATE SQL_Latin1_General_CP1_CI_AS\r\n ) AS program_name,\r\n MAX(sp2.dbid) AS database_id,\r\n MAX(sp2.memusage) AS memory_usage,\r\n MAX(sp2.open_tran) AS open_tran_count,\r\n RTRIM(sp2.lastwaittype) AS wait_type,\r\n v2.wait_resource,\r\n MAX(sp2.waittime) AS wait_time,\r\n COALESCE(NULLIF(sp2.blocked, sp2.spid), 0) AS blocked,\r\n MAX\r\n (\r\n CASE\r\n WHEN blk.session_id = sp2.spid THEN\r\n ''blocker''\r\n ELSE\r\n RTRIM(sp2.hostprocess)\r\n END\r\n ) AS hostprocess,\r\n CONVERT\r\n (\r\n BIT,\r\n MAX\r\n (\r\n CASE\r\n WHEN sp2.hostprocess > '''' THEN\r\n 1\r\n ELSE\r\n 0\r\n END\r\n )\r\n ) AS is_user_process\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n session_id,\r\n CONVERT(INT, NULL) AS queue_id,\r\n CONVERT(INT, NULL) AS database_id\r\n FROM @blockers\r\n\r\n UNION ALL\r\n\r\n SELECT TOP(@i)\r\n CONVERT(SMALLINT, 0),\r\n CONVERT(INT, NULL) AS queue_id,\r\n CONVERT(INT, NULL) AS database_id\r\n WHERE\r\n @blocker = 0\r\n\r\n UNION ALL\r\n\r\n SELECT TOP(@i)\r\n CONVERT(SMALLINT, spid),\r\n queue_id,\r\n database_id\r\n FROM sys.dm_broker_activated_tasks\r\n WHERE\r\n @blocker = 0\r\n ) AS blk\r\n INNER JOIN sys.sysprocesses AS sp2 ON\r\n sp2.spid = blk.session_id\r\n OR\r\n (\r\n blk.session_id = 0\r\n AND @blocker = 0\r\n )\r\n CROSS APPLY\r\n (\r\n SELECT\r\n CASE sp2.status\r\n WHEN ''sleeping'' THEN\r\n CONVERT(INT, 0)\r\n ELSE\r\n sp2.request_id\r\n END AS request_id,\r\n RTRIM\r\n (\r\n LEFT\r\n (\r\n sp2.waitresource COLLATE Latin1_General_Bin2,\r\n ISNULL(NULLIF(CHARINDEX('' (LATCH '', sp2.waitresource COLLATE Latin1_General_Bin2) - 1, -1), 256)\r\n )\r\n ) AS wait_resource\r\n ) AS v2\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info = 0\r\n AND @find_block_leaders = 0\r\n ) THEN\r\n 'WHERE\r\n sp2.ecid = 0\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'GROUP BY\r\n sp2.spid,\r\n v2.request_id,\r\n RTRIM(sp2.lastwaittype),\r\n v2.wait_resource,\r\n COALESCE(NULLIF(sp2.blocked, sp2.spid), 0)\r\n ) AS sp1\r\n ) AS sp0\r\n WHERE\r\n @blocker = 1\r\n OR\r\n (1=1\r\n ' +\r\n --inclusive filter\r\n CASE\r\n WHEN @filter <> '' THEN\r\n CASE @filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN CONVERT(SMALLINT, @filter) <> 0 THEN\r\n 'AND sp0.session_id = CONVERT(SMALLINT, @filter)\r\n '\r\n ELSE\r\n ''\r\n END\r\n WHEN 'program' THEN\r\n 'AND sp0.program_name LIKE @filter\r\n '\r\n WHEN 'login' THEN\r\n 'AND sp0.login_name LIKE @filter\r\n '\r\n WHEN 'host' THEN\r\n 'AND sp0.host_name LIKE @filter\r\n '\r\n WHEN 'database' THEN\r\n 'AND DB_NAME(sp0.database_id) LIKE @filter\r\n '\r\n ELSE\r\n ''\r\n END\r\n ELSE\r\n ''\r\n END +\r\n --exclusive filter\r\n CASE\r\n WHEN @not_filter <> '' THEN\r\n CASE @not_filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN CONVERT(SMALLINT, @not_filter) <> 0 THEN\r\n 'AND sp0.session_id <> CONVERT(SMALLINT, @not_filter)\r\n '\r\n ELSE\r\n ''\r\n END\r\n WHEN 'program' THEN\r\n 'AND sp0.program_name NOT LIKE @not_filter\r\n '\r\n WHEN 'login' THEN\r\n 'AND sp0.login_name NOT LIKE @not_filter\r\n '\r\n WHEN 'host' THEN\r\n 'AND sp0.host_name NOT LIKE @not_filter\r\n '\r\n WHEN 'database' THEN\r\n 'AND DB_NAME(sp0.database_id) NOT LIKE @not_filter\r\n '\r\n ELSE\r\n ''\r\n END\r\n ELSE\r\n ''\r\n END +\r\n CASE @show_own_spid\r\n WHEN 1 THEN\r\n ''\r\n ELSE\r\n 'AND sp0.session_id <> @@spid\r\n '\r\n END +\r\n CASE\r\n WHEN @show_system_spids = 0 THEN\r\n 'AND sp0.hostprocess > ''''\r\n '\r\n ELSE\r\n ''\r\n END +\r\n CASE @show_sleeping_spids\r\n WHEN 0 THEN\r\n 'AND sp0.status <> ''sleeping''\r\n '\r\n WHEN 1 THEN\r\n 'AND\r\n (\r\n sp0.status <> ''sleeping''\r\n OR sp0.open_tran_count > 0\r\n )\r\n '\r\n ELSE\r\n ''\r\n END +\r\n ')\r\n ) AS spx\r\n ) AS spy\r\n WHERE\r\n spy.r = 1;\r\n ' +\r\n CASE @recursion\r\n WHEN 1 THEN\r\n 'IF @@ROWCOUNT > 0\r\n BEGIN;\r\n INSERT @blockers\r\n (\r\n session_id\r\n )\r\n SELECT TOP(@i)\r\n blocked\r\n FROM @sessions\r\n WHERE\r\n NULLIF(blocked, 0) IS NOT NULL\r\n\r\n EXCEPT\r\n\r\n SELECT TOP(@i)\r\n session_id\r\n FROM @sessions;\r\n ' +\r\n\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info > 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'IF @@ROWCOUNT > 0\r\n BEGIN;\r\n SET @blocker = 1;\r\n GOTO BLOCKERS;\r\n END;\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'END;\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'SELECT TOP(@i)\r\n @recursion AS recursion,\r\n x.session_id,\r\n x.request_id,\r\n DENSE_RANK() OVER\r\n (\r\n ORDER BY\r\n x.session_id\r\n ) AS session_number,\r\n ' +\r\n CASE\r\n WHEN @output_column_list LIKE '%|[dd hh:mm:ss.mss|]%' ESCAPE '|' THEN\r\n 'x.elapsed_time '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS elapsed_time,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[dd hh:mm:ss.mss (avg)|]%' ESCAPE '|' OR\r\n @output_column_list LIKE '%|[avg_elapsed_time|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.avg_elapsed_time / 1000 '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS avg_elapsed_time,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[physical_io|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[physical_io_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.physical_io '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS physical_io,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[reads|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[reads_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.reads '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS reads,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[physical_reads|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[physical_reads_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.physical_reads '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS physical_reads,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[writes|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[writes_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.writes '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS writes,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[tempdb_allocations|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tempdb_allocations_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.tempdb_allocations '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS tempdb_allocations,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[tempdb_current|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tempdb_current_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.tempdb_current '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS tempdb_current,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.CPU '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS CPU,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n AND @get_task_info = 2\r\n AND @sys_info = 1\r\n THEN\r\n 'x.thread_CPU_snapshot '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS thread_CPU_snapshot,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[context_switches|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[context_switches_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.context_switches '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS context_switches,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[used_memory|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[used_memory_delta|]%' ESCAPE '|'\r\n THEN\r\n CASE\r\n WHEN @get_memory_info = 1 THEN\r\n 'COALESCE(x.mg_used_memory_kb / 8, x.used_memory) '\r\n ELSE\r\n 'x.used_memory '\r\n END\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS used_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[max_used_memory|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[max_used_memory_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.max_used_memory_kb / 8 '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS max_used_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[requested_memory|]%' ESCAPE '|'\r\n THEN\r\n 'x.requested_memory_kb / 8 '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS requested_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[granted_memory|]%' ESCAPE '|'\r\n THEN\r\n 'x.mg_granted_memory_kb / 8 '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS granted_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[tasks|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.tasks '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS tasks,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[status|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[sql_command|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.status '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS status,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[wait_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n CASE @get_task_info\r\n WHEN 2 THEN\r\n 'COALESCE(x.task_wait_info, x.sys_wait_info) '\r\n ELSE\r\n 'x.sys_wait_info '\r\n END\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS wait_info,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[tran_start_time|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tran_log_writes|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.transaction_id '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS transaction_id,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[open_tran_count|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.open_tran_count '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.sql_handle '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS sql_handle,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.statement_start_offset '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS statement_start_offset,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.statement_end_offset '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS statement_end_offset,\r\n ' +\r\n 'NULL AS sql_text,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.plan_handle '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS plan_handle,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[blocking_session_id|]%' ESCAPE '|' OR @find_block_leaders = 1\r\n AND @recursion = 1\r\n THEN\r\n 'NULLIF(x.blocking_session_id, 0) '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS blocking_session_id,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[percent_complete|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.percent_complete '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS percent_complete,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[host_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.host_name '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS host_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[login_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.login_name '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS login_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[database_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'DB_NAME(x.database_id) '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS database_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[program_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.program_name '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS program_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n '(\r\n SELECT TOP(@i)\r\n x.text_size,\r\n x.language,\r\n x.date_format,\r\n x.date_first,\r\n CASE x.quoted_identifier\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS quoted_identifier,\r\n CASE x.arithabort\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS arithabort,\r\n CASE x.ansi_null_dflt_on\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_null_dflt_on,\r\n CASE x.ansi_defaults\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_defaults,\r\n CASE x.ansi_warnings\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_warnings,\r\n CASE x.ansi_padding\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_padding,\r\n CASE ansi_nulls\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_nulls,\r\n CASE x.concat_null_yields_null\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS concat_null_yields_null,\r\n CASE x.transaction_isolation_level\r\n WHEN 0 THEN ''Unspecified''\r\n WHEN 1 THEN ''ReadUncomitted''\r\n WHEN 2 THEN ''ReadCommitted''\r\n WHEN 3 THEN ''Repeatable''\r\n WHEN 4 THEN ''Serializable''\r\n WHEN 5 THEN ''Snapshot''\r\n END AS transaction_isolation_level,\r\n x.lock_timeout,\r\n x.deadlock_priority,\r\n x.row_count,\r\n x.command_type,\r\n ' +\r\n CASE\r\n WHEN OBJECT_ID('master.dbo.fn_varbintohexstr') IS NOT NULL THEN\r\n 'master.dbo.fn_varbintohexstr(x.sql_handle) AS sql_handle,\r\n master.dbo.fn_varbintohexstr(x.plan_handle) AS plan_handle,'\r\n ELSE\r\n 'CONVERT(VARCHAR(256), x.sql_handle, 1) AS sql_handle,\r\n CONVERT(VARCHAR(256), x.plan_handle, 1) AS plan_handle,'\r\n END +\r\n '\r\n x.statement_start_offset,\r\n x.statement_end_offset,\r\n ' +\r\n CASE\r\n WHEN @output_column_list LIKE '%|[program_name|]%' ESCAPE '|' THEN\r\n '(\r\n SELECT TOP(1)\r\n CONVERT(uniqueidentifier, CONVERT(XML, '''').value(''xs:hexBinary( substring(sql:column(\"agent_info.job_id_string\"), 0) )'', ''binary(16)'')) AS job_id,\r\n agent_info.step_id,\r\n (\r\n SELECT TOP(1)\r\n NULL\r\n FOR XML\r\n PATH(''job_name''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(1)\r\n NULL\r\n FOR XML\r\n PATH(''step_name''),\r\n TYPE\r\n )\r\n FROM\r\n (\r\n SELECT TOP(1)\r\n SUBSTRING(x.program_name, CHARINDEX(''0x'', x.program_name) + 2, 32) AS job_id_string,\r\n SUBSTRING(x.program_name, CHARINDEX('': Step '', x.program_name) + 7, CHARINDEX('')'', x.program_name, CHARINDEX('': Step '', x.program_name)) - (CHARINDEX('': Step '', x.program_name) + 7)) AS step_id\r\n WHERE\r\n x.program_name LIKE N''SQLAgent - TSQL JobStep (Job 0x%''\r\n ) AS agent_info\r\n FOR XML\r\n PATH(''agent_job_info''),\r\n TYPE\r\n ),\r\n '\r\n ELSE ''\r\n END +\r\n CASE\r\n WHEN @get_task_info = 2 THEN\r\n 'CONVERT(XML, x.block_info) AS block_info,\r\n '\r\n ELSE\r\n ''\r\n END + '\r\n x.host_process_id,\r\n x.group_id,\r\n x.original_login_name,\r\n ' +\r\n CASE\r\n WHEN OBJECT_ID('master.dbo.fn_varbintohexstr') IS NOT NULL THEN\r\n 'master.dbo.fn_varbintohexstr(x.context_info) AS context_info'\r\n ELSE\r\n 'CONVERT(VARCHAR(256), x.context_info, 1) AS context_info'\r\n END + '\r\n FOR XML\r\n PATH(''additional_info''),\r\n TYPE\r\n ) '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS additional_info,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[memory_info|]%' ESCAPE '|'\r\n AND @get_memory_info = 1 THEN'\r\n (\r\n SELECT TOP(@i)\r\n (\r\n SELECT TOP(@i) \r\n x.request_time,\r\n x.grant_time,\r\n x.wait_time_ms,\r\n x.requested_memory_kb, \r\n x.mg_granted_memory_kb AS granted_memory_kb,\r\n x.mg_used_memory_kb AS used_memory_kb,\r\n x.max_used_memory_kb,\r\n x.ideal_memory_kb, \r\n x.required_memory_kb,\r\n x.queue_id,\r\n x.wait_order,\r\n x.is_next_candidate,\r\n x.dop,\r\n CAST(x.query_cost AS NUMERIC(38, 4)) AS query_cost\r\n FOR XML\r\n PATH(''memory_grant''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(@i)\r\n x.timeout_error_count,\r\n x.target_memory_kb,\r\n x.max_target_memory_kb,\r\n x.total_memory_kb,\r\n x.available_memory_kb,\r\n x.rs_granted_memory_kb AS granted_memory_kb,\r\n x.rs_used_memory_kb AS used_memory_kb,\r\n x.grantee_count,\r\n x.waiter_count\r\n FOR XML\r\n PATH(''resource_semaphore''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(@i) \r\n x.wg_name AS name,\r\n x.request_max_memory_grant_percent,\r\n x.request_max_cpu_time_sec,\r\n x.request_memory_grant_timeout_sec,\r\n x.max_dop\r\n FOR XML\r\n PATH(''workload_group''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(@i) \r\n x.rp_name AS name,\r\n x.min_memory_percent,\r\n x.max_memory_percent,\r\n x.min_cpu_percent,\r\n x.max_cpu_percent\r\n FOR XML\r\n PATH(''resource_pool''),\r\n TYPE\r\n )\r\n WHERE\r\n x.request_time IS NOT NULL\r\n FOR XML\r\n PATH(''memory_info''),\r\n TYPE\r\n ) \r\n '\r\n ELSE\r\n 'NULL '\r\n END + 'AS memory_info,\r\n x.start_time,\r\n '\r\n +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[login_time|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.login_time '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS login_time,\r\n x.last_request_start_time\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n y.*,\r\n CASE\r\n WHEN DATEDIFF(hour, y.start_time, GETDATE()) > 576 THEN\r\n DATEDIFF(second, GETDATE(), y.start_time)\r\n ELSE DATEDIFF(ms, y.start_time, GETDATE())\r\n END AS elapsed_time,\r\n COALESCE(tempdb_info.tempdb_allocations, 0) AS tempdb_allocations,\r\n COALESCE\r\n (\r\n CASE\r\n WHEN tempdb_info.tempdb_current < 0 THEN 0\r\n ELSE tempdb_info.tempdb_current\r\n END,\r\n 0\r\n ) AS tempdb_current,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'N''('' + CONVERT(NVARCHAR, y.wait_duration_ms) + N''ms)'' +\r\n y.wait_type +\r\n CASE\r\n WHEN y.wait_type LIKE N''PAGE%LATCH_%'' THEN\r\n N'':'' +\r\n COALESCE(DB_NAME(CONVERT(INT, LEFT(y.resource_description, CHARINDEX(N'':'', y.resource_description) - 1))), N''(null)'') +\r\n N'':'' +\r\n SUBSTRING(y.resource_description, CHARINDEX(N'':'', y.resource_description) + 1, LEN(y.resource_description) - CHARINDEX(N'':'', REVERSE(y.resource_description)) - CHARINDEX(N'':'', y.resource_description)) +\r\n N''('' +\r\n CASE\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 1 OR\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) % 8088 = 0\r\n THEN\r\n N''PFS''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 2 OR\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) % 511232 = 0\r\n THEN\r\n N''GAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 3 OR\r\n (CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 1) % 511232 = 0\r\n THEN\r\n N''SGAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 6 OR\r\n (CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 6) % 511232 = 0\r\n THEN\r\n N''DCM''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 7 OR\r\n (CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 7) % 511232 = 0\r\n THEN\r\n N''BCM''\r\n ELSE\r\n N''*''\r\n END +\r\n N'')''\r\n WHEN y.wait_type IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n N'':'' +\r\n SUBSTRING\r\n (\r\n y.resource_description,\r\n CHARINDEX(N''nodeId'', y.resource_description) + 7,\r\n CASE\r\n WHEN CHARINDEX(N'' '', y.resource_description, CHARINDEX(N''nodeId'', y.resource_description)) > 0\r\n THEN CHARINDEX(N'' '', y.resource_description, CHARINDEX(N''nodeId'', y.resource_description) + 7) - 7 - CHARINDEX(N''nodeId'', y.resource_description)\r\n ELSE 4\r\n END\r\n )\r\n WHEN y.wait_type LIKE N''LATCH[_]%'' THEN\r\n N'' ['' + LEFT(y.resource_description, COALESCE(NULLIF(CHARINDEX(N'' '', y.resource_description), 0), LEN(y.resource_description) + 1) - 1) + N'']''\r\n WHEN\r\n y.wait_type = N''OLEDB''\r\n AND y.resource_description LIKE N''%(SPID=%)'' THEN\r\n N''['' + LEFT(y.resource_description, CHARINDEX(N''(SPID='', y.resource_description) - 2) +\r\n N'':'' + SUBSTRING(y.resource_description, CHARINDEX(N''(SPID='', y.resource_description) + 6, CHARINDEX(N'')'', y.resource_description, (CHARINDEX(N''(SPID='', y.resource_description) + 6)) - (CHARINDEX(N''(SPID='', y.resource_description) + 6)) + '']''\r\n ELSE\r\n N''''\r\n END COLLATE Latin1_General_Bin2 AS sys_wait_info,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n CASE\r\n WHEN @get_task_info = 2 THEN\r\n 'tasks.physical_io,\r\n tasks.context_switches,\r\n tasks.tasks,\r\n tasks.block_info,\r\n tasks.wait_info AS task_wait_info,\r\n tasks.thread_CPU_snapshot,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n CASE\r\n WHEN NOT (@get_avg_time = 1 AND @recursion = 1) THEN\r\n 'CONVERT(INT, NULL) '\r\n ELSE\r\n 'qs.total_elapsed_time / qs.execution_count '\r\n END +\r\n 'AS avg_elapsed_time\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n sp.session_id,\r\n sp.request_id,\r\n COALESCE(r.logical_reads, s.logical_reads) AS reads,\r\n COALESCE(r.reads, s.reads) AS physical_reads,\r\n COALESCE(r.writes, s.writes) AS writes,\r\n COALESCE(r.CPU_time, s.CPU_time) AS CPU,\r\n ' +\r\n CASE\r\n WHEN @get_memory_info = 1 THEN\r\n 'sp.memory_usage AS used_memory,\r\n mg.used_memory_kb AS mg_used_memory_kb,\r\n mg.max_used_memory_kb,\r\n mg.request_time,\r\n mg.grant_time,\r\n mg.wait_time_ms,\r\n mg.requested_memory_kb,\r\n mg.granted_memory_kb AS mg_granted_memory_kb,\r\n mg.required_memory_kb,\r\n mg.ideal_memory_kb,\r\n mg.dop AS dop,\r\n mg.query_cost AS query_cost,\r\n mg.queue_id AS queue_id,\r\n mg.wait_order AS wait_order,\r\n mg.is_next_candidate,\r\n rs.target_memory_kb,\r\n rs.max_target_memory_kb,\r\n rs.total_memory_kb,\r\n rs.available_memory_kb,\r\n rs.granted_memory_kb AS rs_granted_memory_kb,\r\n rs.used_memory_kb AS rs_used_memory_kb,\r\n rs.grantee_count,\r\n rs.waiter_count,\r\n rs.timeout_error_count,\r\n wg.name AS wg_name,\r\n wg.request_max_memory_grant_percent,\r\n wg.request_max_cpu_time_sec,\r\n wg.request_memory_grant_timeout_sec,\r\n wg.max_dop,\r\n rp.name AS rp_name,\r\n rp.min_memory_percent,\r\n rp.max_memory_percent,\r\n rp.min_cpu_percent,\r\n rp.max_cpu_percent,\r\n '\r\n ELSE\r\n 'sp.memory_usage + COALESCE(r.granted_query_memory, 0) AS used_memory,\r\n '\r\n END +\r\n 'LOWER(sp.status) AS status,\r\n COALESCE(r.sql_handle, sp.sql_handle) AS sql_handle,\r\n COALESCE(r.statement_start_offset, sp.statement_start_offset) AS statement_start_offset,\r\n COALESCE(r.statement_end_offset, sp.statement_end_offset) AS statement_end_offset,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'sp.wait_type COLLATE Latin1_General_Bin2 AS wait_type,\r\n sp.wait_resource COLLATE Latin1_General_Bin2 AS resource_description,\r\n sp.wait_time AS wait_duration_ms,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'NULLIF(sp.blocked, 0) AS blocking_session_id,\r\n r.plan_handle,\r\n NULLIF(r.percent_complete, 0) AS percent_complete,\r\n sp.host_name,\r\n sp.login_name,\r\n sp.program_name,\r\n s.host_process_id,\r\n COALESCE(r.text_size, s.text_size) AS text_size,\r\n COALESCE(r.language, s.language) AS language,\r\n COALESCE(r.date_format, s.date_format) AS date_format,\r\n COALESCE(r.date_first, s.date_first) AS date_first,\r\n COALESCE(r.quoted_identifier, s.quoted_identifier) AS quoted_identifier,\r\n COALESCE(r.arithabort, s.arithabort) AS arithabort,\r\n COALESCE(r.ansi_null_dflt_on, s.ansi_null_dflt_on) AS ansi_null_dflt_on,\r\n COALESCE(r.ansi_defaults, s.ansi_defaults) AS ansi_defaults,\r\n COALESCE(r.ansi_warnings, s.ansi_warnings) AS ansi_warnings,\r\n COALESCE(r.ansi_padding, s.ansi_padding) AS ansi_padding,\r\n COALESCE(r.ansi_nulls, s.ansi_nulls) AS ansi_nulls,\r\n COALESCE(r.concat_null_yields_null, s.concat_null_yields_null) AS concat_null_yields_null,\r\n COALESCE(r.transaction_isolation_level, s.transaction_isolation_level) AS transaction_isolation_level,\r\n COALESCE(r.lock_timeout, s.lock_timeout) AS lock_timeout,\r\n COALESCE(r.deadlock_priority, s.deadlock_priority) AS deadlock_priority,\r\n COALESCE(r.row_count, s.row_count) AS row_count,\r\n COALESCE(r.command, sp.cmd) AS command_type,\r\n NULLIF(COALESCE(r.context_info, s.context_info), 0x) AS context_info,\r\n COALESCE\r\n (\r\n CASE\r\n WHEN\r\n (\r\n s.is_user_process = 0\r\n AND r.total_elapsed_time >= 0\r\n ) THEN\r\n DATEADD\r\n (\r\n ms,\r\n 1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),\r\n DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())\r\n )\r\n END,\r\n NULLIF(COALESCE(r.start_time, sp.last_request_end_time), CONVERT(DATETIME, ''19000101'', 112)),\r\n sp.login_time\r\n ) AS start_time,\r\n sp.login_time,\r\n CASE\r\n WHEN s.is_user_process = 1 THEN\r\n s.last_request_start_time\r\n ELSE\r\n COALESCE\r\n (\r\n DATEADD\r\n (\r\n ms,\r\n 1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),\r\n DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())\r\n ),\r\n s.last_request_start_time\r\n )\r\n END AS last_request_start_time,\r\n r.transaction_id,\r\n sp.database_id,\r\n sp.open_tran_count,\r\n ' +\r\n CASE\r\n WHEN EXISTS\r\n (\r\n SELECT\r\n *\r\n FROM sys.all_columns AS ac\r\n WHERE\r\n ac.object_id = OBJECT_ID('sys.dm_exec_sessions')\r\n AND ac.name = 'group_id'\r\n )\r\n THEN 's.group_id,'\r\n ELSE 'CONVERT(INT, NULL) AS group_id,'\r\n END + '\r\n s.original_login_name\r\n FROM ' +\r\n CASE\r\n WHEN @get_memory_info = 1 THEN\r\n '(\r\n SELECT TOP(@i)\r\n rp0.*\r\n FROM sys.resource_governor_resource_pools AS rp0\r\n ) AS rp\r\n RIGHT OUTER HASH JOIN\r\n (\r\n (\r\n SELECT TOP(@i)\r\n wg0.*\r\n FROM sys.resource_governor_workload_groups AS wg0\r\n ) AS wg\r\n RIGHT OUTER HASH JOIN\r\n (\r\n (\r\n SELECT TOP(@i)\r\n rs0.*\r\n FROM sys.dm_exec_query_resource_semaphores AS rs0\r\n ) AS rs\r\n RIGHT OUTER HASH JOIN\r\n (\r\n ' + @core_session_join +\r\n 'LEFT OUTER LOOP JOIN sys.dm_exec_query_memory_grants AS mg ON\r\n sp.session_id = mg.session_id\r\n AND sp.request_id = mg.request_id\r\n ) ON\r\n rs.resource_semaphore_id = mg.resource_semaphore_id\r\n AND rs.pool_id = mg.pool_id\r\n ) ON\r\n wg.group_id = s.group_id\r\n ) ON\r\n rp.pool_id = wg.pool_id '\r\n ELSE @core_session_join\r\n END + '\r\n ) AS y\r\n ' +\r\n CASE\r\n WHEN @get_task_info = 2 THEN\r\n CONVERT(VARCHAR(MAX), '') +\r\n 'LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n task_nodes.task_node.value(''(session_id/text())[1]'', ''SMALLINT'') AS session_id,\r\n task_nodes.task_node.value(''(request_id/text())[1]'', ''INT'') AS request_id,\r\n task_nodes.task_node.value(''(physical_io/text())[1]'', ''BIGINT'') AS physical_io,\r\n task_nodes.task_node.value(''(context_switches/text())[1]'', ''BIGINT'') AS context_switches,\r\n task_nodes.task_node.value(''(tasks/text())[1]'', ''INT'') AS tasks,\r\n task_nodes.task_node.value(''(block_info/text())[1]'', ''NVARCHAR(4000)'') AS block_info,\r\n task_nodes.task_node.value(''(waits/text())[1]'', ''NVARCHAR(4000)'') AS wait_info,\r\n task_nodes.task_node.value(''(thread_CPU_snapshot/text())[1]'', ''BIGINT'') AS thread_CPU_snapshot\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CONVERT\r\n (\r\n XML,\r\n REPLACE\r\n (\r\n CONVERT(NVARCHAR(MAX), tasks_raw.task_xml_raw) COLLATE Latin1_General_Bin2,\r\n N'''',\r\n N'', ''\r\n )\r\n ) AS task_xml\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.session_id\r\n ELSE\r\n NULL\r\n END AS [session_id],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.request_id\r\n ELSE\r\n NULL\r\n END AS [request_id],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.physical_io\r\n ELSE\r\n NULL\r\n END AS [physical_io],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.context_switches\r\n ELSE\r\n NULL\r\n END AS [context_switches],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.thread_CPU_snapshot\r\n ELSE\r\n NULL\r\n END AS [thread_CPU_snapshot],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.tasks\r\n ELSE\r\n NULL\r\n END AS [tasks],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.block_info\r\n ELSE\r\n NULL\r\n END AS [block_info],\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n N''('' +\r\n CONVERT(NVARCHAR, num_waits) + N''x: '' +\r\n CASE num_waits\r\n WHEN 1 THEN\r\n CONVERT(NVARCHAR, min_wait_time) + N''ms''\r\n WHEN 2 THEN\r\n CASE\r\n WHEN min_wait_time <> max_wait_time THEN\r\n CONVERT(NVARCHAR, min_wait_time) + N''/'' + CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n ELSE\r\n CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n END\r\n ELSE\r\n CASE\r\n WHEN min_wait_time <> max_wait_time THEN\r\n CONVERT(NVARCHAR, min_wait_time) + N''/'' + CONVERT(NVARCHAR, avg_wait_time) + N''/'' + CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n ELSE\r\n CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n END\r\n END +\r\n N'')'' + wait_type COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ) AS [waits]\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n w1.*,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n w1.session_id,\r\n w1.request_id\r\n ORDER BY\r\n w1.block_info DESC,\r\n w1.num_waits DESC,\r\n w1.wait_type\r\n ) AS r\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n task_info.session_id,\r\n task_info.request_id,\r\n task_info.physical_io,\r\n task_info.context_switches,\r\n task_info.thread_CPU_snapshot,\r\n task_info.num_tasks AS tasks,\r\n CASE\r\n WHEN task_info.runnable_time IS NOT NULL THEN\r\n ''RUNNABLE''\r\n ELSE\r\n wt2.wait_type\r\n END AS wait_type,\r\n NULLIF(COUNT(COALESCE(task_info.runnable_time, wt2.waiting_task_address)), 0) AS num_waits,\r\n MIN(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS min_wait_time,\r\n AVG(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS avg_wait_time,\r\n MAX(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS max_wait_time,\r\n MAX(wt2.block_info) AS block_info\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n t.session_id,\r\n t.request_id,\r\n SUM(CONVERT(BIGINT, t.pending_io_count)) OVER (PARTITION BY t.session_id, t.request_id) AS physical_io,\r\n SUM(CONVERT(BIGINT, t.context_switches_count)) OVER (PARTITION BY t.session_id, t.request_id) AS context_switches,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n AND @sys_info = 1\r\n THEN\r\n 'SUM(tr.usermode_time + tr.kernel_time) OVER (PARTITION BY t.session_id, t.request_id) '\r\n ELSE\r\n 'CONVERT(BIGINT, NULL) '\r\n END +\r\n ' AS thread_CPU_snapshot,\r\n COUNT(*) OVER (PARTITION BY t.session_id, t.request_id) AS num_tasks,\r\n t.task_address,\r\n t.task_state,\r\n CASE\r\n WHEN\r\n t.task_state = ''RUNNABLE''\r\n AND w.runnable_time > 0 THEN\r\n w.runnable_time\r\n ELSE\r\n NULL\r\n END AS runnable_time\r\n FROM sys.dm_os_tasks AS t\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n sp2.session_id\r\n FROM @sessions AS sp2\r\n WHERE\r\n sp2.session_id = t.session_id\r\n AND sp2.request_id = t.request_id\r\n AND sp2.status <> ''sleeping''\r\n ) AS sp20\r\n LEFT OUTER HASH JOIN\r\n (\r\n ' +\r\n CASE\r\n WHEN @sys_info = 1 THEN\r\n 'SELECT TOP(@i)\r\n (\r\n SELECT TOP(@i)\r\n ms_ticks\r\n FROM sys.dm_os_sys_info\r\n ) -\r\n w0.wait_resumed_ms_ticks AS runnable_time,\r\n w0.worker_address,\r\n w0.thread_address,\r\n w0.task_bound_ms_ticks\r\n FROM sys.dm_os_workers AS w0\r\n WHERE\r\n w0.state = ''RUNNABLE''\r\n OR @first_collection_ms_ticks >= w0.task_bound_ms_ticks'\r\n ELSE\r\n 'SELECT\r\n CONVERT(BIGINT, NULL) AS runnable_time,\r\n CONVERT(VARBINARY(8), NULL) AS worker_address,\r\n CONVERT(VARBINARY(8), NULL) AS thread_address,\r\n CONVERT(BIGINT, NULL) AS task_bound_ms_ticks\r\n WHERE\r\n 1 = 0'\r\n END +\r\n '\r\n ) AS w ON\r\n w.worker_address = t.worker_address\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n AND @sys_info = 1\r\n THEN\r\n 'LEFT OUTER HASH JOIN sys.dm_os_threads AS tr ON\r\n tr.thread_address = w.thread_address\r\n AND @first_collection_ms_ticks >= w.task_bound_ms_ticks\r\n '\r\n ELSE\r\n ''\r\n END +\r\n ') AS task_info\r\n LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n wt1.wait_type,\r\n wt1.waiting_task_address,\r\n MAX(wt1.wait_duration_ms) AS wait_duration_ms,\r\n MAX(wt1.block_info) AS block_info\r\n FROM\r\n (\r\n SELECT DISTINCT TOP(@i)\r\n wt.wait_type +\r\n CASE\r\n WHEN wt.wait_type LIKE N''PAGE%LATCH_%'' THEN\r\n '':'' +\r\n COALESCE(DB_NAME(CONVERT(INT, LEFT(wt.resource_description, CHARINDEX(N'':'', wt.resource_description) - 1))), N''(null)'') +\r\n N'':'' +\r\n SUBSTRING(wt.resource_description, CHARINDEX(N'':'', wt.resource_description) + 1, LEN(wt.resource_description) - CHARINDEX(N'':'', REVERSE(wt.resource_description)) - CHARINDEX(N'':'', wt.resource_description)) +\r\n N''('' +\r\n CASE\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 1 OR\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) % 8088 = 0\r\n THEN\r\n N''PFS''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 2 OR\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) % 511232 = 0\r\n THEN\r\n N''GAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 3 OR\r\n (CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 1) % 511232 = 0\r\n THEN\r\n N''SGAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 6 OR\r\n (CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 6) % 511232 = 0\r\n THEN\r\n N''DCM''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 7 OR\r\n (CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 7) % 511232 = 0\r\n THEN\r\n N''BCM''\r\n ELSE\r\n N''*''\r\n END +\r\n N'')''\r\n WHEN wt.wait_type IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n N'':'' +\r\n SUBSTRING\r\n (\r\n wt.resource_description,\r\n CHARINDEX(N''nodeId'', wt.resource_description) + 7,\r\n CASE\r\n WHEN CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''nodeId'', wt.resource_description)) > 0\r\n THEN CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''nodeId'', wt.resource_description) + 7) - 7 - CHARINDEX(N''nodeId'', wt.resource_description)\r\n ELSE 4\r\n END\r\n )\r\n WHEN wt.wait_type LIKE N''LATCH[_]%'' THEN\r\n N'' ['' + LEFT(wt.resource_description, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description), 0), LEN(wt.resource_description) + 1) - 1) + N'']''\r\n ELSE\r\n N''''\r\n END COLLATE Latin1_General_Bin2 AS wait_type,\r\n CASE\r\n WHEN\r\n (\r\n wt.blocking_session_id IS NOT NULL\r\n AND wt.wait_type LIKE N''LCK[_]%''\r\n ) THEN\r\n (\r\n SELECT TOP(@i)\r\n x.lock_type,\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n DB_NAME\r\n (\r\n CONVERT\r\n (\r\n INT,\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''dbid='', wt.resource_description), 0) + 5, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''dbid='', wt.resource_description) + 5), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''dbid='', wt.resource_description) - 5)\r\n )\r\n ),\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ) AS database_name,\r\n CASE x.lock_type\r\n WHEN N''objectlock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''objid='', wt.resource_description), 0) + 6, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''objid='', wt.resource_description) + 6), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''objid='', wt.resource_description) - 6)\r\n ELSE\r\n NULL\r\n END AS object_id,\r\n CASE x.lock_type\r\n WHEN N''filelock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''fileid='', wt.resource_description), 0) + 7, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''fileid='', wt.resource_description) + 7), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''fileid='', wt.resource_description) - 7)\r\n ELSE\r\n NULL\r\n END AS file_id,\r\n CASE\r\n WHEN x.lock_type in (N''pagelock'', N''extentlock'', N''ridlock'') THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''associatedObjectId='', wt.resource_description), 0) + 19, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''associatedObjectId='', wt.resource_description) + 19), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''associatedObjectId='', wt.resource_description) - 19)\r\n WHEN x.lock_type in (N''keylock'', N''hobtlock'', N''allocunitlock'') THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''hobtid='', wt.resource_description), 0) + 7, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''hobtid='', wt.resource_description) + 7), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''hobtid='', wt.resource_description) - 7)\r\n ELSE\r\n NULL\r\n END AS hobt_id,\r\n CASE x.lock_type\r\n WHEN N''applicationlock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''hash='', wt.resource_description), 0) + 5, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''hash='', wt.resource_description) + 5), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''hash='', wt.resource_description) - 5)\r\n ELSE\r\n NULL\r\n END AS applock_hash,\r\n CASE x.lock_type\r\n WHEN N''metadatalock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''subresource='', wt.resource_description), 0) + 12, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''subresource='', wt.resource_description) + 12), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''subresource='', wt.resource_description) - 12)\r\n ELSE\r\n NULL\r\n END AS metadata_resource,\r\n CASE x.lock_type\r\n WHEN N''metadatalock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''classid='', wt.resource_description), 0) + 8, COALESCE(NULLIF(CHARINDEX(N'' dbid='', wt.resource_description) - CHARINDEX(N''classid='', wt.resource_description), 0), LEN(wt.resource_description) + 1) - 8)\r\n ELSE\r\n NULL\r\n END AS metadata_class_id\r\n FROM\r\n (\r\n SELECT TOP(1)\r\n LEFT(wt.resource_description, CHARINDEX(N'' '', wt.resource_description) - 1) COLLATE Latin1_General_Bin2 AS lock_type\r\n ) AS x\r\n FOR XML\r\n PATH('''')\r\n )\r\n ELSE NULL\r\n END AS block_info,\r\n wt.wait_duration_ms,\r\n wt.waiting_task_address\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n wt0.wait_type COLLATE Latin1_General_Bin2 AS wait_type,\r\n LEFT\r\n (\r\n p.resource_description,\r\n ISNULL(NULLIF(CHARINDEX('' (LATCH '', p.resource_description) - 1, -1), 256)\r\n ) AS resource_description,\r\n wt0.wait_duration_ms,\r\n wt0.waiting_task_address,\r\n CASE\r\n WHEN wt0.blocking_session_id = p.blocked THEN\r\n wt0.blocking_session_id\r\n ELSE\r\n NULL\r\n END AS blocking_session_id\r\n FROM sys.dm_os_waiting_tasks AS wt0\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s0.blocked,\r\n wt0.resource_description COLLATE Latin1_General_Bin2 AS resource_description\r\n FROM @sessions AS s0\r\n WHERE\r\n s0.session_id = wt0.session_id\r\n AND COALESCE(s0.wait_type, N'''') <> N''OLEDB''\r\n AND wt0.wait_type <> N''OLEDB''\r\n ) AS p\r\n ) AS wt\r\n ) AS wt1\r\n GROUP BY\r\n wt1.wait_type,\r\n wt1.waiting_task_address\r\n ) AS wt2 ON\r\n wt2.waiting_task_address = task_info.task_address\r\n AND wt2.wait_duration_ms > 0\r\n AND task_info.runnable_time IS NULL\r\n GROUP BY\r\n task_info.session_id,\r\n task_info.request_id,\r\n task_info.physical_io,\r\n task_info.context_switches,\r\n task_info.thread_CPU_snapshot,\r\n task_info.num_tasks,\r\n CASE\r\n WHEN task_info.runnable_time IS NOT NULL THEN\r\n ''RUNNABLE''\r\n ELSE\r\n wt2.wait_type\r\n END\r\n ) AS w1\r\n ) AS waits\r\n ORDER BY\r\n waits.session_id,\r\n waits.request_id,\r\n waits.r\r\n FOR XML\r\n PATH(N''tasks''),\r\n TYPE\r\n ) AS tasks_raw (task_xml_raw)\r\n ) AS tasks_final\r\n CROSS APPLY tasks_final.task_xml.nodes(N''/tasks'') AS task_nodes (task_node)\r\n WHERE\r\n task_nodes.task_node.exist(N''session_id'') = 1\r\n ) AS tasks ON\r\n tasks.session_id = y.session_id\r\n AND tasks.request_id = y.request_id\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n t_info.session_id,\r\n COALESCE(t_info.request_id, -1) AS request_id,\r\n SUM(t_info.tempdb_allocations) AS tempdb_allocations,\r\n SUM(t_info.tempdb_current) AS tempdb_current\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n tsu.session_id,\r\n tsu.request_id,\r\n tsu.user_objects_alloc_page_count +\r\n tsu.internal_objects_alloc_page_count AS tempdb_allocations,\r\n tsu.user_objects_alloc_page_count +\r\n tsu.internal_objects_alloc_page_count -\r\n tsu.user_objects_dealloc_page_count -\r\n tsu.internal_objects_dealloc_page_count AS tempdb_current\r\n FROM sys.dm_db_task_space_usage AS tsu\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s0.session_id\r\n FROM @sessions AS s0\r\n WHERE\r\n s0.session_id = tsu.session_id\r\n ) AS p\r\n\r\n UNION ALL\r\n\r\n SELECT TOP(@i)\r\n ssu.session_id,\r\n NULL AS request_id,\r\n ssu.user_objects_alloc_page_count +\r\n ssu.internal_objects_alloc_page_count AS tempdb_allocations,\r\n ssu.user_objects_alloc_page_count +\r\n ssu.internal_objects_alloc_page_count -\r\n ssu.user_objects_dealloc_page_count -\r\n ssu.internal_objects_dealloc_page_count AS tempdb_current\r\n FROM sys.dm_db_session_space_usage AS ssu\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s0.session_id\r\n FROM @sessions AS s0\r\n WHERE\r\n s0.session_id = ssu.session_id\r\n ) AS p\r\n ) AS t_info\r\n GROUP BY\r\n t_info.session_id,\r\n COALESCE(t_info.request_id, -1)\r\n ) AS tempdb_info ON\r\n tempdb_info.session_id = y.session_id\r\n AND tempdb_info.request_id =\r\n CASE\r\n WHEN y.status = N''sleeping'' THEN\r\n -1\r\n ELSE\r\n y.request_id\r\n END\r\n ' +\r\n CASE\r\n WHEN\r\n NOT\r\n (\r\n @get_avg_time = 1\r\n AND @recursion = 1\r\n ) THEN\r\n ''\r\n ELSE\r\n 'LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_exec_query_stats\r\n ) AS qs ON\r\n qs.sql_handle = y.sql_handle\r\n AND qs.plan_handle = y.plan_handle\r\n AND qs.statement_start_offset = y.statement_start_offset\r\n AND qs.statement_end_offset = y.statement_end_offset\r\n '\r\n END +\r\n ') AS x\r\n OPTION (KEEPFIXED PLAN, OPTIMIZE FOR (@i = 1)); ';\r\n\r\n SET @sql_n = CONVERT(NVARCHAR(MAX), @sql);\r\n\r\n SET @last_collection_start = GETDATE();\r\n\r\n IF\r\n @recursion = -1\r\n AND @sys_info = 1\r\n BEGIN;\r\n SELECT\r\n @first_collection_ms_ticks = ms_ticks\r\n FROM sys.dm_os_sys_info;\r\n END;\r\n\r\n INSERT #sessions\r\n (\r\n recursion,\r\n session_id,\r\n request_id,\r\n session_number,\r\n elapsed_time,\r\n avg_elapsed_time,\r\n physical_io,\r\n reads,\r\n physical_reads,\r\n writes,\r\n tempdb_allocations,\r\n tempdb_current,\r\n CPU,\r\n thread_CPU_snapshot,\r\n context_switches,\r\n used_memory,\r\n max_used_memory,\r\n requested_memory,\r\n granted_memory,\r\n tasks,\r\n status,\r\n wait_info,\r\n transaction_id,\r\n open_tran_count,\r\n sql_handle,\r\n statement_start_offset,\r\n statement_end_offset, \r\n sql_text,\r\n plan_handle,\r\n blocking_session_id,\r\n percent_complete,\r\n host_name,\r\n login_name,\r\n database_name,\r\n program_name,\r\n additional_info,\r\n memory_info,\r\n start_time,\r\n login_time,\r\n last_request_start_time\r\n )\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@recursion SMALLINT, @filter sysname, @not_filter sysname, @first_collection_ms_ticks BIGINT',\r\n @recursion, @filter, @not_filter, @first_collection_ms_ticks;\r\n\r\n --Collect transaction information?\r\n IF\r\n @recursion = 1\r\n AND\r\n (\r\n @output_column_list LIKE '%|[tran_start_time|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tran_log_writes|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[implicit_tran|]%' ESCAPE '|'\r\n )\r\n BEGIN; \r\n DECLARE @i INT;\r\n SET @i = 2147483647;\r\n\r\n UPDATE s\r\n SET\r\n tran_start_time =\r\n CONVERT\r\n (\r\n DATETIME,\r\n LEFT\r\n (\r\n x.trans_info,\r\n NULLIF(CHARINDEX(NCHAR(254) COLLATE Latin1_General_Bin2, x.trans_info) - 1, -1)\r\n ),\r\n 121\r\n ),\r\n tran_log_writes =\r\n RIGHT\r\n (\r\n x.trans_info,\r\n LEN(x.trans_info) - CHARINDEX(NCHAR(254) COLLATE Latin1_General_Bin2, x.trans_info)\r\n ),\r\n implicit_tran =\r\n CASE\r\n WHEN x.implicit_tran = 1 THEN 'ON'\r\n ELSE 'OFF'\r\n END\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n trans_nodes.trans_node.value('(session_id/text())[1]', 'SMALLINT') AS session_id,\r\n COALESCE(trans_nodes.trans_node.value('(request_id/text())[1]', 'INT'), 0) AS request_id,\r\n trans_nodes.trans_node.value('(implicit_tran/text())[1]', 'INT') AS implicit_tran,\r\n trans_nodes.trans_node.value('(trans_info/text())[1]', 'NVARCHAR(4000)') AS trans_info\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CONVERT\r\n (\r\n XML,\r\n REPLACE\r\n (\r\n CONVERT(NVARCHAR(MAX), trans_raw.trans_xml_raw) COLLATE Latin1_General_Bin2,\r\n N'', N''\r\n )\r\n )\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CASE u_trans.r\r\n WHEN 1 THEN u_trans.session_id\r\n ELSE NULL\r\n END AS [session_id],\r\n CASE u_trans.r\r\n WHEN 1 THEN u_trans.request_id\r\n ELSE NULL\r\n END AS [request_id],\r\n u_trans.implicit_tran AS [implicit_tran],\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n CASE\r\n WHEN u_trans.database_id IS NOT NULL THEN\r\n CASE u_trans.r\r\n WHEN 1 THEN COALESCE(CONVERT(NVARCHAR, u_trans.transaction_start_time, 121) + NCHAR(254), N'')\r\n ELSE N''\r\n END +\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT(VARCHAR(128), COALESCE(DB_NAME(u_trans.database_id), N'(null)')),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N'?'\r\n ) +\r\n N': ' +\r\n CONVERT(NVARCHAR, u_trans.log_record_count) + N' (' + CONVERT(NVARCHAR, u_trans.log_kb_used) + N' kB)' +\r\n N','\r\n ELSE\r\n N'N/A,'\r\n END COLLATE Latin1_General_Bin2\r\n ) AS [trans_info]\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n trans.*,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n trans.session_id,\r\n trans.request_id\r\n ORDER BY\r\n trans.transaction_start_time DESC\r\n ) AS r\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n session_tran_map.session_id,\r\n session_tran_map.request_id,\r\n s_tran.database_id,\r\n COALESCE(SUM(s_tran.database_transaction_log_record_count), 0) AS log_record_count,\r\n COALESCE(SUM(s_tran.database_transaction_log_bytes_used), 0) / 1024 AS log_kb_used,\r\n MIN(s_tran.database_transaction_begin_time) AS transaction_start_time,\r\n MAX\r\n (\r\n CASE\r\n WHEN a_tran.name = 'implicit_transaction' THEN 1\r\n ELSE 0\r\n END\r\n ) AS implicit_tran\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_tran_active_transactions\r\n WHERE\r\n transaction_begin_time <= @last_collection_start\r\n ) AS a_tran\r\n INNER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_tran_database_transactions\r\n WHERE\r\n database_id < 32767\r\n ) AS s_tran ON\r\n s_tran.transaction_id = a_tran.transaction_id\r\n LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_tran_session_transactions\r\n ) AS tst ON\r\n s_tran.transaction_id = tst.transaction_id\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s3.session_id,\r\n s3.request_id\r\n FROM\r\n (\r\n SELECT TOP(1)\r\n s1.session_id,\r\n s1.request_id\r\n FROM #sessions AS s1\r\n WHERE\r\n s1.transaction_id = s_tran.transaction_id\r\n AND s1.recursion = 1\r\n \r\n UNION ALL\r\n \r\n SELECT TOP(1)\r\n s2.session_id,\r\n s2.request_id\r\n FROM #sessions AS s2\r\n WHERE\r\n s2.session_id = tst.session_id\r\n AND s2.recursion = 1\r\n ) AS s3\r\n ORDER BY\r\n s3.request_id\r\n ) AS session_tran_map\r\n GROUP BY\r\n session_tran_map.session_id,\r\n session_tran_map.request_id,\r\n s_tran.database_id\r\n ) AS trans\r\n ) AS u_trans\r\n FOR XML\r\n PATH('trans'),\r\n TYPE\r\n ) AS trans_raw (trans_xml_raw)\r\n ) AS trans_final (trans_xml)\r\n CROSS APPLY trans_final.trans_xml.nodes('/trans') AS trans_nodes (trans_node)\r\n ) AS x\r\n INNER HASH JOIN #sessions AS s ON\r\n s.session_id = x.session_id\r\n AND s.request_id = x.request_id\r\n OPTION (OPTIMIZE FOR (@i = 1));\r\n END;\r\n\r\n --Variables for text and plan collection\r\n DECLARE \r\n @session_id SMALLINT,\r\n @request_id INT,\r\n @sql_handle VARBINARY(64),\r\n @plan_handle VARBINARY(64),\r\n @statement_start_offset INT,\r\n @statement_end_offset INT,\r\n @start_time DATETIME,\r\n @database_name sysname;\r\n\r\n IF\r\n @recursion = 1\r\n AND @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE sql_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n session_id,\r\n request_id,\r\n sql_handle,\r\n statement_start_offset,\r\n statement_end_offset\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n AND sql_handle IS NOT NULL\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN sql_cursor;\r\n\r\n FETCH NEXT FROM sql_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @sql_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n\r\n --Wait up to 5 ms for the SQL text, then give up\r\n SET LOCK_TIMEOUT 5;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n UPDATE s\r\n SET\r\n s.sql_text =\r\n (\r\n SELECT\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n N'--' + NCHAR(13) + NCHAR(10) +\r\n CASE\r\n WHEN @get_full_inner_text = 1 THEN est.text\r\n WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN est.text\r\n WHEN SUBSTRING(est.text, (@statement_start_offset/2), 2) LIKE N'[a-zA-Z0-9][a-zA-Z0-9]' THEN est.text\r\n ELSE\r\n CASE\r\n WHEN @statement_start_offset > 0 THEN\r\n SUBSTRING\r\n (\r\n est.text,\r\n ((@statement_start_offset/2) + 1),\r\n (\r\n CASE\r\n WHEN @statement_end_offset = -1 THEN 2147483647\r\n ELSE ((@statement_end_offset - @statement_start_offset)/2) + 1\r\n END\r\n )\r\n )\r\n ELSE RTRIM(LTRIM(est.text))\r\n END\r\n END +\r\n NCHAR(13) + NCHAR(10) + N'--' COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [processing-instruction(query)]\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ),\r\n s.statement_start_offset =\r\n CASE\r\n WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN 0\r\n WHEN SUBSTRING(CONVERT(VARCHAR(MAX), est.text), (@statement_start_offset/2), 2) LIKE '[a-zA-Z0-9][a-zA-Z0-9]' THEN 0\r\n ELSE @statement_start_offset\r\n END,\r\n s.statement_end_offset =\r\n CASE\r\n WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN -1\r\n WHEN SUBSTRING(CONVERT(VARCHAR(MAX), est.text), (@statement_start_offset/2), 2) LIKE '[a-zA-Z0-9][a-zA-Z0-9]' THEN -1\r\n ELSE @statement_end_offset\r\n END\r\n FROM\r\n #sessions AS s,\r\n (\r\n SELECT TOP(1)\r\n text\r\n FROM\r\n (\r\n SELECT\r\n text,\r\n 0 AS row_num\r\n FROM sys.dm_exec_sql_text(@sql_handle)\r\n \r\n UNION ALL\r\n \r\n SELECT\r\n NULL,\r\n 1 AS row_num\r\n ) AS est0\r\n ORDER BY\r\n row_num\r\n ) AS est\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END TRY\r\n BEGIN CATCH;\r\n UPDATE s\r\n SET\r\n s.sql_text =\r\n CASE ERROR_NUMBER()\r\n WHEN 1222 THEN ''\r\n ELSE ''\r\n END\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END CATCH;\r\n\r\n FETCH NEXT FROM sql_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @sql_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n END;\r\n\r\n --Return this to the default\r\n SET LOCK_TIMEOUT -1;\r\n\r\n CLOSE sql_cursor;\r\n DEALLOCATE sql_cursor;\r\n END;\r\n\r\n IF\r\n @get_outer_command = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[sql_command|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE @buffer_results TABLE\r\n (\r\n EventType VARCHAR(30),\r\n Parameters INT,\r\n EventInfo NVARCHAR(4000),\r\n start_time DATETIME,\r\n session_number INT IDENTITY(1,1) NOT NULL PRIMARY KEY\r\n );\r\n\r\n DECLARE buffer_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n session_id,\r\n MAX(start_time) AS start_time\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n GROUP BY\r\n session_id\r\n ORDER BY\r\n session_id\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN buffer_cursor;\r\n\r\n FETCH NEXT FROM buffer_cursor\r\n INTO\r\n @session_id,\r\n @start_time;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n --In SQL Server 2008, DBCC INPUTBUFFER will throw\r\n --an exception if the session no longer exists\r\n INSERT @buffer_results\r\n (\r\n EventType,\r\n Parameters,\r\n EventInfo\r\n )\r\n EXEC sp_executesql\r\n N'DBCC INPUTBUFFER(@session_id) WITH NO_INFOMSGS;',\r\n N'@session_id SMALLINT',\r\n @session_id;\r\n\r\n UPDATE br\r\n SET\r\n br.start_time = @start_time\r\n FROM @buffer_results AS br\r\n WHERE\r\n br.session_number =\r\n (\r\n SELECT MAX(br2.session_number)\r\n FROM @buffer_results br2\r\n );\r\n END TRY\r\n BEGIN CATCH\r\n END CATCH;\r\n\r\n FETCH NEXT FROM buffer_cursor\r\n INTO\r\n @session_id,\r\n @start_time;\r\n END;\r\n\r\n UPDATE s\r\n SET\r\n sql_command =\r\n (\r\n SELECT\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n N'--' + NCHAR(13) + NCHAR(10) + br.EventInfo + NCHAR(13) + NCHAR(10) + N'--' COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [processing-instruction(query)]\r\n FROM @buffer_results AS br\r\n WHERE\r\n br.session_number = s.session_number\r\n AND br.start_time = s.start_time\r\n AND\r\n (\r\n (\r\n s.start_time = s.last_request_start_time\r\n AND EXISTS\r\n (\r\n SELECT *\r\n FROM sys.dm_exec_requests r2\r\n WHERE\r\n r2.session_id = s.session_id\r\n AND r2.request_id = s.request_id\r\n AND r2.start_time = s.start_time\r\n )\r\n )\r\n OR\r\n (\r\n s.request_id = 0\r\n AND EXISTS\r\n (\r\n SELECT *\r\n FROM sys.dm_exec_sessions s2\r\n WHERE\r\n s2.session_id = s.session_id\r\n AND s2.last_request_start_time = s.last_request_start_time\r\n )\r\n )\r\n )\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n )\r\n FROM #sessions AS s\r\n WHERE\r\n recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n CLOSE buffer_cursor;\r\n DEALLOCATE buffer_cursor;\r\n END;\r\n\r\n IF\r\n @get_plans >= 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE @live_plan BIT;\r\n SET @live_plan = ISNULL(CONVERT(BIT, SIGN(OBJECT_ID('sys.dm_exec_query_statistics_xml'))), 0)\r\n\r\n DECLARE plan_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n session_id,\r\n request_id,\r\n plan_handle,\r\n statement_start_offset,\r\n statement_end_offset\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n AND plan_handle IS NOT NULL\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN plan_cursor;\r\n\r\n FETCH NEXT FROM plan_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @plan_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n\r\n --Wait up to 5 ms for a query plan, then give up\r\n SET LOCK_TIMEOUT 5;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n DECLARE @query_plan XML;\r\n SET @query_plan = NULL;\r\n\r\n IF @live_plan = 1\r\n BEGIN;\r\n BEGIN TRY;\r\n SELECT\r\n @query_plan = x.query_plan\r\n FROM sys.dm_exec_query_statistics_xml(@session_id) AS x;\r\n\r\n IF\r\n @query_plan IS NOT NULL\r\n AND EXISTS\r\n (\r\n SELECT\r\n *\r\n FROM sys.dm_exec_requests AS r\r\n WHERE\r\n r.session_id = @session_id\r\n AND r.request_id = @request_id\r\n AND r.plan_handle = @plan_handle\r\n AND r.statement_start_offset = @statement_start_offset\r\n AND r.statement_end_offset = @statement_end_offset\r\n )\r\n BEGIN;\r\n UPDATE s\r\n SET\r\n s.query_plan = @query_plan\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n END TRY\r\n BEGIN CATCH;\r\n SET @query_plan = NULL;\r\n END CATCH;\r\n END;\r\n\r\n IF @query_plan IS NULL\r\n BEGIN;\r\n BEGIN TRY;\r\n UPDATE s\r\n SET\r\n s.query_plan =\r\n (\r\n SELECT\r\n CONVERT(xml, query_plan)\r\n FROM sys.dm_exec_text_query_plan\r\n (\r\n @plan_handle,\r\n CASE @get_plans\r\n WHEN 1 THEN\r\n @statement_start_offset\r\n ELSE\r\n 0\r\n END,\r\n CASE @get_plans\r\n WHEN 1 THEN\r\n @statement_end_offset\r\n ELSE\r\n -1\r\n END\r\n )\r\n )\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END TRY\r\n BEGIN CATCH;\r\n IF ERROR_NUMBER() = 6335\r\n BEGIN;\r\n UPDATE s\r\n SET\r\n s.query_plan =\r\n (\r\n SELECT\r\n N'--' + NCHAR(13) + NCHAR(10) +\r\n N'-- Could not render showplan due to XML data type limitations. ' + NCHAR(13) + NCHAR(10) +\r\n N'-- To see the graphical plan save the XML below as a .SQLPLAN file and re-open in SSMS.' + NCHAR(13) + NCHAR(10) +\r\n N'--' + NCHAR(13) + NCHAR(10) +\r\n REPLACE(qp.query_plan, N''\r\n ELSE ''\r\n END\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n END CATCH;\r\n END;\r\n\r\n FETCH NEXT FROM plan_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @plan_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n END;\r\n\r\n --Return this to the default\r\n SET LOCK_TIMEOUT -1;\r\n\r\n CLOSE plan_cursor;\r\n DEALLOCATE plan_cursor;\r\n END;\r\n\r\n IF\r\n @get_locks = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[locks|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE locks_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT DISTINCT\r\n database_name\r\n FROM #locks\r\n WHERE\r\n EXISTS\r\n (\r\n SELECT *\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = #locks.session_id\r\n AND recursion = 1\r\n )\r\n AND database_name <> '(null)'\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN locks_cursor;\r\n\r\n FETCH NEXT FROM locks_cursor\r\n INTO\r\n @database_name;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n SET @sql_n = CONVERT(NVARCHAR(MAX), N'') + N'\r\n UPDATE l\r\n SET\r\n object_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n o.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n index_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n i.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n schema_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n s.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n principal_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n dp.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n )\r\n FROM #locks AS l\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.allocation_units AS au ON\r\n au.allocation_unit_id = l.allocation_unit_id\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.partitions AS p ON\r\n p.hobt_id =\r\n COALESCE\r\n (\r\n l.hobt_id,\r\n CASE\r\n WHEN au.type IN (1, 3) THEN au.container_id\r\n ELSE NULL\r\n END\r\n )\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.partitions AS p1 ON\r\n l.hobt_id IS NULL\r\n AND au.type = 2\r\n AND p1.partition_id = au.container_id\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.objects AS o ON\r\n o.object_id = COALESCE(l.object_id, p.object_id, p1.object_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.indexes AS i ON\r\n i.object_id = COALESCE(l.object_id, p.object_id, p1.object_id)\r\n AND i.index_id = COALESCE(l.index_id, p.index_id, p1.index_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.schemas AS s ON\r\n s.schema_id = COALESCE(l.schema_id, o.schema_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.database_principals AS dp ON\r\n dp.principal_id = l.principal_id\r\n WHERE\r\n l.database_name = @database_name\r\n OPTION (KEEPFIXED PLAN); ';\r\n\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@database_name sysname',\r\n @database_name;\r\n END TRY\r\n BEGIN CATCH;\r\n UPDATE #locks\r\n SET\r\n query_error =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n ERROR_MESSAGE() COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n )\r\n WHERE\r\n database_name = @database_name\r\n OPTION (KEEPFIXED PLAN);\r\n END CATCH;\r\n\r\n FETCH NEXT FROM locks_cursor\r\n INTO\r\n @database_name;\r\n END;\r\n\r\n CLOSE locks_cursor;\r\n DEALLOCATE locks_cursor;\r\n\r\n CREATE CLUSTERED INDEX IX_SRD ON #locks (session_id, request_id, database_name);\r\n\r\n UPDATE s\r\n SET\r\n s.locks =\r\n (\r\n SELECT\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n l1.database_name COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [Database/@name],\r\n MIN(l1.query_error) AS [Database/@query_error],\r\n (\r\n SELECT\r\n l2.request_mode AS [Lock/@request_mode],\r\n l2.request_status AS [Lock/@request_status],\r\n COUNT(*) AS [Lock/@request_count]\r\n FROM #locks AS l2\r\n WHERE\r\n l1.session_id = l2.session_id\r\n AND l1.request_id = l2.request_id\r\n AND l2.database_name = l1.database_name\r\n AND l2.resource_type = 'DATABASE'\r\n GROUP BY\r\n l2.request_mode,\r\n l2.request_status\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ) AS [Database/Locks],\r\n (\r\n SELECT\r\n COALESCE(l3.object_name, '(null)') AS [Object/@name],\r\n l3.schema_name AS [Object/@schema_name],\r\n (\r\n SELECT\r\n l4.resource_type AS [Lock/@resource_type],\r\n l4.page_type AS [Lock/@page_type],\r\n l4.index_name AS [Lock/@index_name],\r\n CASE\r\n WHEN l4.object_name IS NULL THEN l4.schema_name\r\n ELSE NULL\r\n END AS [Lock/@schema_name],\r\n l4.principal_name AS [Lock/@principal_name],\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n l4.resource_description COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [Lock/@resource_description],\r\n l4.request_mode AS [Lock/@request_mode],\r\n l4.request_status AS [Lock/@request_status],\r\n SUM(l4.request_count) AS [Lock/@request_count]\r\n FROM #locks AS l4\r\n WHERE\r\n l4.session_id = l3.session_id\r\n AND l4.request_id = l3.request_id\r\n AND l3.database_name = l4.database_name\r\n AND COALESCE(l3.object_name, '(null)') = COALESCE(l4.object_name, '(null)')\r\n AND COALESCE(l3.schema_name, '') = COALESCE(l4.schema_name, '')\r\n AND l4.resource_type <> 'DATABASE'\r\n GROUP BY\r\n l4.resource_type,\r\n l4.page_type,\r\n l4.index_name,\r\n CASE\r\n WHEN l4.object_name IS NULL THEN l4.schema_name\r\n ELSE NULL\r\n END,\r\n l4.principal_name,\r\n l4.resource_description,\r\n l4.request_mode,\r\n l4.request_status\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ) AS [Object/Locks]\r\n FROM #locks AS l3\r\n WHERE\r\n l3.session_id = l1.session_id\r\n AND l3.request_id = l1.request_id\r\n AND l3.database_name = l1.database_name\r\n AND l3.resource_type <> 'DATABASE'\r\n GROUP BY\r\n l3.session_id,\r\n l3.request_id,\r\n l3.database_name,\r\n COALESCE(l3.object_name, '(null)'),\r\n l3.schema_name\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ) AS [Database/Objects]\r\n FROM #locks AS l1\r\n WHERE\r\n l1.session_id = s.session_id\r\n AND l1.request_id = s.request_id\r\n AND l1.start_time IN (s.start_time, s.last_request_start_time)\r\n AND s.recursion = 1\r\n GROUP BY\r\n l1.session_id,\r\n l1.request_id,\r\n l1.database_name\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n )\r\n FROM #sessions s\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n\r\n IF\r\n @find_block_leaders = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[blocked_session_count|]%' ESCAPE '|'\r\n BEGIN;\r\n WITH\r\n blockers AS\r\n (\r\n SELECT\r\n session_id,\r\n session_id AS top_level_session_id,\r\n CONVERT(VARCHAR(8000), '.' + CONVERT(VARCHAR(8000), session_id) + '.') AS the_path\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n\r\n UNION ALL\r\n\r\n SELECT\r\n s.session_id,\r\n b.top_level_session_id,\r\n CONVERT(VARCHAR(8000), b.the_path + CONVERT(VARCHAR(8000), s.session_id) + '.') AS the_path\r\n FROM blockers AS b\r\n JOIN #sessions AS s ON\r\n s.blocking_session_id = b.session_id\r\n AND s.recursion = 1\r\n AND b.the_path NOT LIKE '%.' + CONVERT(VARCHAR(8000), s.session_id) + '.%' COLLATE Latin1_General_Bin2\r\n )\r\n UPDATE s\r\n SET\r\n s.blocked_session_count = x.blocked_session_count\r\n FROM #sessions AS s\r\n JOIN\r\n (\r\n SELECT\r\n b.top_level_session_id AS session_id,\r\n COUNT(*) - 1 AS blocked_session_count\r\n FROM blockers AS b\r\n GROUP BY\r\n b.top_level_session_id\r\n ) x ON\r\n s.session_id = x.session_id\r\n WHERE\r\n s.recursion = 1;\r\n END;\r\n\r\n IF\r\n @get_task_info = 2\r\n AND @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n BEGIN;\r\n CREATE TABLE #blocked_requests\r\n (\r\n session_id SMALLINT NOT NULL,\r\n request_id INT NOT NULL,\r\n database_name sysname NOT NULL,\r\n object_id INT,\r\n hobt_id BIGINT,\r\n schema_id INT,\r\n schema_name sysname NULL,\r\n object_name sysname NULL,\r\n query_error NVARCHAR(2048),\r\n PRIMARY KEY (database_name, session_id, request_id)\r\n );\r\n\r\n CREATE STATISTICS s_database_name ON #blocked_requests (database_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_schema_name ON #blocked_requests (schema_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_object_name ON #blocked_requests (object_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_query_error ON #blocked_requests (query_error)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n \r\n INSERT #blocked_requests\r\n (\r\n session_id,\r\n request_id,\r\n database_name,\r\n object_id,\r\n hobt_id,\r\n schema_id\r\n )\r\n SELECT\r\n session_id,\r\n request_id,\r\n database_name,\r\n object_id,\r\n hobt_id,\r\n CONVERT(INT, SUBSTRING(schema_node, CHARINDEX(' = ', schema_node) + 3, LEN(schema_node))) AS schema_id\r\n FROM\r\n (\r\n SELECT\r\n session_id,\r\n request_id,\r\n agent_nodes.agent_node.value('(database_name/text())[1]', 'sysname') AS database_name,\r\n agent_nodes.agent_node.value('(object_id/text())[1]', 'int') AS object_id,\r\n agent_nodes.agent_node.value('(hobt_id/text())[1]', 'bigint') AS hobt_id,\r\n agent_nodes.agent_node.value('(metadata_resource/text()[.=\"SCHEMA\"]/../../metadata_class_id/text())[1]', 'varchar(100)') AS schema_node\r\n FROM #sessions AS s\r\n CROSS APPLY s.additional_info.nodes('//block_info') AS agent_nodes (agent_node)\r\n WHERE\r\n s.recursion = 1\r\n ) AS t\r\n WHERE\r\n t.database_name IS NOT NULL\r\n AND\r\n (\r\n t.object_id IS NOT NULL\r\n OR t.hobt_id IS NOT NULL\r\n OR t.schema_node IS NOT NULL\r\n );\r\n \r\n DECLARE blocks_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT DISTINCT\r\n database_name\r\n FROM #blocked_requests;\r\n \r\n OPEN blocks_cursor;\r\n \r\n FETCH NEXT FROM blocks_cursor\r\n INTO\r\n @database_name;\r\n \r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n SET @sql_n =\r\n CONVERT(NVARCHAR(MAX), N'') + N'\r\n UPDATE b\r\n SET\r\n b.schema_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n s.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n b.object_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n o.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n )\r\n FROM #blocked_requests AS b\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.partitions AS p ON\r\n p.hobt_id = b.hobt_id\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.objects AS o ON\r\n o.object_id = COALESCE(p.object_id, b.object_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.schemas AS s ON\r\n s.schema_id = COALESCE(o.schema_id, b.schema_id)\r\n WHERE\r\n b.database_name = @database_name; ';\r\n \r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@database_name sysname',\r\n @database_name;\r\n END TRY\r\n BEGIN CATCH;\r\n UPDATE #blocked_requests\r\n SET\r\n query_error =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n ERROR_MESSAGE() COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n )\r\n WHERE\r\n database_name = @database_name;\r\n END CATCH;\r\n\r\n FETCH NEXT FROM blocks_cursor\r\n INTO\r\n @database_name;\r\n END;\r\n \r\n CLOSE blocks_cursor;\r\n DEALLOCATE blocks_cursor;\r\n \r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n ('\r\n insert {sql:column(\"b.schema_name\")}\r\n as last\r\n into (/additional_info/block_info)[1]\r\n ')\r\n FROM #sessions AS s\r\n INNER JOIN #blocked_requests AS b ON\r\n b.session_id = s.session_id\r\n AND b.request_id = s.request_id\r\n AND s.recursion = 1\r\n WHERE\r\n b.schema_name IS NOT NULL;\r\n\r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n ('\r\n insert {sql:column(\"b.object_name\")}\r\n as last\r\n into (/additional_info/block_info)[1]\r\n ')\r\n FROM #sessions AS s\r\n INNER JOIN #blocked_requests AS b ON\r\n b.session_id = s.session_id\r\n AND b.request_id = s.request_id\r\n AND s.recursion = 1\r\n WHERE\r\n b.object_name IS NOT NULL;\r\n\r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n ('\r\n insert {sql:column(\"b.query_error\")}\r\n as last\r\n into (/additional_info/block_info)[1]\r\n ')\r\n FROM #sessions AS s\r\n INNER JOIN #blocked_requests AS b ON\r\n b.session_id = s.session_id\r\n AND b.request_id = s.request_id\r\n AND s.recursion = 1\r\n WHERE\r\n b.query_error IS NOT NULL;\r\n END;\r\n\r\n IF\r\n @output_column_list LIKE '%|[program_name|]%' ESCAPE '|'\r\n AND @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n AND DB_ID('msdb') IS NOT NULL\r\n BEGIN;\r\n SET @sql_n =\r\n N'BEGIN TRY;\r\n DECLARE @job_name sysname;\r\n SET @job_name = NULL;\r\n DECLARE @step_name sysname;\r\n SET @step_name = NULL;\r\n\r\n SELECT\r\n @job_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n j.name,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''?''\r\n ),\r\n @step_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n s.step_name,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''?''\r\n )\r\n FROM msdb.dbo.sysjobs AS j\r\n INNER JOIN msdb.dbo.sysjobsteps AS s ON\r\n j.job_id = s.job_id\r\n WHERE\r\n j.job_id = @job_id\r\n AND s.step_id = @step_id;\r\n\r\n IF @job_name IS NOT NULL\r\n BEGIN;\r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n (''\r\n insert text{sql:variable(\"@job_name\")}\r\n into (/additional_info/agent_job_info/job_name)[1]\r\n '')\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n \r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n (''\r\n insert text{sql:variable(\"@step_name\")}\r\n into (/additional_info/agent_job_info/step_name)[1]\r\n '')\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n END TRY\r\n BEGIN CATCH;\r\n DECLARE @msdb_error_message NVARCHAR(256);\r\n SET @msdb_error_message = ERROR_MESSAGE();\r\n \r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n (''\r\n insert {sql:variable(\"@msdb_error_message\")}\r\n as last\r\n into (/additional_info/agent_job_info)[1]\r\n '')\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END CATCH;'\r\n\r\n DECLARE @job_id UNIQUEIDENTIFIER;\r\n DECLARE @step_id INT;\r\n\r\n DECLARE agent_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n s.session_id,\r\n agent_nodes.agent_node.value('(job_id/text())[1]', 'uniqueidentifier') AS job_id,\r\n agent_nodes.agent_node.value('(step_id/text())[1]', 'int') AS step_id\r\n FROM #sessions AS s\r\n CROSS APPLY s.additional_info.nodes('//agent_job_info') AS agent_nodes (agent_node)\r\n WHERE\r\n s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n \r\n OPEN agent_cursor;\r\n\r\n FETCH NEXT FROM agent_cursor\r\n INTO\r\n @session_id,\r\n @job_id,\r\n @step_id;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@job_id UNIQUEIDENTIFIER, @step_id INT, @session_id SMALLINT',\r\n @job_id, @step_id, @session_id\r\n\r\n FETCH NEXT FROM agent_cursor\r\n INTO\r\n @session_id,\r\n @job_id,\r\n @step_id;\r\n END;\r\n\r\n CLOSE agent_cursor;\r\n DEALLOCATE agent_cursor;\r\n END;\r\n \r\n IF\r\n @delta_interval > 0\r\n AND @recursion <> 1\r\n BEGIN;\r\n SET @recursion = 1;\r\n\r\n DECLARE @delay_time CHAR(12);\r\n SET @delay_time = CONVERT(VARCHAR, DATEADD(second, @delta_interval, 0), 114);\r\n WAITFOR DELAY @delay_time;\r\n\r\n GOTO REDO;\r\n END;\r\n END;\r\n\r\n DECLARE\r\n @num_data_threshold MONEY,\r\n @num_col_fmt NVARCHAR(MAX),\r\n @num_delta_col_fmt NVARCHAR(MAX);\r\n\r\n SET @num_data_threshold = 919919919919919;\r\n SET @num_col_fmt =\r\n CASE @format_output\r\n WHEN 1 THEN N'\r\n CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, [col_name]))) OVER() - LEN(CONVERT(VARCHAR, [col_name]))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) AS '\r\n WHEN 2 THEN N'\r\n CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) AS '\r\n ELSE N''\r\n END + N'[col_name], ';\r\n SET @num_delta_col_fmt =\r\n N'\r\n CASE\r\n WHEN\r\n first_request_start_time = last_request_start_time\r\n AND num_events = 2\r\n AND [col_name] >= 0\r\n THEN ' +\r\n CASE @format_output\r\n WHEN 1 THEN N'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, [col_name]))) OVER() - LEN(CONVERT(VARCHAR, [col_name]))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) '\r\n WHEN 2 THEN N'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) '\r\n ELSE N'[col_name] '\r\n END + N'\r\n ELSE NULL\r\n END AS [col_name], ';\r\n\r\n SET @sql_n = CONVERT(NVARCHAR(MAX), N'') +\r\n --Outer column list\r\n CASE\r\n WHEN\r\n @destination_table <> ''\r\n AND @return_schema = 0\r\n THEN N'INSERT ' + @destination_table + ' '\r\n ELSE N''\r\n END +\r\n N'SELECT ' +\r\n @output_column_list + N' ' +\r\n CASE @return_schema\r\n WHEN 1 THEN N'INTO #session_schema '\r\n ELSE N''\r\n END\r\n --End outer column list\r\n +\r\n --Inner column list\r\n N'\r\n FROM\r\n (\r\n SELECT\r\n session_id, ' +\r\n --[dd hh:mm:ss.mss]\r\n CASE\r\n WHEN @format_output IN (1, 2) THEN\r\n N'\r\n CASE\r\n WHEN elapsed_time < 0 THEN\r\n RIGHT\r\n (\r\n REPLICATE(''0'', max_elapsed_length) + CONVERT(VARCHAR, (-1 * elapsed_time) / 86400),\r\n max_elapsed_length\r\n ) +\r\n RIGHT\r\n (\r\n CONVERT(VARCHAR, DATEADD(second, (-1 * elapsed_time), 0), 120),\r\n 9\r\n ) +\r\n ''.000''\r\n ELSE\r\n RIGHT\r\n (\r\n REPLICATE(''0'', max_elapsed_length) + CONVERT(VARCHAR, elapsed_time / 86400000),\r\n max_elapsed_length\r\n ) +\r\n RIGHT\r\n (\r\n CONVERT(VARCHAR, DATEADD(second, elapsed_time / 1000, 0), 120),\r\n 9\r\n ) +\r\n ''.'' +\r\n RIGHT(''000'' + CONVERT(VARCHAR, elapsed_time % 1000), 3)\r\n END AS [dd hh:mm:ss.mss], '\r\n ELSE\r\n N''\r\n END +\r\n --[dd hh:mm:ss.mss (avg)] / avg_elapsed_time\r\n CASE\r\n WHEN @format_output IN (1, 2) THEN\r\n N'\r\n RIGHT\r\n (\r\n ''00'' + CONVERT(VARCHAR, avg_elapsed_time / 86400000),\r\n 2\r\n ) +\r\n RIGHT\r\n (\r\n CONVERT(VARCHAR, DATEADD(second, avg_elapsed_time / 1000, 0), 120),\r\n 9\r\n ) +\r\n ''.'' +\r\n RIGHT(''000'' + CONVERT(VARCHAR, avg_elapsed_time % 1000), 3) AS [dd hh:mm:ss.mss (avg)], '\r\n ELSE\r\n N'avg_elapsed_time, '\r\n END +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'physical_io') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'reads') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'physical_reads') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'writes') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'tempdb_allocations') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'tempdb_current') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'CPU') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'context_switches') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'used_memory') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'max_used_memory') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'requested_memory') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'granted_memory') +\r\n CASE\r\n WHEN @output_column_list LIKE '%|_delta|]%' ESCAPE '|' THEN\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'physical_io_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'reads_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'physical_reads_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'writes_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'tempdb_allocations_delta') +\r\n --this is the only one that can (legitimately) go negative\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'tempdb_current_delta') +\r\n --CPU_delta\r\n --leaving this one hardcoded, as there is a bit of different interaction here\r\n N'\r\n CASE\r\n WHEN\r\n first_request_start_time = last_request_start_time\r\n AND num_events = 2\r\n THEN\r\n CASE\r\n WHEN\r\n thread_CPU_delta > CPU_delta\r\n AND thread_CPU_delta > 0\r\n THEN ' +\r\n CASE @format_output\r\n WHEN 1 THEN N'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, thread_CPU_delta + CPU_delta))) OVER() - LEN(CONVERT(VARCHAR, thread_CPU_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN thread_CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE thread_CPU_delta END), 1), 19)) '\r\n WHEN 2 THEN N'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN thread_CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE thread_CPU_delta END), 1), 19)) '\r\n ELSE N'thread_CPU_delta '\r\n END + N'\r\n WHEN CPU_delta >= 0 THEN ' +\r\n CASE @format_output\r\n WHEN 1 THEN N'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, thread_CPU_delta + CPU_delta))) OVER() - LEN(CONVERT(VARCHAR, CPU_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE CPU_delta END), 1), 19)) '\r\n WHEN 2 THEN N'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE CPU_delta END), 1), 19)) '\r\n ELSE N'CPU_delta '\r\n END + N'\r\n ELSE NULL\r\n END\r\n ELSE\r\n NULL\r\n END AS CPU_delta, ' +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'context_switches_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'used_memory_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'max_used_memory_delta')\r\n ELSE N''\r\n END + N'\r\n ' +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'tasks') + N'\r\n status,\r\n wait_info,\r\n locks,\r\n tran_start_time,\r\n LEFT(tran_log_writes, LEN(tran_log_writes) - 1) AS tran_log_writes,\r\n implicit_tran, ' +\r\n REPLACE(@num_col_fmt, '[col_name]', 'open_tran_count') + N'\r\n ' +\r\n --sql_command\r\n CASE @format_output\r\n WHEN 0 THEN N'REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), sql_command), '''', '''') AS '\r\n ELSE N''\r\n END + N'sql_command,\r\n ' +\r\n --sql_text\r\n CASE @format_output\r\n WHEN 0 THEN N'REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), sql_text), '''', '''') AS '\r\n ELSE N''\r\n END + N'sql_text,\r\n query_plan,\r\n blocking_session_id, ' +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'blocked_session_count') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'percent_complete') + N'\r\n host_name,\r\n login_name,\r\n database_name,\r\n program_name,\r\n additional_info,\r\n memory_info,\r\n start_time,\r\n login_time,\r\n CASE\r\n WHEN status = N''sleeping'' THEN NULL\r\n ELSE request_id\r\n END AS request_id,\r\n GETDATE() AS collection_time '\r\n --End inner column list\r\n +\r\n --Derived table and INSERT specification\r\n N'\r\n FROM\r\n (\r\n SELECT TOP(2147483647)\r\n *,\r\n CASE\r\n MAX\r\n (\r\n LEN\r\n (\r\n CONVERT\r\n (\r\n VARCHAR,\r\n CASE\r\n WHEN elapsed_time < 0 THEN\r\n (-1 * elapsed_time) / 86400\r\n ELSE\r\n elapsed_time / 86400000\r\n END\r\n )\r\n )\r\n ) OVER ()\r\n WHEN 1 THEN 2\r\n ELSE\r\n MAX\r\n (\r\n LEN\r\n (\r\n CONVERT\r\n (\r\n VARCHAR,\r\n CASE\r\n WHEN elapsed_time < 0 THEN\r\n (-1 * elapsed_time) / 86400\r\n ELSE\r\n elapsed_time / 86400000\r\n END\r\n )\r\n )\r\n ) OVER ()\r\n END AS max_elapsed_length, ' +\r\n CASE\r\n WHEN @output_column_list LIKE '%|_delta|]%' ESCAPE '|' THEN\r\n N'\r\n MAX(physical_io * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(physical_io * recursion) OVER (PARTITION BY session_id, request_id) AS physical_io_delta,\r\n MAX(reads * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(reads * recursion) OVER (PARTITION BY session_id, request_id) AS reads_delta,\r\n MAX(physical_reads * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(physical_reads * recursion) OVER (PARTITION BY session_id, request_id) AS physical_reads_delta,\r\n MAX(writes * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(writes * recursion) OVER (PARTITION BY session_id, request_id) AS writes_delta,\r\n MAX(tempdb_allocations * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(tempdb_allocations * recursion) OVER (PARTITION BY session_id, request_id) AS tempdb_allocations_delta,\r\n MAX(tempdb_current * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(tempdb_current * recursion) OVER (PARTITION BY session_id, request_id) AS tempdb_current_delta,\r\n MAX(CPU * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(CPU * recursion) OVER (PARTITION BY session_id, request_id) AS CPU_delta,\r\n MAX(thread_CPU_snapshot * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(thread_CPU_snapshot * recursion) OVER (PARTITION BY session_id, request_id) AS thread_CPU_delta,\r\n MAX(context_switches * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(context_switches * recursion) OVER (PARTITION BY session_id, request_id) AS context_switches_delta,\r\n MAX(used_memory * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(used_memory * recursion) OVER (PARTITION BY session_id, request_id) AS used_memory_delta,\r\n MAX(max_used_memory * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(max_used_memory * recursion) OVER (PARTITION BY session_id, request_id) AS max_used_memory_delta,\r\n MIN(last_request_start_time) OVER (PARTITION BY session_id, request_id) AS first_request_start_time, '\r\n ELSE N''\r\n END + N'\r\n COUNT(*) OVER (PARTITION BY session_id, request_id) AS num_events\r\n FROM #sessions AS s1 ' +\r\n CASE\r\n WHEN @sort_order = '' THEN N''\r\n ELSE\r\n N'\r\n ORDER BY ' +\r\n CONVERT(NVARCHAR(MAX), @sort_order)\r\n END +\r\n N'\r\n ) AS s\r\n WHERE\r\n s.recursion = 1\r\n ) x\r\n OPTION (KEEPFIXED PLAN);\r\n ' +\r\n CASE @return_schema\r\n WHEN 1 THEN\r\n N'\r\n SET @schema =\r\n ''CREATE TABLE ( '' +\r\n STUFF\r\n (\r\n (\r\n SELECT\r\n '','' +\r\n QUOTENAME(COLUMN_NAME) + '' '' +\r\n DATA_TYPE +\r\n CASE\r\n WHEN DATA_TYPE LIKE ''%char'' THEN ''('' + COALESCE(NULLIF(CONVERT(VARCHAR, CHARACTER_MAXIMUM_LENGTH), ''-1''), ''max'') + '') ''\r\n ELSE '' ''\r\n END +\r\n CASE IS_NULLABLE\r\n WHEN ''NO'' THEN ''NOT ''\r\n ELSE ''''\r\n END + ''NULL'' AS [text()]\r\n FROM tempdb.INFORMATION_SCHEMA.COLUMNS\r\n WHERE\r\n TABLE_NAME = (SELECT name FROM tempdb.sys.objects WHERE object_id = OBJECT_ID(''tempdb..#session_schema''))\r\n ORDER BY\r\n ORDINAL_POSITION\r\n FOR XML\r\n PATH('''')\r\n ), +\r\n 1,\r\n 1,\r\n ''''\r\n ) +\r\n '');''; '\r\n ELSE N''\r\n END;\r\n --End derived table and INSERT specification\r\n\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@num_data_threshold MONEY, @schema VARCHAR(MAX) OUTPUT',\r\n @num_data_threshold, @schema OUTPUT;\r\nEND;\r\nGO\r\n\r\nEXEC master.dbo.sp_whoisactive\r\n    @get_additional_info=0,@get_task_info=1, @output_column_list='[percent_complete][status][database_name][dd%][session_id][blocking_session_id][blocked_session_count][sql_text][sql_command][query_plan][login_name][wait_info][host_name][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][locks][%]', @format_output=1\r\n    ,@get_plans=0\r\n    ,@get_outer_command=1\r\n    ,@get_locks = 0\r\n    ,@find_block_leaders = 1\t\r\n    ,@sort_order = '[blocked_session_count] DESC,[session_id] ASC, [dd hh:mm:ss.mss] DESC';\r\nGO\r\n$CURSOR$\r\n\r\nIF OBJECT_ID('dbo.sp_whoisactive') IS NOT NULL \r\n\tDROP PROCEDURE dbo.sp_whoisactive;\r\nGO" +{ + "id": "300173f4-302f-4816-b1ac-58a1fe45acf9", + "prefix": "wac", + "description": "sp_whoIsActive for a pos (works in master db)", + "body": "USE master\r\nIF OBJECT_ID('dbo.sp_whoisactive') IS NOT NULL \r\n\tDROP PROCEDURE dbo.sp_whoisactive;\r\nGO\r\n\r\nGO\r\nSET QUOTED_IDENTIFIER ON;\r\nSET ANSI_PADDING ON;\r\nSET CONCAT_NULL_YIELDS_NULL ON;\r\nSET ANSI_WARNINGS ON;\r\nSET NUMERIC_ROUNDABORT OFF;\r\nSET ARITHABORT ON;\r\nGO\r\n\r\nIF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'sp_WhoIsActive')\r\n EXEC ('CREATE PROC dbo.sp_WhoIsActive AS SELECT ''stub version, to be replaced''')\r\nGO\r\n\r\n/*********************************************************************************************\r\nWho Is Active? v12.00 (2021-11-10)\r\n(C) 2007-2021, Adam Machanic\r\n\r\nFeedback: https://github.com/amachanic/sp_whoisactive/issues\r\nReleases: https://github.com/amachanic/sp_whoisactive/releases\r\nDocs: http://whoisactive.com\r\n\r\nLicense:\r\n https://github.com/amachanic/sp_whoisactive/blob/master/LICENSE\r\n*********************************************************************************************/\r\nALTER PROC dbo.sp_WhoIsActive\r\n(\r\n--~\r\n --Filters--Both inclusive and exclusive\r\n --Set either filter to '' to disable\r\n --Valid filter types are: session, program, database, login, and host\r\n --Session is a session ID, and either 0 or '' can be used to indicate \"all\" sessions\r\n --All other filter types support % or _ as wildcards\r\n @filter sysname = '',\r\n @filter_type VARCHAR(10) = 'session',\r\n @not_filter sysname = '',\r\n @not_filter_type VARCHAR(10) = 'session',\r\n\r\n --Retrieve data about the calling session?\r\n @show_own_spid BIT = 0,\r\n\r\n --Retrieve data about system sessions?\r\n @show_system_spids BIT = 0,\r\n\r\n --Controls how sleeping SPIDs are handled, based on the idea of levels of interest\r\n --0 does not pull any sleeping SPIDs\r\n --1 pulls only those sleeping SPIDs that also have an open transaction\r\n --2 pulls all sleeping SPIDs\r\n @show_sleeping_spids TINYINT = 1,\r\n\r\n --If 1, gets the full stored procedure or running batch, when available\r\n --If 0, gets only the actual statement that is currently running in the batch or procedure\r\n @get_full_inner_text BIT = 0,\r\n\r\n --Get associated query plans for running tasks, if available\r\n --If @get_plans = 1, gets the plan based on the request's statement offset\r\n --If @get_plans = 2, gets the entire plan based on the request's plan_handle\r\n @get_plans TINYINT = 0,\r\n\r\n --Get the associated outer ad hoc query or stored procedure call, if available\r\n @get_outer_command BIT = 0,\r\n\r\n --Enables pulling transaction log write info, transaction duration, and the\r\n --implicit_transaction identification column\r\n @get_transaction_info BIT = 0,\r\n\r\n --Get information on active tasks, based on three interest levels\r\n --Level 0 does not pull any task-related information\r\n --Level 1 is a lightweight mode that pulls the top non-CXPACKET wait, giving preference to blockers\r\n --Level 2 pulls all available task-based metrics, including:\r\n --number of active tasks, current wait stats, physical I/O, context switches, and blocker information\r\n @get_task_info TINYINT = 1,\r\n\r\n --Gets associated locks for each request, aggregated in an XML format\r\n @get_locks BIT = 0,\r\n\r\n --Get average time for past runs of an active query\r\n --(based on the combination of plan handle, sql handle, and offset)\r\n @get_avg_time BIT = 0,\r\n\r\n --Get additional non-performance-related information about the session or request\r\n --text_size, language, date_format, date_first, quoted_identifier, arithabort, ansi_null_dflt_on,\r\n --ansi_defaults, ansi_warnings, ansi_padding, ansi_nulls, concat_null_yields_null,\r\n --transaction_isolation_level, lock_timeout, deadlock_priority, row_count, command_type\r\n --\r\n --If a SQL Agent job is running, an subnode called agent_info will be populated with some or all of\r\n --the following: job_id, job_name, step_id, step_name, msdb_query_error (in the event of an error)\r\n --\r\n --If @get_task_info is set to 2 and a lock wait is detected, a subnode called block_info will be\r\n --populated with some or all of the following: lock_type, database_name, object_id, file_id, hobt_id,\r\n --applock_hash, metadata_resource, metadata_class_id, object_name, schema_name\r\n @get_additional_info BIT = 0,\r\n\r\n --Get additional information related to workspace memory\r\n --requested_memory, granted_memory, max_used_memory, and memory_info.\r\n --\r\n --Not available for SQL Server 2005.\r\n @get_memory_info BIT = 0,\r\n\r\n --Walk the blocking chain and count the number of\r\n --total SPIDs blocked all the way down by a given session\r\n --Also enables task_info Level 1, if @get_task_info is set to 0\r\n @find_block_leaders BIT = 0,\r\n\r\n --Pull deltas on various metrics\r\n --Interval in seconds to wait before doing the second data pull\r\n @delta_interval TINYINT = 0,\r\n\r\n --List of desired output columns, in desired order\r\n --Note that the final output will be the intersection of all enabled features and all\r\n --columns in the list. Therefore, only columns associated with enabled features will\r\n --actually appear in the output. Likewise, removing columns from this list may effectively\r\n --disable features, even if they are turned on\r\n --\r\n --Each element in this list must be one of the valid output column names. Names must be\r\n --delimited by square brackets. White space, formatting, and additional characters are\r\n --allowed, as long as the list contains exact matches of delimited valid column names.\r\n @output_column_list VARCHAR(8000) = '[dd%][session_id][sql_text][sql_command][login_name][wait_info][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][query_plan][locks][%]',\r\n\r\n --Column(s) by which to sort output, optionally with sort directions.\r\n --Valid column choices:\r\n --session_id, physical_io, reads, physical_reads, writes, tempdb_allocations,\r\n --tempdb_current, CPU, context_switches, used_memory, physical_io_delta, reads_delta,\r\n --physical_reads_delta, writes_delta, tempdb_allocations_delta, tempdb_current_delta,\r\n --CPU_delta, context_switches_delta, used_memory_delta, tasks, tran_start_time,\r\n --open_tran_count, blocking_session_id, blocked_session_count, percent_complete,\r\n --host_name, login_name, database_name, start_time, login_time, program_name\r\n --\r\n --Note that column names in the list must be bracket-delimited. Commas and/or white\r\n --space are not required.\r\n @sort_order VARCHAR(500) = '[start_time] ASC',\r\n\r\n --Formats some of the output columns in a more \"human readable\" form\r\n --0 disables outfput format\r\n --1 formats the output for variable-width fonts\r\n --2 formats the output for fixed-width fonts\r\n @format_output TINYINT = 1,\r\n\r\n --If set to a non-blank value, the script will attempt to insert into the specified\r\n --destination table. Please note that the script will not verify that the table exists,\r\n --or that it has the correct schema, before doing the insert.\r\n --Table can be specified in one, two, or three-part format\r\n @destination_table VARCHAR(4000) = '',\r\n\r\n --If set to 1, no data collection will happen and no result set will be returned; instead,\r\n --a CREATE TABLE statement will be returned via the @schema parameter, which will match\r\n --the schema of the result set that would be returned by using the same collection of the\r\n --rest of the parameters. The CREATE TABLE statement will have a placeholder token of\r\n -- in place of an actual table name.\r\n @return_schema BIT = 0,\r\n @schema VARCHAR(MAX) = NULL OUTPUT,\r\n\r\n --Help! What do I do?\r\n @help BIT = 0\r\n--~\r\n)\r\n/*\r\nOUTPUT COLUMNS\r\n--------------\r\nFormatted/Non: [session_id] [smallint] NOT NULL\r\n Session ID (a.k.a. SPID)\r\n\r\nFormatted: [dd hh:mm:ss.mss] [varchar](15) NULL\r\nNon-Formatted: \r\n For an active request, time the query has been running\r\n For a sleeping session, time since the last batch completed\r\n\r\nFormatted: [dd hh:mm:ss.mss (avg)] [varchar](15) NULL\r\nNon-Formatted: [avg_elapsed_time] [int] NULL\r\n (Requires @get_avg_time option)\r\n How much time has the active portion of the query taken in the past, on average?\r\n\r\nFormatted: [physical_io] [varchar](30) NULL\r\nNon-Formatted: [physical_io] [bigint] NULL\r\n Shows the number of physical I/Os, for active requests\r\n\r\nFormatted: [reads] [varchar](30) NULL\r\nNon-Formatted: [reads] [bigint] NULL\r\n For an active request, number of reads done for the current query\r\n For a sleeping session, total number of reads done over the lifetime of the session\r\n\r\nFormatted: [physical_reads] [varchar](30) NULL\r\nNon-Formatted: [physical_reads] [bigint] NULL\r\n For an active request, number of physical reads done for the current query\r\n For a sleeping session, total number of physical reads done over the lifetime of the session\r\n\r\nFormatted: [writes] [varchar](30) NULL\r\nNon-Formatted: [writes] [bigint] NULL\r\n For an active request, number of writes done for the current query\r\n For a sleeping session, total number of writes done over the lifetime of the session\r\n\r\nFormatted: [tempdb_allocations] [varchar](30) NULL\r\nNon-Formatted: [tempdb_allocations] [bigint] NULL\r\n For an active request, number of TempDB writes done for the current query\r\n For a sleeping session, total number of TempDB writes done over the lifetime of the session\r\n\r\nFormatted: [tempdb_current] [varchar](30) NULL\r\nNon-Formatted: [tempdb_current] [bigint] NULL\r\n For an active request, number of TempDB pages currently allocated for the query\r\n For a sleeping session, number of TempDB pages currently allocated for the session\r\n\r\nFormatted: [CPU] [varchar](30) NULL\r\nNon-Formatted: [CPU] [bigint] NULL\r\n For an active request, total CPU time consumed by the current query\r\n For a sleeping session, total CPU time consumed over the lifetime of the session\r\n\r\nFormatted: [context_switches] [varchar](30) NULL\r\nNon-Formatted: [context_switches] [bigint] NULL\r\n Shows the number of context switches, for active requests\r\n\r\nFormatted: [used_memory] [varchar](30) NOT NULL\r\nNon-Formatted: [used_memory] [bigint] NOT NULL\r\n For an active request, total memory consumption for the current query\r\n For a sleeping session, total current memory consumption\r\n\r\nFormatted: [max_used_memory] [varchar](30) NULL\r\nNon-Formatted: [max_used_memory] [bigint] NULL\r\n (Requires @get_memory_info = 1)\r\n For an active request, the maximum amount of memory that has been used during\r\n processing up to the point of observation for the current query\r\n\r\nFormatted: [requested_memory] [varchar](30) NULL\r\nNon-Formatted: [requested_memory] [bigint] NULL\r\n (Requires @get_memory_info = 1)\r\n For an active request, the amount of memory requested by the query processor\r\n for hash, sort, and parallelism operations\r\n\r\nFormatted: [granted_memory] [varchar](30) NULL\r\nNon-Formatted: [granted_memory] [bigint] NULL\r\n (Requires @get_memory_info = 1)\r\n For an active request, the amount of memory granted to the query processor\r\n for hash, sort, and parallelism operations\r\n\r\nFormatted: [physical_io_delta] [varchar](30) NULL\r\nNon-Formatted: [physical_io_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of physical I/Os reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [reads_delta] [varchar](30) NULL\r\nNon-Formatted: [reads_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of reads reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [physical_reads_delta] [varchar](30) NULL\r\nNon-Formatted: [physical_reads_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of physical reads reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [writes_delta] [varchar](30) NULL\r\nNon-Formatted: [writes_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of writes reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [tempdb_allocations_delta] [varchar](30) NULL\r\nNon-Formatted: [tempdb_allocations_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of TempDB writes reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [tempdb_current_delta] [varchar](30) NULL\r\nNon-Formatted: [tempdb_current_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the number of allocated TempDB pages reported on the first and second\r\n collections. If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [CPU_delta] [varchar](30) NULL\r\nNon-Formatted: [CPU_delta] [int] NULL\r\n (Requires @delta_interval option)\r\n Difference between the CPU time reported on the first and second collections.\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [context_switches_delta] [varchar](30) NULL\r\nNon-Formatted: [context_switches_delta] [bigint] NULL\r\n (Requires @delta_interval option)\r\n Difference between the context switches count reported on the first and second collections\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [used_memory_delta] [varchar](30) NULL\r\nNon-Formatted: [used_memory_delta] [bigint] NULL\r\n Difference between the memory usage reported on the first and second collections\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [max_used_memory_delta] [varchar](30) NULL\r\nNon-Formatted: [max_used_memory_delta] [bigint] NULL\r\n Difference between the max memory usage reported on the first and second collections\r\n If the request started after the first collection, the value will be NULL\r\n\r\nFormatted: [tasks] [varchar](30) NULL\r\nNon-Formatted: [tasks] [smallint] NULL\r\n Number of worker tasks currently allocated, for active requests\r\n\r\nFormatted/Non: [status] [varchar](30) NOT NULL\r\n Activity status for the session (running, sleeping, etc)\r\n\r\nFormatted/Non: [wait_info] [nvarchar](4000) NULL\r\n Aggregates wait information, in the following format:\r\n (Ax: Bms/Cms/Dms)E\r\n A is the number of waiting tasks currently waiting on resource type E. B/C/D are wait\r\n times, in milliseconds. If only one thread is waiting, its wait time will be shown as B.\r\n If two tasks are waiting, each of their wait times will be shown (B/C). If three or more\r\n tasks are waiting, the minimum, average, and maximum wait times will be shown (B/C/D).\r\n If wait type E is a page latch wait and the page is of a \"special\" type (e.g. PFS, GAM, SGAM),\r\n the page type will be identified.\r\n If wait type E is CXPACKET, CXCONSUMER, CXSYNC_PORT, or CXSYNC_CONSUMER the nodeId from the\r\n query plan will be identified\r\n\r\nFormatted/Non: [locks] [xml] NULL\r\n (Requires @get_locks option)\r\n Aggregates lock information, in XML format.\r\n The lock XML includes the lock mode, locked object, and aggregates the number of requests.\r\n Attempts are made to identify locked objects by name\r\n\r\nFormatted/Non: [tran_start_time] [datetime] NULL\r\n (Requires @get_transaction_info option)\r\n Date and time that the first transaction opened by a session caused a transaction log\r\n write to occur.\r\n\r\nFormatted/Non: [tran_log_writes] [nvarchar](4000) NULL\r\n (Requires @get_transaction_info option)\r\n Aggregates transaction log write information, in the following format:\r\n A:wB (C kB)\r\n A is a database that has been touched by an active transaction\r\n B is the number of log writes that have been made in the database as a result of the transaction\r\n C is the number of log kilobytes consumed by the log records\r\n\r\nFormatted/Non: [implicit_tran] [nvarchar](3) NULL\r\n (Requires @get_transaction_info option)\r\n For active read-write transactions, returns on \"ON\" the transaction has been started as a result\r\n of the session using the implicit_transactions option, or \"OFF\" otherwise.\r\n\r\nFormatted: [open_tran_count] [varchar](30) NULL\r\nNon-Formatted: [open_tran_count] [smallint] NULL\r\n Shows the number of open transactions the session has open\r\n\r\nFormatted: [sql_command] [xml] NULL\r\nNon-Formatted: [sql_command] [nvarchar](max) NULL\r\n (Requires @get_outer_command option)\r\n Shows the \"outer\" SQL command, i.e. the text of the batch or RPC sent to the server,\r\n if available\r\n\r\nFormatted: [sql_text] [xml] NULL\r\nNon-Formatted: [sql_text] [nvarchar](max) NULL\r\n Shows the SQL text for active requests or the last statement executed\r\n for sleeping sessions, if available in either case.\r\n If @get_full_inner_text option is set, shows the full text of the batch.\r\n Otherwise, shows only the active statement within the batch.\r\n If the query text is locked, a special timeout message will be sent, in the following format:\r\n \r\n If an error occurs, an error message will be sent, in the following format:\r\n \r\n\r\nFormatted/Non: [query_plan] [xml] NULL\r\n (Requires @get_plans option)\r\n Shows the query plan for the request, if available.\r\n If the plan is locked, a special timeout message will be sent, in the following format:\r\n \r\n If an error occurs, an error message will be sent, in the following format:\r\n \r\n\r\nFormatted/Non: [blocking_session_id] [smallint] NULL\r\n When applicable, shows the blocking SPID\r\n\r\nFormatted: [blocked_session_count] [varchar](30) NULL\r\nNon-Formatted: [blocked_session_count] [smallint] NULL\r\n (Requires @find_block_leaders option)\r\n The total number of SPIDs blocked by this session,\r\n all the way down the blocking chain.\r\n\r\nFormatted: [percent_complete] [varchar](30) NULL\r\nNon-Formatted: [percent_complete] [real] NULL\r\n When applicable, shows the percent complete (e.g. for backups, restores, and some rollbacks)\r\n\r\nFormatted/Non: [host_name] [sysname] NOT NULL\r\n Shows the host name for the connection\r\n\r\nFormatted/Non: [login_name] [sysname] NOT NULL\r\n Shows the login name for the connection\r\n\r\nFormatted/Non: [database_name] [sysname] NULL\r\n Shows the connected database\r\n\r\nFormatted/Non: [program_name] [sysname] NULL\r\n Shows the reported program/application name\r\n\r\nFormatted/Non: [additional_info] [xml] NULL\r\n (Requires @get_additional_info option)\r\n Returns additional non-performance-related session/request information\r\n If the script finds a SQL Agent job running, the name of the job and job step will be reported\r\n If @get_task_info = 2 and the script finds a lock wait, the locked object will be reported\r\n\r\nFormatted/Non: [start_time] [datetime] NOT NULL\r\n For active requests, shows the time the request started\r\n For sleeping sessions, shows the time the last batch completed\r\n\r\nFormatted/Non: [login_time] [datetime] NOT NULL\r\n Shows the time that the session connected\r\n\r\nFormatted/Non: [request_id] [int] NULL\r\n For active requests, shows the request_id\r\n Should be 0 unless MARS is being used\r\n\r\nFormatted/Non: [collection_time] [datetime] NOT NULL\r\n Time that this script's final SELECT ran\r\n\r\nFormatted/Non: [memory_info] [xml] NULL\r\n (Requires @get_memory_info)\r\n For active queries that require workspace memory, returns information on memory grants,\r\n resource semaphores, and the resource governor settings that are impacting the allocation.\r\n*/\r\nAS\r\nBEGIN;\r\n SET NOCOUNT ON;\r\n SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;\r\n SET QUOTED_IDENTIFIER ON;\r\n SET ANSI_PADDING ON;\r\n SET CONCAT_NULL_YIELDS_NULL ON;\r\n SET ANSI_WARNINGS ON;\r\n SET NUMERIC_ROUNDABORT OFF;\r\n SET ARITHABORT ON;\r\n\r\n IF\r\n @filter IS NULL\r\n OR @filter_type IS NULL\r\n OR @not_filter IS NULL\r\n OR @not_filter_type IS NULL\r\n OR @show_own_spid IS NULL\r\n OR @show_system_spids IS NULL\r\n OR @show_sleeping_spids IS NULL\r\n OR @get_full_inner_text IS NULL\r\n OR @get_plans IS NULL\r\n OR @get_outer_command IS NULL\r\n OR @get_transaction_info IS NULL\r\n OR @get_task_info IS NULL\r\n OR @get_locks IS NULL\r\n OR @get_avg_time IS NULL\r\n OR @get_additional_info IS NULL\r\n OR @find_block_leaders IS NULL\r\n OR @delta_interval IS NULL\r\n OR @format_output IS NULL\r\n OR @output_column_list IS NULL\r\n OR @sort_order IS NULL\r\n OR @return_schema IS NULL\r\n OR @destination_table IS NULL\r\n OR @help IS NULL\r\n BEGIN;\r\n RAISERROR('Input parameters cannot be NULL', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @filter_type NOT IN ('session', 'program', 'database', 'login', 'host')\r\n BEGIN;\r\n RAISERROR('Valid filter types are: session, program, database, login, host', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @filter_type = 'session' AND @filter LIKE '%[^0123456789]%'\r\n BEGIN;\r\n RAISERROR('Session filters must be valid integers', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @not_filter_type NOT IN ('session', 'program', 'database', 'login', 'host')\r\n BEGIN;\r\n RAISERROR('Valid filter types are: session, program, database, login, host', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @not_filter_type = 'session' AND @not_filter LIKE '%[^0123456789]%'\r\n BEGIN;\r\n RAISERROR('Session filters must be valid integers', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @show_sleeping_spids NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @show_sleeping_spids are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @get_plans NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @get_plans are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @get_task_info NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @get_task_info are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @format_output NOT IN (0, 1, 2)\r\n BEGIN;\r\n RAISERROR('Valid values for @format_output are: 0, 1, or 2', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @get_memory_info = 1 AND NOT EXISTS (SELECT * FROM sys.all_objects WHERE name = 'resource_governor_resource_pools')\r\n BEGIN;\r\n RAISERROR('@get_memory_info is not available for SQL Server 2005.', 16, 1);\r\n RETURN;\r\n END;\r\n\r\n IF @help = 1\r\n BEGIN;\r\n DECLARE\r\n @header VARCHAR(MAX),\r\n @params VARCHAR(MAX),\r\n @outputs VARCHAR(MAX);\r\n\r\n SELECT\r\n @header =\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n CONVERT\r\n (\r\n VARCHAR(MAX),\r\n SUBSTRING\r\n (\r\n t.text,\r\n CHARINDEX('/' + REPLICATE('*', 93), t.text) + 94,\r\n CHARINDEX(REPLICATE('*', 93) + '/', t.text) - (CHARINDEX('/' + REPLICATE('*', 93), t.text) + 94)\r\n )\r\n ),\r\n CHAR(13)+CHAR(10),\r\n CHAR(13)\r\n ),\r\n ' ',\r\n ''\r\n ),\r\n @params =\r\n CHAR(13) +\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n CONVERT\r\n (\r\n VARCHAR(MAX),\r\n SUBSTRING\r\n (\r\n t.text,\r\n CHARINDEX('--~', t.text) + 5,\r\n CHARINDEX('--~', t.text, CHARINDEX('--~', t.text) + 5) - (CHARINDEX('--~', t.text) + 5)\r\n )\r\n ),\r\n CHAR(13)+CHAR(10),\r\n CHAR(13)\r\n ),\r\n ' ',\r\n ''\r\n ),\r\n @outputs =\r\n CHAR(13) +\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n REPLACE\r\n (\r\n CONVERT\r\n (\r\n VARCHAR(MAX),\r\n SUBSTRING\r\n (\r\n t.text,\r\n CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32,\r\n CHARINDEX('*/', t.text, CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32) - (CHARINDEX('OUTPUT COLUMNS'+CHAR(13)+CHAR(10)+'--------------', t.text) + 32)\r\n )\r\n ),\r\n ' ',\r\n CHAR(255)\r\n ),\r\n CHAR(13)+CHAR(10),\r\n CHAR(13)\r\n ),\r\n ' ',\r\n ''\r\n ) +\r\n CHAR(13)\r\n FROM sys.dm_exec_requests AS r\r\n CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS t\r\n WHERE\r\n r.session_id = @@SPID;\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@header) - 1)\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n )\r\n SELECT\r\n RTRIM(LTRIM(\r\n SUBSTRING\r\n (\r\n @header,\r\n number + 1,\r\n CHARINDEX(CHAR(13), @header, number + 1) - number - 1\r\n )\r\n )) AS [------header---------------------------------------------------------------------------------------------------------------]\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@header, number, 1) = CHAR(13);\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@params) - 1)\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n RTRIM(LTRIM(\r\n SUBSTRING\r\n (\r\n @params,\r\n number + 1,\r\n CHARINDEX(CHAR(13), @params, number + 1) - number - 1\r\n )\r\n )) AS token,\r\n number,\r\n CASE\r\n WHEN SUBSTRING(@params, number + 1, 1) = CHAR(13) THEN number\r\n ELSE COALESCE(NULLIF(CHARINDEX(',' + CHAR(13) + CHAR(13), @params, number), 0), LEN(@params))\r\n END AS param_group,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n CHARINDEX(',' + CHAR(13) + CHAR(13), @params, number),\r\n SUBSTRING(@params, number+1, 1)\r\n ORDER BY\r\n number\r\n ) AS group_order\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@params, number, 1) = CHAR(13)\r\n ),\r\n parsed_tokens AS\r\n (\r\n SELECT\r\n MIN\r\n (\r\n CASE\r\n WHEN token LIKE '@%' THEN token\r\n ELSE NULL\r\n END\r\n ) AS parameter,\r\n MIN\r\n (\r\n CASE\r\n WHEN token LIKE '--%' THEN RIGHT(token, LEN(token) - 2)\r\n ELSE NULL\r\n END\r\n ) AS description,\r\n param_group,\r\n group_order\r\n FROM tokens\r\n WHERE\r\n NOT\r\n (\r\n token = ''\r\n AND group_order > 1\r\n )\r\n GROUP BY\r\n param_group,\r\n group_order\r\n )\r\n SELECT\r\n CASE\r\n WHEN description IS NULL AND parameter IS NULL THEN '-------------------------------------------------------------------------'\r\n WHEN param_group = MAX(param_group) OVER() THEN parameter\r\n ELSE COALESCE(LEFT(parameter, LEN(parameter) - 1), '')\r\n END AS [------parameter----------------------------------------------------------],\r\n CASE\r\n WHEN description IS NULL AND parameter IS NULL THEN '----------------------------------------------------------------------------------------------------------------------'\r\n ELSE COALESCE(description, '')\r\n END AS [------description-----------------------------------------------------------------------------------------------------]\r\n FROM parsed_tokens\r\n ORDER BY\r\n param_group,\r\n group_order;\r\n \r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@outputs) - 1)\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n RTRIM(LTRIM(\r\n SUBSTRING\r\n (\r\n @outputs,\r\n number + 1,\r\n CASE\r\n WHEN\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) <\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2, @outputs, number + 1), 0), LEN(@outputs))\r\n THEN COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) - number - 1\r\n ELSE\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2, @outputs, number + 1), 0), LEN(@outputs)) - number - 1\r\n END\r\n )\r\n )) AS token,\r\n number,\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs)) AS output_group,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n COALESCE(NULLIF(CHARINDEX(CHAR(13) + 'Formatted', @outputs, number + 1), 0), LEN(@outputs))\r\n ORDER BY\r\n number\r\n ) AS output_group_order\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@outputs, number, 10) = CHAR(13) + 'Formatted'\r\n OR SUBSTRING(@outputs, number, 2) = CHAR(13) + CHAR(255) COLLATE Latin1_General_Bin2\r\n ),\r\n output_tokens AS\r\n (\r\n SELECT\r\n *,\r\n CASE output_group_order\r\n WHEN 2 THEN MAX(CASE output_group_order WHEN 1 THEN token ELSE NULL END) OVER (PARTITION BY output_group)\r\n ELSE ''\r\n END COLLATE Latin1_General_Bin2 AS column_info\r\n FROM tokens\r\n )\r\n SELECT\r\n CASE output_group_order\r\n WHEN 1 THEN '-----------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+1, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info))\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)+2) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info)-1)\r\n END\r\n ELSE ''\r\n END AS formatted_column_name,\r\n CASE output_group_order\r\n WHEN 1 THEN '-----------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN\r\n SUBSTRING(column_info, CHARINDEX(']', column_info)+2, LEN(column_info))\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(']', column_info)+2, CHARINDEX('Non-Formatted:', column_info, CHARINDEX(']', column_info)+2) - CHARINDEX(']', column_info)-3)\r\n END\r\n ELSE ''\r\n END AS formatted_column_type,\r\n CASE output_group_order\r\n WHEN 1 THEN '---------------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN ''\r\n ELSE\r\n CASE\r\n WHEN SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, 1) = '<' THEN\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, CHARINDEX('>', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info)))\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, CHARINDEX(']', column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1) - CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info)))\r\n END\r\n END\r\n ELSE ''\r\n END AS unformatted_column_name,\r\n CASE output_group_order\r\n WHEN 1 THEN '---------------------------------------'\r\n WHEN 2 THEN\r\n CASE\r\n WHEN CHARINDEX('Formatted/Non:', column_info) = 1 THEN ''\r\n ELSE\r\n CASE\r\n WHEN SUBSTRING(column_info, CHARINDEX(CHAR(255) COLLATE Latin1_General_Bin2, column_info, CHARINDEX('Non-Formatted:', column_info))+1, 1) = '<' THEN ''\r\n ELSE\r\n SUBSTRING(column_info, CHARINDEX(']', column_info, CHARINDEX('Non-Formatted:', column_info))+2, CHARINDEX('Non-Formatted:', column_info, CHARINDEX(']', column_info)+2) - CHARINDEX(']', column_info)-3)\r\n END\r\n END\r\n ELSE ''\r\n END AS unformatted_column_type,\r\n CASE output_group_order\r\n WHEN 1 THEN '----------------------------------------------------------------------------------------------------------------------'\r\n ELSE REPLACE(token, CHAR(255) COLLATE Latin1_General_Bin2, '')\r\n END AS [------description-----------------------------------------------------------------------------------------------------]\r\n FROM output_tokens\r\n WHERE\r\n NOT\r\n (\r\n output_group_order = 1\r\n AND output_group = LEN(@outputs)\r\n )\r\n ORDER BY\r\n output_group,\r\n CASE output_group_order\r\n WHEN 1 THEN 99\r\n ELSE output_group_order\r\n END;\r\n\r\n RETURN;\r\n END;\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@output_column_list))\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n '|[' +\r\n SUBSTRING\r\n (\r\n @output_column_list,\r\n number + 1,\r\n CHARINDEX(']', @output_column_list, number) - number - 1\r\n ) + '|]' AS token,\r\n number\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@output_column_list, number, 1) = '['\r\n ),\r\n ordered_columns AS\r\n (\r\n SELECT\r\n x.column_name,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n x.column_name\r\n ORDER BY\r\n tokens.number,\r\n x.default_order\r\n ) AS r,\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY\r\n tokens.number,\r\n x.default_order\r\n ) AS s\r\n FROM tokens\r\n JOIN\r\n (\r\n SELECT '[session_id]' AS column_name, 1 AS default_order\r\n UNION ALL\r\n SELECT '[dd hh:mm:ss.mss]', 2\r\n WHERE\r\n @format_output IN (1, 2)\r\n UNION ALL\r\n SELECT '[dd hh:mm:ss.mss (avg)]', 3\r\n WHERE\r\n @format_output IN (1, 2)\r\n AND @get_avg_time = 1\r\n UNION ALL\r\n SELECT '[avg_elapsed_time]', 4\r\n WHERE\r\n @format_output = 0\r\n AND @get_avg_time = 1\r\n UNION ALL\r\n SELECT '[physical_io]', 5\r\n WHERE\r\n @get_task_info = 2\r\n UNION ALL\r\n SELECT '[reads]', 6\r\n UNION ALL\r\n SELECT '[physical_reads]', 7\r\n UNION ALL\r\n SELECT '[writes]', 8\r\n UNION ALL\r\n SELECT '[tempdb_allocations]', 9\r\n UNION ALL\r\n SELECT '[tempdb_current]', 10\r\n UNION ALL\r\n SELECT '[CPU]', 11\r\n UNION ALL\r\n SELECT '[context_switches]', 12\r\n WHERE\r\n @get_task_info = 2\r\n UNION ALL\r\n SELECT '[used_memory]', 13\r\n UNION ALL\r\n SELECT '[max_used_memory]', 14\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[requested_memory]', 15\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[granted_memory]', 16\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[physical_io_delta]', 17\r\n WHERE\r\n @delta_interval > 0 \r\n AND @get_task_info = 2\r\n UNION ALL\r\n SELECT '[reads_delta]', 18\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[physical_reads_delta]', 19\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[writes_delta]', 20\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[tempdb_allocations_delta]', 21\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[tempdb_current_delta]', 22\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[CPU_delta]', 23\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[context_switches_delta]', 24\r\n WHERE\r\n @delta_interval > 0\r\n AND @get_task_info = 2\r\n UNION ALL\r\n SELECT '[used_memory_delta]', 25\r\n WHERE\r\n @delta_interval > 0\r\n UNION ALL\r\n SELECT '[max_used_memory_delta]', 26\r\n WHERE\r\n @delta_interval > 0\r\n AND @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[tasks]', 27\r\n WHERE\r\n @get_task_info = 2\r\n UNION ALL\r\n SELECT '[status]', 28\r\n UNION ALL\r\n SELECT '[wait_info]', 29\r\n WHERE\r\n @get_task_info > 0\r\n OR @find_block_leaders = 1\r\n UNION ALL\r\n SELECT '[locks]', 30\r\n WHERE\r\n @get_locks = 1\r\n UNION ALL\r\n SELECT '[tran_start_time]', 31\r\n WHERE\r\n @get_transaction_info = 1\r\n UNION ALL\r\n SELECT '[tran_log_writes]', 32\r\n WHERE\r\n @get_transaction_info = 1\r\n UNION ALL\r\n SELECT '[implicit_tran]', 33\r\n WHERE\r\n @get_transaction_info = 1\r\n UNION ALL\r\n SELECT '[open_tran_count]', 34\r\n UNION ALL\r\n SELECT '[sql_command]', 35\r\n WHERE\r\n @get_outer_command = 1\r\n UNION ALL\r\n SELECT '[sql_text]', 36\r\n UNION ALL\r\n SELECT '[query_plan]', 37\r\n WHERE\r\n @get_plans >= 1\r\n UNION ALL\r\n SELECT '[blocking_session_id]', 38\r\n WHERE\r\n @get_task_info > 0\r\n OR @find_block_leaders = 1\r\n UNION ALL\r\n SELECT '[blocked_session_count]', 39\r\n WHERE\r\n @find_block_leaders = 1\r\n UNION ALL\r\n SELECT '[percent_complete]', 40\r\n UNION ALL\r\n SELECT '[host_name]', 41\r\n UNION ALL\r\n SELECT '[login_name]', 42\r\n UNION ALL\r\n SELECT '[database_name]', 43\r\n UNION ALL\r\n SELECT '[program_name]', 44\r\n UNION ALL\r\n SELECT '[additional_info]', 45\r\n WHERE\r\n @get_additional_info = 1\r\n UNION ALL\r\n SELECT '[memory_info]', 46\r\n WHERE\r\n @get_memory_info = 1\r\n UNION ALL\r\n SELECT '[start_time]', 47\r\n UNION ALL\r\n SELECT '[login_time]', 48\r\n UNION ALL\r\n SELECT '[request_id]', 49\r\n UNION ALL\r\n SELECT '[collection_time]', 50\r\n ) AS x ON\r\n x.column_name LIKE token ESCAPE '|'\r\n )\r\n SELECT\r\n @output_column_list =\r\n STUFF\r\n (\r\n (\r\n SELECT\r\n ',' + column_name as [text()]\r\n FROM ordered_columns\r\n WHERE\r\n r = 1\r\n ORDER BY\r\n s\r\n FOR XML\r\n PATH('')\r\n ),\r\n 1,\r\n 1,\r\n ''\r\n );\r\n \r\n IF COALESCE(RTRIM(@output_column_list), '') = ''\r\n BEGIN;\r\n RAISERROR('No valid column matches found in @output_column_list or no columns remain due to selected options.', 16, 1);\r\n RETURN;\r\n END;\r\n \r\n IF @destination_table <> ''\r\n BEGIN;\r\n SET @destination_table =\r\n --database\r\n COALESCE(QUOTENAME(PARSENAME(@destination_table, 3)) + '.', '') +\r\n --schema\r\n COALESCE(QUOTENAME(PARSENAME(@destination_table, 2)) + '.', '') +\r\n --table\r\n COALESCE(QUOTENAME(PARSENAME(@destination_table, 1)), '');\r\n \r\n IF COALESCE(RTRIM(@destination_table), '') = ''\r\n BEGIN;\r\n RAISERROR('Destination table not properly formatted.', 16, 1);\r\n RETURN;\r\n END;\r\n END;\r\n\r\n WITH\r\n a0 AS\r\n (SELECT 1 AS n UNION ALL SELECT 1),\r\n a1 AS\r\n (SELECT 1 AS n FROM a0 AS a CROSS JOIN a0 AS b),\r\n a2 AS\r\n (SELECT 1 AS n FROM a1 AS a CROSS JOIN a1 AS b),\r\n a3 AS\r\n (SELECT 1 AS n FROM a2 AS a CROSS JOIN a2 AS b),\r\n a4 AS\r\n (SELECT 1 AS n FROM a3 AS a CROSS JOIN a3 AS b),\r\n numbers AS\r\n (\r\n SELECT TOP(LEN(@sort_order))\r\n ROW_NUMBER() OVER\r\n (\r\n ORDER BY (SELECT NULL)\r\n ) AS number\r\n FROM a4\r\n ORDER BY\r\n number\r\n ),\r\n tokens AS\r\n (\r\n SELECT\r\n '|[' +\r\n SUBSTRING\r\n (\r\n @sort_order,\r\n number + 1,\r\n CHARINDEX(']', @sort_order, number) - number - 1\r\n ) + '|]' AS token,\r\n SUBSTRING\r\n (\r\n @sort_order,\r\n CHARINDEX(']', @sort_order, number) + 1,\r\n COALESCE(NULLIF(CHARINDEX('[', @sort_order, CHARINDEX(']', @sort_order, number)), 0), LEN(@sort_order)) - CHARINDEX(']', @sort_order, number)\r\n ) AS next_chunk,\r\n number\r\n FROM numbers\r\n WHERE\r\n SUBSTRING(@sort_order, number, 1) = '['\r\n ),\r\n ordered_columns AS\r\n (\r\n SELECT\r\n x.column_name +\r\n CASE\r\n WHEN LOWER(tokens.next_chunk) LIKE '%asc%' THEN ' ASC'\r\n WHEN LOWER(tokens.next_chunk) LIKE '%desc%' THEN ' DESC'\r\n ELSE ''\r\n END AS column_name,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n x.column_name\r\n ORDER BY\r\n tokens.number\r\n ) AS r,\r\n tokens.number\r\n FROM tokens\r\n JOIN\r\n (\r\n SELECT '[session_id]' AS column_name\r\n UNION ALL\r\n SELECT '[physical_io]'\r\n UNION ALL\r\n SELECT '[reads]'\r\n UNION ALL\r\n SELECT '[physical_reads]'\r\n UNION ALL\r\n SELECT '[writes]'\r\n UNION ALL\r\n SELECT '[tempdb_allocations]'\r\n UNION ALL\r\n SELECT '[tempdb_current]'\r\n UNION ALL\r\n SELECT '[CPU]'\r\n UNION ALL\r\n SELECT '[context_switches]'\r\n UNION ALL\r\n SELECT '[used_memory]'\r\n UNION ALL\r\n SELECT '[max_used_memory]'\r\n UNION ALL\r\n SELECT '[requested_memory]'\r\n UNION ALL\r\n SELECT '[granted_memory]'\r\n UNION ALL\r\n SELECT '[physical_io_delta]'\r\n UNION ALL\r\n SELECT '[reads_delta]'\r\n UNION ALL\r\n SELECT '[physical_reads_delta]'\r\n UNION ALL\r\n SELECT '[writes_delta]'\r\n UNION ALL\r\n SELECT '[tempdb_allocations_delta]'\r\n UNION ALL\r\n SELECT '[tempdb_current_delta]'\r\n UNION ALL\r\n SELECT '[CPU_delta]'\r\n UNION ALL\r\n SELECT '[context_switches_delta]'\r\n UNION ALL\r\n SELECT '[used_memory_delta]'\r\n UNION ALL\r\n SELECT '[max_used_memory_delta]'\r\n UNION ALL\r\n SELECT '[tasks]'\r\n UNION ALL\r\n SELECT '[tran_start_time]'\r\n UNION ALL\r\n SELECT '[open_tran_count]'\r\n UNION ALL\r\n SELECT '[blocking_session_id]'\r\n UNION ALL\r\n SELECT '[blocked_session_count]'\r\n UNION ALL\r\n SELECT '[percent_complete]'\r\n UNION ALL\r\n SELECT '[host_name]'\r\n UNION ALL\r\n SELECT '[login_name]'\r\n UNION ALL\r\n SELECT '[database_name]'\r\n UNION ALL\r\n SELECT '[start_time]'\r\n UNION ALL\r\n SELECT '[login_time]'\r\n UNION ALL\r\n SELECT '[program_name]'\r\n ) AS x ON\r\n x.column_name LIKE token ESCAPE '|'\r\n )\r\n SELECT\r\n @sort_order = COALESCE(z.sort_order, '')\r\n FROM\r\n (\r\n SELECT\r\n STUFF\r\n (\r\n (\r\n SELECT\r\n ',' + column_name as [text()]\r\n FROM ordered_columns\r\n WHERE\r\n r = 1\r\n ORDER BY\r\n number\r\n FOR XML\r\n PATH('')\r\n ),\r\n 1,\r\n 1,\r\n ''\r\n ) AS sort_order\r\n ) AS z;\r\n\r\n CREATE TABLE #sessions\r\n (\r\n recursion SMALLINT NOT NULL,\r\n session_id SMALLINT NOT NULL,\r\n request_id INT NOT NULL,\r\n session_number INT NOT NULL,\r\n elapsed_time INT NOT NULL,\r\n avg_elapsed_time INT NULL,\r\n physical_io BIGINT NULL,\r\n reads BIGINT NULL,\r\n physical_reads BIGINT NULL,\r\n writes BIGINT NULL,\r\n tempdb_allocations BIGINT NULL,\r\n tempdb_current BIGINT NULL,\r\n CPU BIGINT NULL,\r\n thread_CPU_snapshot BIGINT NULL,\r\n context_switches BIGINT NULL,\r\n used_memory BIGINT NOT NULL,\r\n max_used_memory BIGINT NULL,\r\n requested_memory BIGINT NULL,\r\n granted_memory BIGINT NULL,\r\n tasks SMALLINT NULL,\r\n status VARCHAR(30) NOT NULL,\r\n wait_info NVARCHAR(4000) NULL,\r\n locks XML NULL,\r\n transaction_id BIGINT NULL,\r\n tran_start_time DATETIME NULL,\r\n tran_log_writes NVARCHAR(4000) NULL,\r\n implicit_tran NVARCHAR(3) NULL,\r\n open_tran_count SMALLINT NULL,\r\n sql_command XML NULL,\r\n sql_handle VARBINARY(64) NULL,\r\n statement_start_offset INT NULL,\r\n statement_end_offset INT NULL,\r\n sql_text XML NULL,\r\n plan_handle VARBINARY(64) NULL,\r\n query_plan XML NULL,\r\n blocking_session_id SMALLINT NULL,\r\n blocked_session_count SMALLINT NULL,\r\n percent_complete REAL NULL,\r\n host_name sysname NULL,\r\n login_name sysname NOT NULL,\r\n database_name sysname NULL,\r\n program_name sysname NULL,\r\n additional_info XML NULL,\r\n memory_info XML NULL,\r\n start_time DATETIME NOT NULL,\r\n login_time DATETIME NULL,\r\n last_request_start_time DATETIME NULL,\r\n PRIMARY KEY CLUSTERED (session_id, request_id, recursion) WITH (IGNORE_DUP_KEY = ON),\r\n UNIQUE NONCLUSTERED (transaction_id, session_id, request_id, recursion) WITH (IGNORE_DUP_KEY = ON)\r\n );\r\n\r\n IF @return_schema = 0\r\n BEGIN;\r\n --Disable unnecessary autostats on the table\r\n CREATE STATISTICS s_session_id ON #sessions (session_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_id ON #sessions (request_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_transaction_id ON #sessions (transaction_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_session_number ON #sessions (session_number)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_status ON #sessions (status)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_start_time ON #sessions (start_time)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_last_request_start_time ON #sessions (last_request_start_time)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_recursion ON #sessions (recursion)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n\r\n DECLARE @recursion SMALLINT;\r\n SET @recursion =\r\n CASE @delta_interval\r\n WHEN 0 THEN 1\r\n ELSE -1\r\n END;\r\n\r\n DECLARE @first_collection_ms_ticks BIGINT;\r\n DECLARE @last_collection_start DATETIME;\r\n DECLARE @sys_info BIT;\r\n SET @sys_info = ISNULL(CONVERT(BIT, SIGN(OBJECT_ID('sys.dm_os_sys_info'))), 0);\r\n\r\n --Used for the delta pull\r\n REDO:;\r\n \r\n IF\r\n @get_locks = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[locks|]%' ESCAPE '|'\r\n BEGIN;\r\n SELECT\r\n y.resource_type,\r\n y.database_name,\r\n y.object_id,\r\n y.file_id,\r\n y.page_type,\r\n y.hobt_id,\r\n y.allocation_unit_id,\r\n y.index_id,\r\n y.schema_id,\r\n y.principal_id,\r\n y.request_mode,\r\n y.request_status,\r\n y.session_id,\r\n y.resource_description,\r\n y.request_count,\r\n s.request_id,\r\n s.start_time,\r\n CONVERT(sysname, NULL) AS object_name,\r\n CONVERT(sysname, NULL) AS index_name,\r\n CONVERT(sysname, NULL) AS schema_name,\r\n CONVERT(sysname, NULL) AS principal_name,\r\n CONVERT(NVARCHAR(2048), NULL) AS query_error\r\n INTO #locks\r\n FROM\r\n (\r\n SELECT\r\n sp.spid AS session_id,\r\n CASE sp.status\r\n WHEN 'sleeping' THEN CONVERT(INT, 0)\r\n ELSE sp.request_id\r\n END AS request_id,\r\n CASE sp.status\r\n WHEN 'sleeping' THEN sp.last_batch\r\n ELSE COALESCE(req.start_time, sp.last_batch)\r\n END AS start_time,\r\n sp.dbid\r\n FROM sys.sysprocesses AS sp\r\n OUTER APPLY\r\n (\r\n SELECT TOP(1)\r\n CASE\r\n WHEN\r\n (\r\n sp.hostprocess > ''\r\n OR r.total_elapsed_time < 0\r\n ) THEN\r\n r.start_time\r\n ELSE\r\n DATEADD\r\n (\r\n ms,\r\n 1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),\r\n DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())\r\n )\r\n END AS start_time\r\n FROM sys.dm_exec_requests AS r\r\n WHERE\r\n r.session_id = sp.spid\r\n AND r.request_id = sp.request_id\r\n ) AS req\r\n WHERE\r\n --Process inclusive filter\r\n 1 =\r\n CASE\r\n WHEN @filter <> '' THEN\r\n CASE @filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN\r\n CONVERT(SMALLINT, @filter) = 0\r\n OR sp.spid = CONVERT(SMALLINT, @filter)\r\n THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'program' THEN\r\n CASE\r\n WHEN sp.program_name LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'login' THEN\r\n CASE\r\n WHEN sp.loginame LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'host' THEN\r\n CASE\r\n WHEN sp.hostname LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'database' THEN\r\n CASE\r\n WHEN DB_NAME(sp.dbid) LIKE @filter THEN 1\r\n ELSE 0\r\n END\r\n ELSE 0\r\n END\r\n ELSE 1\r\n END\r\n --Process exclusive filter\r\n AND 0 =\r\n CASE\r\n WHEN @not_filter <> '' THEN\r\n CASE @not_filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN sp.spid = CONVERT(SMALLINT, @not_filter) THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'program' THEN\r\n CASE\r\n WHEN sp.program_name LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'login' THEN\r\n CASE\r\n WHEN sp.loginame LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'host' THEN\r\n CASE\r\n WHEN sp.hostname LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n WHEN 'database' THEN\r\n CASE\r\n WHEN DB_NAME(sp.dbid) LIKE @not_filter THEN 1\r\n ELSE 0\r\n END\r\n ELSE 0\r\n END\r\n ELSE 0\r\n END\r\n AND\r\n (\r\n @show_own_spid = 1\r\n OR sp.spid <> @@SPID\r\n )\r\n AND\r\n (\r\n @show_system_spids = 1\r\n OR sp.hostprocess > ''\r\n )\r\n AND sp.ecid = 0\r\n ) AS s\r\n INNER HASH JOIN\r\n (\r\n SELECT\r\n x.resource_type,\r\n x.database_name,\r\n x.object_id,\r\n x.file_id,\r\n CASE\r\n WHEN x.page_no = 1 OR x.page_no % 8088 = 0 THEN 'PFS'\r\n WHEN x.page_no = 2 OR x.page_no % 511232 = 0 THEN 'GAM'\r\n WHEN x.page_no = 3 OR (x.page_no - 1) % 511232 = 0 THEN 'SGAM'\r\n WHEN x.page_no = 6 OR (x.page_no - 6) % 511232 = 0 THEN 'DCM'\r\n WHEN x.page_no = 7 OR (x.page_no - 7) % 511232 = 0 THEN 'BCM'\r\n WHEN x.page_no IS NOT NULL THEN '*'\r\n ELSE NULL\r\n END AS page_type,\r\n x.hobt_id,\r\n x.allocation_unit_id,\r\n x.index_id,\r\n x.schema_id,\r\n x.principal_id,\r\n x.request_mode,\r\n x.request_status,\r\n x.session_id,\r\n x.request_id,\r\n CASE\r\n WHEN COALESCE(x.object_id, x.file_id, x.hobt_id, x.allocation_unit_id, x.index_id, x.schema_id, x.principal_id) IS NULL THEN NULLIF(resource_description, '')\r\n ELSE NULL\r\n END AS resource_description,\r\n COUNT(*) AS request_count\r\n FROM\r\n (\r\n SELECT\r\n tl.resource_type +\r\n CASE\r\n WHEN tl.resource_subtype = '' THEN ''\r\n ELSE '.' + tl.resource_subtype\r\n END AS resource_type,\r\n COALESCE(DB_NAME(tl.resource_database_id), N'(null)') AS database_name,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_type = 'OBJECT' THEN tl.resource_associated_entity_id\r\n WHEN tl.resource_description LIKE '%object_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('object_id = ', tl.resource_description) + 12),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('object_id = ', tl.resource_description) + 12),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('object_id = ', tl.resource_description) + 12)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS object_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_type = 'FILE' THEN CONVERT(INT, tl.resource_description)\r\n WHEN tl.resource_type IN ('PAGE', 'EXTENT', 'RID') THEN LEFT(tl.resource_description, CHARINDEX(':', tl.resource_description)-1)\r\n ELSE NULL\r\n END\r\n ) AS file_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_type IN ('PAGE', 'EXTENT', 'RID') THEN\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n CHARINDEX(':', tl.resource_description) + 1,\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(':', tl.resource_description, CHARINDEX(':', tl.resource_description) + 1),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX(':', tl.resource_description) + 1)\r\n )\r\n ELSE NULL\r\n END\r\n ) AS page_no,\r\n CASE\r\n WHEN tl.resource_type IN ('PAGE', 'KEY', 'RID', 'HOBT') THEN tl.resource_associated_entity_id\r\n ELSE NULL\r\n END AS hobt_id,\r\n CASE\r\n WHEN tl.resource_type = 'ALLOCATION_UNIT' THEN tl.resource_associated_entity_id\r\n ELSE NULL\r\n END AS allocation_unit_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN\r\n /*TODO: Deal with server principals*/\r\n tl.resource_subtype <> 'SERVER_PRINCIPAL'\r\n AND tl.resource_description LIKE '%index_id or stats_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('index_id or stats_id = ', tl.resource_description) + 23)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS index_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_description LIKE '%schema_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('schema_id = ', tl.resource_description) + 12),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('schema_id = ', tl.resource_description) + 12),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('schema_id = ', tl.resource_description) + 12)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS schema_id,\r\n CONVERT\r\n (\r\n INT,\r\n CASE\r\n WHEN tl.resource_description LIKE '%principal_id = %' THEN\r\n (\r\n SUBSTRING\r\n (\r\n tl.resource_description,\r\n (CHARINDEX('principal_id = ', tl.resource_description) + 15),\r\n COALESCE\r\n (\r\n NULLIF\r\n (\r\n CHARINDEX(',', tl.resource_description, CHARINDEX('principal_id = ', tl.resource_description) + 15),\r\n 0\r\n ),\r\n DATALENGTH(tl.resource_description)+1\r\n ) - (CHARINDEX('principal_id = ', tl.resource_description) + 15)\r\n )\r\n )\r\n ELSE NULL\r\n END\r\n ) AS principal_id,\r\n tl.request_mode,\r\n tl.request_status,\r\n tl.request_session_id AS session_id,\r\n tl.request_request_id AS request_id,\r\n\r\n /*TODO: Applocks, other resource_descriptions*/\r\n RTRIM(tl.resource_description) AS resource_description,\r\n tl.resource_associated_entity_id\r\n /*********************************************/\r\n FROM\r\n (\r\n SELECT\r\n request_session_id,\r\n CONVERT(VARCHAR(120), resource_type) COLLATE Latin1_General_Bin2 AS resource_type,\r\n CONVERT(VARCHAR(120), resource_subtype) COLLATE Latin1_General_Bin2 AS resource_subtype,\r\n resource_database_id,\r\n CONVERT(VARCHAR(512), resource_description) COLLATE Latin1_General_Bin2 AS resource_description,\r\n resource_associated_entity_id,\r\n CONVERT(VARCHAR(120), request_mode) COLLATE Latin1_General_Bin2 AS request_mode,\r\n CONVERT(VARCHAR(120), request_status) COLLATE Latin1_General_Bin2 AS request_status,\r\n request_request_id\r\n FROM sys.dm_tran_locks\r\n ) AS tl\r\n ) AS x\r\n GROUP BY\r\n x.resource_type,\r\n x.database_name,\r\n x.object_id,\r\n x.file_id,\r\n CASE\r\n WHEN x.page_no = 1 OR x.page_no % 8088 = 0 THEN 'PFS'\r\n WHEN x.page_no = 2 OR x.page_no % 511232 = 0 THEN 'GAM'\r\n WHEN x.page_no = 3 OR (x.page_no - 1) % 511232 = 0 THEN 'SGAM'\r\n WHEN x.page_no = 6 OR (x.page_no - 6) % 511232 = 0 THEN 'DCM'\r\n WHEN x.page_no = 7 OR (x.page_no - 7) % 511232 = 0 THEN 'BCM'\r\n WHEN x.page_no IS NOT NULL THEN '*'\r\n ELSE NULL\r\n END,\r\n x.hobt_id,\r\n x.allocation_unit_id,\r\n x.index_id,\r\n x.schema_id,\r\n x.principal_id,\r\n x.request_mode,\r\n x.request_status,\r\n x.session_id,\r\n x.request_id,\r\n CASE\r\n WHEN COALESCE(x.object_id, x.file_id, x.hobt_id, x.allocation_unit_id, x.index_id, x.schema_id, x.principal_id) IS NULL THEN NULLIF(resource_description, '')\r\n ELSE NULL\r\n END\r\n ) AS y ON\r\n y.session_id = s.session_id\r\n AND y.request_id = s.request_id\r\n OPTION (HASH GROUP);\r\n\r\n --Disable unnecessary autostats on the table\r\n CREATE STATISTICS s_database_name ON #locks (database_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_object_id ON #locks (object_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_hobt_id ON #locks (hobt_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_allocation_unit_id ON #locks (allocation_unit_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_index_id ON #locks (index_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_schema_id ON #locks (schema_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_principal_id ON #locks (principal_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_id ON #locks (request_id)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_start_time ON #locks (start_time)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_resource_type ON #locks (resource_type)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_object_name ON #locks (object_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_schema_name ON #locks (schema_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_page_type ON #locks (page_type)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_mode ON #locks (request_mode)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_request_status ON #locks (request_status)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_resource_description ON #locks (resource_description)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_index_name ON #locks (index_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_principal_name ON #locks (principal_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n END;\r\n \r\n DECLARE\r\n @sql VARCHAR(MAX),\r\n @sql_n NVARCHAR(MAX),\r\n @core_session_join VARCHAR(MAX);\r\n\r\n SET @core_session_join =\r\n '@sessions AS sp\r\n LEFT OUTER LOOP JOIN sys.dm_exec_sessions AS s ON\r\n s.session_id = sp.session_id\r\n AND s.login_time = sp.login_time\r\n LEFT OUTER LOOP JOIN sys.dm_exec_requests AS r ON\r\n sp.status <> ''sleeping''\r\n AND r.session_id = sp.session_id\r\n AND r.request_id = sp.request_id\r\n AND\r\n (\r\n (\r\n s.is_user_process = 0\r\n AND sp.is_user_process = 0\r\n )\r\n OR\r\n (\r\n r.start_time = s.last_request_start_time\r\n AND s.last_request_end_time <= sp.last_request_end_time\r\n )\r\n ) ';\r\n\r\n SET @sql =\r\n CONVERT(VARCHAR(MAX), '') +\r\n 'DECLARE @blocker BIT;\r\n SET @blocker = 0;\r\n DECLARE @i INT;\r\n SET @i = 2147483647;\r\n\r\n DECLARE @sessions TABLE\r\n (\r\n session_id SMALLINT NOT NULL,\r\n request_id INT NOT NULL,\r\n login_time DATETIME,\r\n last_request_end_time DATETIME,\r\n status VARCHAR(30),\r\n statement_start_offset INT,\r\n statement_end_offset INT,\r\n sql_handle BINARY(20),\r\n host_name NVARCHAR(128),\r\n login_name NVARCHAR(128),\r\n program_name NVARCHAR(128),\r\n database_id SMALLINT,\r\n memory_usage INT,\r\n open_tran_count SMALLINT,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'wait_type NVARCHAR(32),\r\n wait_resource NVARCHAR(256),\r\n wait_time BIGINT,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'blocked SMALLINT,\r\n is_user_process BIT,\r\n cmd VARCHAR(32),\r\n PRIMARY KEY CLUSTERED (session_id, request_id) WITH (IGNORE_DUP_KEY = ON)\r\n );\r\n\r\n DECLARE @blockers TABLE\r\n (\r\n session_id INT NOT NULL PRIMARY KEY WITH (IGNORE_DUP_KEY = ON)\r\n );\r\n\r\n BLOCKERS:;\r\n\r\n INSERT @sessions\r\n (\r\n session_id,\r\n request_id,\r\n login_time,\r\n last_request_end_time,\r\n status,\r\n statement_start_offset,\r\n statement_end_offset,\r\n sql_handle,\r\n host_name,\r\n login_name,\r\n program_name,\r\n database_id,\r\n memory_usage,\r\n open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'wait_type,\r\n wait_resource,\r\n wait_time,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'blocked,\r\n is_user_process,\r\n cmd\r\n )\r\n SELECT TOP(@i)\r\n spy.session_id,\r\n spy.request_id,\r\n spy.login_time,\r\n spy.last_request_end_time,\r\n spy.status,\r\n spy.statement_start_offset,\r\n spy.statement_end_offset,\r\n spy.sql_handle,\r\n spy.host_name,\r\n spy.login_name,\r\n spy.program_name,\r\n spy.database_id,\r\n spy.memory_usage,\r\n spy.open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'spy.wait_type,\r\n CASE\r\n WHEN\r\n spy.wait_type LIKE N''PAGE%LATCH_%''\r\n OR spy.wait_type IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'')\r\n OR spy.wait_type LIKE N''LATCH[_]%''\r\n OR spy.wait_type = N''OLEDB'' THEN\r\n spy.wait_resource\r\n ELSE\r\n NULL\r\n END AS wait_resource,\r\n spy.wait_time,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'spy.blocked,\r\n spy.is_user_process,\r\n spy.cmd\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n spx.*,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n spx.session_id,\r\n spx.request_id\r\n ORDER BY\r\n CASE\r\n WHEN spx.wait_type LIKE N''LCK[_]%'' THEN\r\n 1\r\n ELSE\r\n 99\r\n END,\r\n spx.wait_time DESC,\r\n spx.blocked DESC\r\n ) AS r\r\n '\r\n ELSE\r\n '1 AS r\r\n '\r\n END +\r\n 'FROM\r\n (\r\n SELECT TOP(@i)\r\n sp0.session_id,\r\n sp0.request_id,\r\n sp0.login_time,\r\n sp0.last_request_end_time,\r\n LOWER(sp0.status) AS status,\r\n CASE\r\n WHEN sp0.cmd = ''CREATE INDEX'' THEN\r\n 0\r\n ELSE\r\n sp0.stmt_start\r\n END AS statement_start_offset,\r\n CASE\r\n WHEN sp0.cmd = N''CREATE INDEX'' THEN\r\n -1\r\n ELSE\r\n COALESCE(NULLIF(sp0.stmt_end, 0), -1)\r\n END AS statement_end_offset,\r\n sp0.sql_handle,\r\n sp0.host_name,\r\n sp0.login_name,\r\n sp0.program_name,\r\n sp0.database_id,\r\n sp0.memory_usage,\r\n sp0.open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'CASE\r\n WHEN sp0.wait_time > 0 AND sp0.wait_type NOT IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n sp0.wait_type\r\n ELSE\r\n NULL\r\n END AS wait_type,\r\n CASE\r\n WHEN sp0.wait_time > 0 AND sp0.wait_type NOT IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n sp0.wait_resource\r\n ELSE\r\n NULL\r\n END AS wait_resource,\r\n CASE\r\n WHEN sp0.wait_type NOT IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n sp0.wait_time\r\n ELSE\r\n 0\r\n END AS wait_time,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'sp0.blocked,\r\n sp0.is_user_process,\r\n sp0.cmd\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n sp1.session_id,\r\n sp1.request_id,\r\n sp1.login_time,\r\n sp1.last_request_end_time,\r\n sp1.status,\r\n sp1.cmd,\r\n sp1.stmt_start,\r\n sp1.stmt_end,\r\n MAX(NULLIF(sp1.sql_handle, 0x00)) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS sql_handle,\r\n sp1.host_name,\r\n MAX(sp1.login_name) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS login_name,\r\n sp1.program_name,\r\n sp1.database_id,\r\n MAX(sp1.memory_usage) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS memory_usage,\r\n MAX(sp1.open_tran_count) OVER (PARTITION BY sp1.session_id, sp1.request_id) AS open_tran_count,\r\n sp1.wait_type,\r\n sp1.wait_resource,\r\n sp1.wait_time,\r\n sp1.blocked,\r\n sp1.hostprocess,\r\n sp1.is_user_process\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n sp2.spid AS session_id,\r\n v2.request_id,\r\n MAX(sp2.login_time) AS login_time,\r\n MAX(sp2.last_batch) AS last_request_end_time,\r\n MAX(CONVERT(VARCHAR(30), RTRIM(sp2.status)) COLLATE Latin1_General_Bin2) AS status,\r\n MAX(CONVERT(VARCHAR(32), RTRIM(sp2.cmd)) COLLATE Latin1_General_Bin2) AS cmd,\r\n MAX(sp2.stmt_start) AS stmt_start,\r\n MAX(sp2.stmt_end) AS stmt_end,\r\n MAX(sp2.sql_handle) AS sql_handle,\r\n MAX(CONVERT(sysname, RTRIM(sp2.hostname)) COLLATE SQL_Latin1_General_CP1_CI_AS) AS host_name,\r\n MAX(CONVERT(sysname, RTRIM(sp2.loginame)) COLLATE SQL_Latin1_General_CP1_CI_AS) AS login_name,\r\n MAX\r\n (\r\n CASE\r\n WHEN blk.queue_id IS NOT NULL THEN\r\n N''Service Broker\r\n database_id: '' + CONVERT(NVARCHAR, blk.database_id) +\r\n N'' queue_id: '' + CONVERT(NVARCHAR, blk.queue_id)\r\n ELSE\r\n CONVERT\r\n (\r\n sysname,\r\n RTRIM(sp2.program_name)\r\n )\r\n END COLLATE SQL_Latin1_General_CP1_CI_AS\r\n ) AS program_name,\r\n MAX(sp2.dbid) AS database_id,\r\n MAX(sp2.memusage) AS memory_usage,\r\n MAX(sp2.open_tran) AS open_tran_count,\r\n RTRIM(sp2.lastwaittype) AS wait_type,\r\n v2.wait_resource,\r\n MAX(sp2.waittime) AS wait_time,\r\n COALESCE(NULLIF(sp2.blocked, sp2.spid), 0) AS blocked,\r\n MAX\r\n (\r\n CASE\r\n WHEN blk.session_id = sp2.spid THEN\r\n ''blocker''\r\n ELSE\r\n RTRIM(sp2.hostprocess)\r\n END\r\n ) AS hostprocess,\r\n CONVERT\r\n (\r\n BIT,\r\n MAX\r\n (\r\n CASE\r\n WHEN sp2.hostprocess > '''' THEN\r\n 1\r\n ELSE\r\n 0\r\n END\r\n )\r\n ) AS is_user_process\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n session_id,\r\n CONVERT(INT, NULL) AS queue_id,\r\n CONVERT(INT, NULL) AS database_id\r\n FROM @blockers\r\n\r\n UNION ALL\r\n\r\n SELECT TOP(@i)\r\n CONVERT(SMALLINT, 0),\r\n CONVERT(INT, NULL) AS queue_id,\r\n CONVERT(INT, NULL) AS database_id\r\n WHERE\r\n @blocker = 0\r\n\r\n UNION ALL\r\n\r\n SELECT TOP(@i)\r\n CONVERT(SMALLINT, spid),\r\n queue_id,\r\n database_id\r\n FROM sys.dm_broker_activated_tasks\r\n WHERE\r\n @blocker = 0\r\n ) AS blk\r\n INNER JOIN sys.sysprocesses AS sp2 ON\r\n sp2.spid = blk.session_id\r\n OR\r\n (\r\n blk.session_id = 0\r\n AND @blocker = 0\r\n )\r\n CROSS APPLY\r\n (\r\n SELECT\r\n CASE sp2.status\r\n WHEN ''sleeping'' THEN\r\n CONVERT(INT, 0)\r\n ELSE\r\n sp2.request_id\r\n END AS request_id,\r\n RTRIM\r\n (\r\n LEFT\r\n (\r\n sp2.waitresource COLLATE Latin1_General_Bin2,\r\n ISNULL(NULLIF(CHARINDEX('' (LATCH '', sp2.waitresource COLLATE Latin1_General_Bin2) - 1, -1), 256)\r\n )\r\n ) AS wait_resource\r\n ) AS v2\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info = 0\r\n AND @find_block_leaders = 0\r\n ) THEN\r\n 'WHERE\r\n sp2.ecid = 0\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'GROUP BY\r\n sp2.spid,\r\n v2.request_id,\r\n RTRIM(sp2.lastwaittype),\r\n v2.wait_resource,\r\n COALESCE(NULLIF(sp2.blocked, sp2.spid), 0)\r\n ) AS sp1\r\n ) AS sp0\r\n WHERE\r\n @blocker = 1\r\n OR\r\n (1=1\r\n ' +\r\n --inclusive filter\r\n CASE\r\n WHEN @filter <> '' THEN\r\n CASE @filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN CONVERT(SMALLINT, @filter) <> 0 THEN\r\n 'AND sp0.session_id = CONVERT(SMALLINT, @filter)\r\n '\r\n ELSE\r\n ''\r\n END\r\n WHEN 'program' THEN\r\n 'AND sp0.program_name LIKE @filter\r\n '\r\n WHEN 'login' THEN\r\n 'AND sp0.login_name LIKE @filter\r\n '\r\n WHEN 'host' THEN\r\n 'AND sp0.host_name LIKE @filter\r\n '\r\n WHEN 'database' THEN\r\n 'AND DB_NAME(sp0.database_id) LIKE @filter\r\n '\r\n ELSE\r\n ''\r\n END\r\n ELSE\r\n ''\r\n END +\r\n --exclusive filter\r\n CASE\r\n WHEN @not_filter <> '' THEN\r\n CASE @not_filter_type\r\n WHEN 'session' THEN\r\n CASE\r\n WHEN CONVERT(SMALLINT, @not_filter) <> 0 THEN\r\n 'AND sp0.session_id <> CONVERT(SMALLINT, @not_filter)\r\n '\r\n ELSE\r\n ''\r\n END\r\n WHEN 'program' THEN\r\n 'AND sp0.program_name NOT LIKE @not_filter\r\n '\r\n WHEN 'login' THEN\r\n 'AND sp0.login_name NOT LIKE @not_filter\r\n '\r\n WHEN 'host' THEN\r\n 'AND sp0.host_name NOT LIKE @not_filter\r\n '\r\n WHEN 'database' THEN\r\n 'AND DB_NAME(sp0.database_id) NOT LIKE @not_filter\r\n '\r\n ELSE\r\n ''\r\n END\r\n ELSE\r\n ''\r\n END +\r\n CASE @show_own_spid\r\n WHEN 1 THEN\r\n ''\r\n ELSE\r\n 'AND sp0.session_id <> @@spid\r\n '\r\n END +\r\n CASE\r\n WHEN @show_system_spids = 0 THEN\r\n 'AND sp0.hostprocess > ''''\r\n '\r\n ELSE\r\n ''\r\n END +\r\n CASE @show_sleeping_spids\r\n WHEN 0 THEN\r\n 'AND sp0.status <> ''sleeping''\r\n '\r\n WHEN 1 THEN\r\n 'AND\r\n (\r\n sp0.status <> ''sleeping''\r\n OR sp0.open_tran_count > 0\r\n )\r\n '\r\n ELSE\r\n ''\r\n END +\r\n ')\r\n ) AS spx\r\n ) AS spy\r\n WHERE\r\n spy.r = 1;\r\n ' +\r\n CASE @recursion\r\n WHEN 1 THEN\r\n 'IF @@ROWCOUNT > 0\r\n BEGIN;\r\n INSERT @blockers\r\n (\r\n session_id\r\n )\r\n SELECT TOP(@i)\r\n blocked\r\n FROM @sessions\r\n WHERE\r\n NULLIF(blocked, 0) IS NOT NULL\r\n\r\n EXCEPT\r\n\r\n SELECT TOP(@i)\r\n session_id\r\n FROM @sessions;\r\n ' +\r\n\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info > 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'IF @@ROWCOUNT > 0\r\n BEGIN;\r\n SET @blocker = 1;\r\n GOTO BLOCKERS;\r\n END;\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'END;\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'SELECT TOP(@i)\r\n @recursion AS recursion,\r\n x.session_id,\r\n x.request_id,\r\n DENSE_RANK() OVER\r\n (\r\n ORDER BY\r\n x.session_id\r\n ) AS session_number,\r\n ' +\r\n CASE\r\n WHEN @output_column_list LIKE '%|[dd hh:mm:ss.mss|]%' ESCAPE '|' THEN\r\n 'x.elapsed_time '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS elapsed_time,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[dd hh:mm:ss.mss (avg)|]%' ESCAPE '|' OR\r\n @output_column_list LIKE '%|[avg_elapsed_time|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.avg_elapsed_time / 1000 '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS avg_elapsed_time,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[physical_io|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[physical_io_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.physical_io '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS physical_io,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[reads|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[reads_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.reads '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS reads,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[physical_reads|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[physical_reads_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.physical_reads '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS physical_reads,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[writes|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[writes_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.writes '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS writes,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[tempdb_allocations|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tempdb_allocations_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.tempdb_allocations '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS tempdb_allocations,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[tempdb_current|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tempdb_current_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.tempdb_current '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS tempdb_current,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.CPU '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS CPU,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n AND @get_task_info = 2\r\n AND @sys_info = 1\r\n THEN\r\n 'x.thread_CPU_snapshot '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS thread_CPU_snapshot,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[context_switches|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[context_switches_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.context_switches '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS context_switches,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[used_memory|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[used_memory_delta|]%' ESCAPE '|'\r\n THEN\r\n CASE\r\n WHEN @get_memory_info = 1 THEN\r\n 'COALESCE(x.mg_used_memory_kb / 8, x.used_memory) '\r\n ELSE\r\n 'x.used_memory '\r\n END\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS used_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[max_used_memory|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[max_used_memory_delta|]%' ESCAPE '|'\r\n THEN\r\n 'x.max_used_memory_kb / 8 '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS max_used_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[requested_memory|]%' ESCAPE '|'\r\n THEN\r\n 'x.requested_memory_kb / 8 '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS requested_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[granted_memory|]%' ESCAPE '|'\r\n THEN\r\n 'x.mg_granted_memory_kb / 8 '\r\n ELSE\r\n '0 '\r\n END +\r\n 'AS granted_memory,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[tasks|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.tasks '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS tasks,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[status|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[sql_command|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.status '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS status,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[wait_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n CASE @get_task_info\r\n WHEN 2 THEN\r\n 'COALESCE(x.task_wait_info, x.sys_wait_info) '\r\n ELSE\r\n 'x.sys_wait_info '\r\n END\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS wait_info,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[tran_start_time|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tran_log_writes|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.transaction_id '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS transaction_id,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[open_tran_count|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.open_tran_count '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS open_tran_count,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.sql_handle '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS sql_handle,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.statement_start_offset '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS statement_start_offset,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n )\r\n AND @recursion = 1\r\n THEN\r\n 'x.statement_end_offset '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS statement_end_offset,\r\n ' +\r\n 'NULL AS sql_text,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.plan_handle '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS plan_handle,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[blocking_session_id|]%' ESCAPE '|' OR @find_block_leaders = 1\r\n AND @recursion = 1\r\n THEN\r\n 'NULLIF(x.blocking_session_id, 0) '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS blocking_session_id,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[percent_complete|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.percent_complete '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS percent_complete,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[host_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.host_name '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS host_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[login_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.login_name '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS login_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[database_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'DB_NAME(x.database_id) '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS database_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[program_name|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.program_name '\r\n ELSE\r\n ''''' '\r\n END +\r\n 'AS program_name,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n '(\r\n SELECT TOP(@i)\r\n x.text_size,\r\n x.language,\r\n x.date_format,\r\n x.date_first,\r\n CASE x.quoted_identifier\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS quoted_identifier,\r\n CASE x.arithabort\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS arithabort,\r\n CASE x.ansi_null_dflt_on\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_null_dflt_on,\r\n CASE x.ansi_defaults\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_defaults,\r\n CASE x.ansi_warnings\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_warnings,\r\n CASE x.ansi_padding\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_padding,\r\n CASE ansi_nulls\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS ansi_nulls,\r\n CASE x.concat_null_yields_null\r\n WHEN 0 THEN ''OFF''\r\n WHEN 1 THEN ''ON''\r\n END AS concat_null_yields_null,\r\n CASE x.transaction_isolation_level\r\n WHEN 0 THEN ''Unspecified''\r\n WHEN 1 THEN ''ReadUncomitted''\r\n WHEN 2 THEN ''ReadCommitted''\r\n WHEN 3 THEN ''Repeatable''\r\n WHEN 4 THEN ''Serializable''\r\n WHEN 5 THEN ''Snapshot''\r\n END AS transaction_isolation_level,\r\n x.lock_timeout,\r\n x.deadlock_priority,\r\n x.row_count,\r\n x.command_type,\r\n ' +\r\n CASE\r\n WHEN OBJECT_ID('master.dbo.fn_varbintohexstr') IS NOT NULL THEN\r\n 'master.dbo.fn_varbintohexstr(x.sql_handle) AS sql_handle,\r\n master.dbo.fn_varbintohexstr(x.plan_handle) AS plan_handle,'\r\n ELSE\r\n 'CONVERT(VARCHAR(256), x.sql_handle, 1) AS sql_handle,\r\n CONVERT(VARCHAR(256), x.plan_handle, 1) AS plan_handle,'\r\n END +\r\n '\r\n x.statement_start_offset,\r\n x.statement_end_offset,\r\n ' +\r\n CASE\r\n WHEN @output_column_list LIKE '%|[program_name|]%' ESCAPE '|' THEN\r\n '(\r\n SELECT TOP(1)\r\n CONVERT(uniqueidentifier, CONVERT(XML, '''').value(''xs:hexBinary( substring(sql:column(\"agent_info.job_id_string\"), 0) )'', ''binary(16)'')) AS job_id,\r\n agent_info.step_id,\r\n (\r\n SELECT TOP(1)\r\n NULL\r\n FOR XML\r\n PATH(''job_name''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(1)\r\n NULL\r\n FOR XML\r\n PATH(''step_name''),\r\n TYPE\r\n )\r\n FROM\r\n (\r\n SELECT TOP(1)\r\n SUBSTRING(x.program_name, CHARINDEX(''0x'', x.program_name) + 2, 32) AS job_id_string,\r\n SUBSTRING(x.program_name, CHARINDEX('': Step '', x.program_name) + 7, CHARINDEX('')'', x.program_name, CHARINDEX('': Step '', x.program_name)) - (CHARINDEX('': Step '', x.program_name) + 7)) AS step_id\r\n WHERE\r\n x.program_name LIKE N''SQLAgent - TSQL JobStep (Job 0x%''\r\n ) AS agent_info\r\n FOR XML\r\n PATH(''agent_job_info''),\r\n TYPE\r\n ),\r\n '\r\n ELSE ''\r\n END +\r\n CASE\r\n WHEN @get_task_info = 2 THEN\r\n 'CONVERT(XML, x.block_info) AS block_info,\r\n '\r\n ELSE\r\n ''\r\n END + '\r\n x.host_process_id,\r\n x.group_id,\r\n x.original_login_name,\r\n ' +\r\n CASE\r\n WHEN OBJECT_ID('master.dbo.fn_varbintohexstr') IS NOT NULL THEN\r\n 'master.dbo.fn_varbintohexstr(x.context_info) AS context_info'\r\n ELSE\r\n 'CONVERT(VARCHAR(256), x.context_info, 1) AS context_info'\r\n END + '\r\n FOR XML\r\n PATH(''additional_info''),\r\n TYPE\r\n ) '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS additional_info,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[memory_info|]%' ESCAPE '|'\r\n AND @get_memory_info = 1 THEN'\r\n (\r\n SELECT TOP(@i)\r\n (\r\n SELECT TOP(@i) \r\n x.request_time,\r\n x.grant_time,\r\n x.wait_time_ms,\r\n x.requested_memory_kb, \r\n x.mg_granted_memory_kb AS granted_memory_kb,\r\n x.mg_used_memory_kb AS used_memory_kb,\r\n x.max_used_memory_kb,\r\n x.ideal_memory_kb, \r\n x.required_memory_kb,\r\n x.queue_id,\r\n x.wait_order,\r\n x.is_next_candidate,\r\n x.dop,\r\n CAST(x.query_cost AS NUMERIC(38, 4)) AS query_cost\r\n FOR XML\r\n PATH(''memory_grant''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(@i)\r\n x.timeout_error_count,\r\n x.target_memory_kb,\r\n x.max_target_memory_kb,\r\n x.total_memory_kb,\r\n x.available_memory_kb,\r\n x.rs_granted_memory_kb AS granted_memory_kb,\r\n x.rs_used_memory_kb AS used_memory_kb,\r\n x.grantee_count,\r\n x.waiter_count\r\n FOR XML\r\n PATH(''resource_semaphore''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(@i) \r\n x.wg_name AS name,\r\n x.request_max_memory_grant_percent,\r\n x.request_max_cpu_time_sec,\r\n x.request_memory_grant_timeout_sec,\r\n x.max_dop\r\n FOR XML\r\n PATH(''workload_group''),\r\n TYPE\r\n ),\r\n (\r\n SELECT TOP(@i) \r\n x.rp_name AS name,\r\n x.min_memory_percent,\r\n x.max_memory_percent,\r\n x.min_cpu_percent,\r\n x.max_cpu_percent\r\n FOR XML\r\n PATH(''resource_pool''),\r\n TYPE\r\n )\r\n WHERE\r\n x.request_time IS NOT NULL\r\n FOR XML\r\n PATH(''memory_info''),\r\n TYPE\r\n ) \r\n '\r\n ELSE\r\n 'NULL '\r\n END + 'AS memory_info,\r\n x.start_time,\r\n '\r\n +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[login_time|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n THEN\r\n 'x.login_time '\r\n ELSE\r\n 'NULL '\r\n END +\r\n 'AS login_time,\r\n x.last_request_start_time\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n y.*,\r\n CASE\r\n WHEN DATEDIFF(hour, y.start_time, GETDATE()) > 576 THEN\r\n DATEDIFF(second, GETDATE(), y.start_time)\r\n ELSE DATEDIFF(ms, y.start_time, GETDATE())\r\n END AS elapsed_time,\r\n COALESCE(tempdb_info.tempdb_allocations, 0) AS tempdb_allocations,\r\n COALESCE\r\n (\r\n CASE\r\n WHEN tempdb_info.tempdb_current < 0 THEN 0\r\n ELSE tempdb_info.tempdb_current\r\n END,\r\n 0\r\n ) AS tempdb_current,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'N''('' + CONVERT(NVARCHAR, y.wait_duration_ms) + N''ms)'' +\r\n y.wait_type +\r\n CASE\r\n WHEN y.wait_type LIKE N''PAGE%LATCH_%'' THEN\r\n N'':'' +\r\n COALESCE(DB_NAME(CONVERT(INT, LEFT(y.resource_description, CHARINDEX(N'':'', y.resource_description) - 1))), N''(null)'') +\r\n N'':'' +\r\n SUBSTRING(y.resource_description, CHARINDEX(N'':'', y.resource_description) + 1, LEN(y.resource_description) - CHARINDEX(N'':'', REVERSE(y.resource_description)) - CHARINDEX(N'':'', y.resource_description)) +\r\n N''('' +\r\n CASE\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 1 OR\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) % 8088 = 0\r\n THEN\r\n N''PFS''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 2 OR\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) % 511232 = 0\r\n THEN\r\n N''GAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 3 OR\r\n (CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 1) % 511232 = 0\r\n THEN\r\n N''SGAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 6 OR\r\n (CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 6) % 511232 = 0\r\n THEN\r\n N''DCM''\r\n WHEN\r\n CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) = 7 OR\r\n (CONVERT(INT, RIGHT(y.resource_description, CHARINDEX(N'':'', REVERSE(y.resource_description)) - 1)) - 7) % 511232 = 0\r\n THEN\r\n N''BCM''\r\n ELSE\r\n N''*''\r\n END +\r\n N'')''\r\n WHEN y.wait_type IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n N'':'' +\r\n SUBSTRING\r\n (\r\n y.resource_description,\r\n CHARINDEX(N''nodeId'', y.resource_description) + 7,\r\n CASE\r\n WHEN CHARINDEX(N'' '', y.resource_description, CHARINDEX(N''nodeId'', y.resource_description)) > 0\r\n THEN CHARINDEX(N'' '', y.resource_description, CHARINDEX(N''nodeId'', y.resource_description) + 7) - 7 - CHARINDEX(N''nodeId'', y.resource_description)\r\n ELSE 4\r\n END\r\n )\r\n WHEN y.wait_type LIKE N''LATCH[_]%'' THEN\r\n N'' ['' + LEFT(y.resource_description, COALESCE(NULLIF(CHARINDEX(N'' '', y.resource_description), 0), LEN(y.resource_description) + 1) - 1) + N'']''\r\n WHEN\r\n y.wait_type = N''OLEDB''\r\n AND y.resource_description LIKE N''%(SPID=%)'' THEN\r\n N''['' + LEFT(y.resource_description, CHARINDEX(N''(SPID='', y.resource_description) - 2) +\r\n N'':'' + SUBSTRING(y.resource_description, CHARINDEX(N''(SPID='', y.resource_description) + 6, CHARINDEX(N'')'', y.resource_description, (CHARINDEX(N''(SPID='', y.resource_description) + 6)) - (CHARINDEX(N''(SPID='', y.resource_description) + 6)) + '']''\r\n ELSE\r\n N''''\r\n END COLLATE Latin1_General_Bin2 AS sys_wait_info,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n CASE\r\n WHEN @get_task_info = 2 THEN\r\n 'tasks.physical_io,\r\n tasks.context_switches,\r\n tasks.tasks,\r\n tasks.block_info,\r\n tasks.wait_info AS task_wait_info,\r\n tasks.thread_CPU_snapshot,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n CASE\r\n WHEN NOT (@get_avg_time = 1 AND @recursion = 1) THEN\r\n 'CONVERT(INT, NULL) '\r\n ELSE\r\n 'qs.total_elapsed_time / qs.execution_count '\r\n END +\r\n 'AS avg_elapsed_time\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n sp.session_id,\r\n sp.request_id,\r\n COALESCE(r.logical_reads, s.logical_reads) AS reads,\r\n COALESCE(r.reads, s.reads) AS physical_reads,\r\n COALESCE(r.writes, s.writes) AS writes,\r\n COALESCE(r.CPU_time, s.CPU_time) AS CPU,\r\n ' +\r\n CASE\r\n WHEN @get_memory_info = 1 THEN\r\n 'sp.memory_usage AS used_memory,\r\n mg.used_memory_kb AS mg_used_memory_kb,\r\n mg.max_used_memory_kb,\r\n mg.request_time,\r\n mg.grant_time,\r\n mg.wait_time_ms,\r\n mg.requested_memory_kb,\r\n mg.granted_memory_kb AS mg_granted_memory_kb,\r\n mg.required_memory_kb,\r\n mg.ideal_memory_kb,\r\n mg.dop AS dop,\r\n mg.query_cost AS query_cost,\r\n mg.queue_id AS queue_id,\r\n mg.wait_order AS wait_order,\r\n mg.is_next_candidate,\r\n rs.target_memory_kb,\r\n rs.max_target_memory_kb,\r\n rs.total_memory_kb,\r\n rs.available_memory_kb,\r\n rs.granted_memory_kb AS rs_granted_memory_kb,\r\n rs.used_memory_kb AS rs_used_memory_kb,\r\n rs.grantee_count,\r\n rs.waiter_count,\r\n rs.timeout_error_count,\r\n wg.name AS wg_name,\r\n wg.request_max_memory_grant_percent,\r\n wg.request_max_cpu_time_sec,\r\n wg.request_memory_grant_timeout_sec,\r\n wg.max_dop,\r\n rp.name AS rp_name,\r\n rp.min_memory_percent,\r\n rp.max_memory_percent,\r\n rp.min_cpu_percent,\r\n rp.max_cpu_percent,\r\n '\r\n ELSE\r\n 'sp.memory_usage + COALESCE(r.granted_query_memory, 0) AS used_memory,\r\n '\r\n END +\r\n 'LOWER(sp.status) AS status,\r\n COALESCE(r.sql_handle, sp.sql_handle) AS sql_handle,\r\n COALESCE(r.statement_start_offset, sp.statement_start_offset) AS statement_start_offset,\r\n COALESCE(r.statement_end_offset, sp.statement_end_offset) AS statement_end_offset,\r\n ' +\r\n CASE\r\n WHEN\r\n (\r\n @get_task_info <> 0\r\n OR @find_block_leaders = 1\r\n ) THEN\r\n 'sp.wait_type COLLATE Latin1_General_Bin2 AS wait_type,\r\n sp.wait_resource COLLATE Latin1_General_Bin2 AS resource_description,\r\n sp.wait_time AS wait_duration_ms,\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'NULLIF(sp.blocked, 0) AS blocking_session_id,\r\n r.plan_handle,\r\n NULLIF(r.percent_complete, 0) AS percent_complete,\r\n sp.host_name,\r\n sp.login_name,\r\n sp.program_name,\r\n s.host_process_id,\r\n COALESCE(r.text_size, s.text_size) AS text_size,\r\n COALESCE(r.language, s.language) AS language,\r\n COALESCE(r.date_format, s.date_format) AS date_format,\r\n COALESCE(r.date_first, s.date_first) AS date_first,\r\n COALESCE(r.quoted_identifier, s.quoted_identifier) AS quoted_identifier,\r\n COALESCE(r.arithabort, s.arithabort) AS arithabort,\r\n COALESCE(r.ansi_null_dflt_on, s.ansi_null_dflt_on) AS ansi_null_dflt_on,\r\n COALESCE(r.ansi_defaults, s.ansi_defaults) AS ansi_defaults,\r\n COALESCE(r.ansi_warnings, s.ansi_warnings) AS ansi_warnings,\r\n COALESCE(r.ansi_padding, s.ansi_padding) AS ansi_padding,\r\n COALESCE(r.ansi_nulls, s.ansi_nulls) AS ansi_nulls,\r\n COALESCE(r.concat_null_yields_null, s.concat_null_yields_null) AS concat_null_yields_null,\r\n COALESCE(r.transaction_isolation_level, s.transaction_isolation_level) AS transaction_isolation_level,\r\n COALESCE(r.lock_timeout, s.lock_timeout) AS lock_timeout,\r\n COALESCE(r.deadlock_priority, s.deadlock_priority) AS deadlock_priority,\r\n COALESCE(r.row_count, s.row_count) AS row_count,\r\n COALESCE(r.command, sp.cmd) AS command_type,\r\n NULLIF(COALESCE(r.context_info, s.context_info), 0x) AS context_info,\r\n COALESCE\r\n (\r\n CASE\r\n WHEN\r\n (\r\n s.is_user_process = 0\r\n AND r.total_elapsed_time >= 0\r\n ) THEN\r\n DATEADD\r\n (\r\n ms,\r\n 1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),\r\n DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())\r\n )\r\n END,\r\n NULLIF(COALESCE(r.start_time, sp.last_request_end_time), CONVERT(DATETIME, ''19000101'', 112)),\r\n sp.login_time\r\n ) AS start_time,\r\n sp.login_time,\r\n CASE\r\n WHEN s.is_user_process = 1 THEN\r\n s.last_request_start_time\r\n ELSE\r\n COALESCE\r\n (\r\n DATEADD\r\n (\r\n ms,\r\n 1000 * (DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())) / 500) - DATEPART(ms, DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())),\r\n DATEADD(second, -(r.total_elapsed_time / 1000), GETDATE())\r\n ),\r\n s.last_request_start_time\r\n )\r\n END AS last_request_start_time,\r\n r.transaction_id,\r\n sp.database_id,\r\n sp.open_tran_count,\r\n ' +\r\n CASE\r\n WHEN EXISTS\r\n (\r\n SELECT\r\n *\r\n FROM sys.all_columns AS ac\r\n WHERE\r\n ac.object_id = OBJECT_ID('sys.dm_exec_sessions')\r\n AND ac.name = 'group_id'\r\n )\r\n THEN 's.group_id,'\r\n ELSE 'CONVERT(INT, NULL) AS group_id,'\r\n END + '\r\n s.original_login_name\r\n FROM ' +\r\n CASE\r\n WHEN @get_memory_info = 1 THEN\r\n '(\r\n SELECT TOP(@i)\r\n rp0.*\r\n FROM sys.resource_governor_resource_pools AS rp0\r\n ) AS rp\r\n RIGHT OUTER HASH JOIN\r\n (\r\n (\r\n SELECT TOP(@i)\r\n wg0.*\r\n FROM sys.resource_governor_workload_groups AS wg0\r\n ) AS wg\r\n RIGHT OUTER HASH JOIN\r\n (\r\n (\r\n SELECT TOP(@i)\r\n rs0.*\r\n FROM sys.dm_exec_query_resource_semaphores AS rs0\r\n ) AS rs\r\n RIGHT OUTER HASH JOIN\r\n (\r\n ' + @core_session_join +\r\n 'LEFT OUTER LOOP JOIN sys.dm_exec_query_memory_grants AS mg ON\r\n sp.session_id = mg.session_id\r\n AND sp.request_id = mg.request_id\r\n ) ON\r\n rs.resource_semaphore_id = mg.resource_semaphore_id\r\n AND rs.pool_id = mg.pool_id\r\n ) ON\r\n wg.group_id = s.group_id\r\n ) ON\r\n rp.pool_id = wg.pool_id '\r\n ELSE @core_session_join\r\n END + '\r\n ) AS y\r\n ' +\r\n CASE\r\n WHEN @get_task_info = 2 THEN\r\n CONVERT(VARCHAR(MAX), '') +\r\n 'LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n task_nodes.task_node.value(''(session_id/text())[1]'', ''SMALLINT'') AS session_id,\r\n task_nodes.task_node.value(''(request_id/text())[1]'', ''INT'') AS request_id,\r\n task_nodes.task_node.value(''(physical_io/text())[1]'', ''BIGINT'') AS physical_io,\r\n task_nodes.task_node.value(''(context_switches/text())[1]'', ''BIGINT'') AS context_switches,\r\n task_nodes.task_node.value(''(tasks/text())[1]'', ''INT'') AS tasks,\r\n task_nodes.task_node.value(''(block_info/text())[1]'', ''NVARCHAR(4000)'') AS block_info,\r\n task_nodes.task_node.value(''(waits/text())[1]'', ''NVARCHAR(4000)'') AS wait_info,\r\n task_nodes.task_node.value(''(thread_CPU_snapshot/text())[1]'', ''BIGINT'') AS thread_CPU_snapshot\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CONVERT\r\n (\r\n XML,\r\n REPLACE\r\n (\r\n CONVERT(NVARCHAR(MAX), tasks_raw.task_xml_raw) COLLATE Latin1_General_Bin2,\r\n N'''',\r\n N'', ''\r\n )\r\n ) AS task_xml\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.session_id\r\n ELSE\r\n NULL\r\n END AS [session_id],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.request_id\r\n ELSE\r\n NULL\r\n END AS [request_id],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.physical_io\r\n ELSE\r\n NULL\r\n END AS [physical_io],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.context_switches\r\n ELSE\r\n NULL\r\n END AS [context_switches],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.thread_CPU_snapshot\r\n ELSE\r\n NULL\r\n END AS [thread_CPU_snapshot],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.tasks\r\n ELSE\r\n NULL\r\n END AS [tasks],\r\n CASE waits.r\r\n WHEN 1 THEN\r\n waits.block_info\r\n ELSE\r\n NULL\r\n END AS [block_info],\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n N''('' +\r\n CONVERT(NVARCHAR, num_waits) + N''x: '' +\r\n CASE num_waits\r\n WHEN 1 THEN\r\n CONVERT(NVARCHAR, min_wait_time) + N''ms''\r\n WHEN 2 THEN\r\n CASE\r\n WHEN min_wait_time <> max_wait_time THEN\r\n CONVERT(NVARCHAR, min_wait_time) + N''/'' + CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n ELSE\r\n CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n END\r\n ELSE\r\n CASE\r\n WHEN min_wait_time <> max_wait_time THEN\r\n CONVERT(NVARCHAR, min_wait_time) + N''/'' + CONVERT(NVARCHAR, avg_wait_time) + N''/'' + CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n ELSE\r\n CONVERT(NVARCHAR, max_wait_time) + N''ms''\r\n END\r\n END +\r\n N'')'' + wait_type COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ) AS [waits]\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n w1.*,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n w1.session_id,\r\n w1.request_id\r\n ORDER BY\r\n w1.block_info DESC,\r\n w1.num_waits DESC,\r\n w1.wait_type\r\n ) AS r\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n task_info.session_id,\r\n task_info.request_id,\r\n task_info.physical_io,\r\n task_info.context_switches,\r\n task_info.thread_CPU_snapshot,\r\n task_info.num_tasks AS tasks,\r\n CASE\r\n WHEN task_info.runnable_time IS NOT NULL THEN\r\n ''RUNNABLE''\r\n ELSE\r\n wt2.wait_type\r\n END AS wait_type,\r\n NULLIF(COUNT(COALESCE(task_info.runnable_time, wt2.waiting_task_address)), 0) AS num_waits,\r\n MIN(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS min_wait_time,\r\n AVG(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS avg_wait_time,\r\n MAX(COALESCE(task_info.runnable_time, wt2.wait_duration_ms)) AS max_wait_time,\r\n MAX(wt2.block_info) AS block_info\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n t.session_id,\r\n t.request_id,\r\n SUM(CONVERT(BIGINT, t.pending_io_count)) OVER (PARTITION BY t.session_id, t.request_id) AS physical_io,\r\n SUM(CONVERT(BIGINT, t.context_switches_count)) OVER (PARTITION BY t.session_id, t.request_id) AS context_switches,\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n AND @sys_info = 1\r\n THEN\r\n 'SUM(tr.usermode_time + tr.kernel_time) OVER (PARTITION BY t.session_id, t.request_id) '\r\n ELSE\r\n 'CONVERT(BIGINT, NULL) '\r\n END +\r\n ' AS thread_CPU_snapshot,\r\n COUNT(*) OVER (PARTITION BY t.session_id, t.request_id) AS num_tasks,\r\n t.task_address,\r\n t.task_state,\r\n CASE\r\n WHEN\r\n t.task_state = ''RUNNABLE''\r\n AND w.runnable_time > 0 THEN\r\n w.runnable_time\r\n ELSE\r\n NULL\r\n END AS runnable_time\r\n FROM sys.dm_os_tasks AS t\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n sp2.session_id\r\n FROM @sessions AS sp2\r\n WHERE\r\n sp2.session_id = t.session_id\r\n AND sp2.request_id = t.request_id\r\n AND sp2.status <> ''sleeping''\r\n ) AS sp20\r\n LEFT OUTER HASH JOIN\r\n (\r\n ' +\r\n CASE\r\n WHEN @sys_info = 1 THEN\r\n 'SELECT TOP(@i)\r\n (\r\n SELECT TOP(@i)\r\n ms_ticks\r\n FROM sys.dm_os_sys_info\r\n ) -\r\n w0.wait_resumed_ms_ticks AS runnable_time,\r\n w0.worker_address,\r\n w0.thread_address,\r\n w0.task_bound_ms_ticks\r\n FROM sys.dm_os_workers AS w0\r\n WHERE\r\n w0.state = ''RUNNABLE''\r\n OR @first_collection_ms_ticks >= w0.task_bound_ms_ticks'\r\n ELSE\r\n 'SELECT\r\n CONVERT(BIGINT, NULL) AS runnable_time,\r\n CONVERT(VARBINARY(8), NULL) AS worker_address,\r\n CONVERT(VARBINARY(8), NULL) AS thread_address,\r\n CONVERT(BIGINT, NULL) AS task_bound_ms_ticks\r\n WHERE\r\n 1 = 0'\r\n END +\r\n '\r\n ) AS w ON\r\n w.worker_address = t.worker_address\r\n ' +\r\n CASE\r\n WHEN\r\n @output_column_list LIKE '%|[CPU_delta|]%' ESCAPE '|'\r\n AND @sys_info = 1\r\n THEN\r\n 'LEFT OUTER HASH JOIN sys.dm_os_threads AS tr ON\r\n tr.thread_address = w.thread_address\r\n AND @first_collection_ms_ticks >= w.task_bound_ms_ticks\r\n '\r\n ELSE\r\n ''\r\n END +\r\n ') AS task_info\r\n LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n wt1.wait_type,\r\n wt1.waiting_task_address,\r\n MAX(wt1.wait_duration_ms) AS wait_duration_ms,\r\n MAX(wt1.block_info) AS block_info\r\n FROM\r\n (\r\n SELECT DISTINCT TOP(@i)\r\n wt.wait_type +\r\n CASE\r\n WHEN wt.wait_type LIKE N''PAGE%LATCH_%'' THEN\r\n '':'' +\r\n COALESCE(DB_NAME(CONVERT(INT, LEFT(wt.resource_description, CHARINDEX(N'':'', wt.resource_description) - 1))), N''(null)'') +\r\n N'':'' +\r\n SUBSTRING(wt.resource_description, CHARINDEX(N'':'', wt.resource_description) + 1, LEN(wt.resource_description) - CHARINDEX(N'':'', REVERSE(wt.resource_description)) - CHARINDEX(N'':'', wt.resource_description)) +\r\n N''('' +\r\n CASE\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 1 OR\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) % 8088 = 0\r\n THEN\r\n N''PFS''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 2 OR\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) % 511232 = 0\r\n THEN\r\n N''GAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 3 OR\r\n (CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 1) % 511232 = 0\r\n THEN\r\n N''SGAM''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 6 OR\r\n (CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 6) % 511232 = 0\r\n THEN\r\n N''DCM''\r\n WHEN\r\n CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) = 7 OR\r\n (CONVERT(INT, RIGHT(wt.resource_description, CHARINDEX(N'':'', REVERSE(wt.resource_description)) - 1)) - 7) % 511232 = 0\r\n THEN\r\n N''BCM''\r\n ELSE\r\n N''*''\r\n END +\r\n N'')''\r\n WHEN wt.wait_type IN (N''CXPACKET'', N''CXCONSUMER'', N''CXSYNC_PORT'', N''CXSYNC_CONSUMER'') THEN\r\n N'':'' +\r\n SUBSTRING\r\n (\r\n wt.resource_description,\r\n CHARINDEX(N''nodeId'', wt.resource_description) + 7,\r\n CASE\r\n WHEN CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''nodeId'', wt.resource_description)) > 0\r\n THEN CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''nodeId'', wt.resource_description) + 7) - 7 - CHARINDEX(N''nodeId'', wt.resource_description)\r\n ELSE 4\r\n END\r\n )\r\n WHEN wt.wait_type LIKE N''LATCH[_]%'' THEN\r\n N'' ['' + LEFT(wt.resource_description, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description), 0), LEN(wt.resource_description) + 1) - 1) + N'']''\r\n ELSE\r\n N''''\r\n END COLLATE Latin1_General_Bin2 AS wait_type,\r\n CASE\r\n WHEN\r\n (\r\n wt.blocking_session_id IS NOT NULL\r\n AND wt.wait_type LIKE N''LCK[_]%''\r\n ) THEN\r\n (\r\n SELECT TOP(@i)\r\n x.lock_type,\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n DB_NAME\r\n (\r\n CONVERT\r\n (\r\n INT,\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''dbid='', wt.resource_description), 0) + 5, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''dbid='', wt.resource_description) + 5), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''dbid='', wt.resource_description) - 5)\r\n )\r\n ),\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ) AS database_name,\r\n CASE x.lock_type\r\n WHEN N''objectlock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''objid='', wt.resource_description), 0) + 6, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''objid='', wt.resource_description) + 6), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''objid='', wt.resource_description) - 6)\r\n ELSE\r\n NULL\r\n END AS object_id,\r\n CASE x.lock_type\r\n WHEN N''filelock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''fileid='', wt.resource_description), 0) + 7, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''fileid='', wt.resource_description) + 7), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''fileid='', wt.resource_description) - 7)\r\n ELSE\r\n NULL\r\n END AS file_id,\r\n CASE\r\n WHEN x.lock_type in (N''pagelock'', N''extentlock'', N''ridlock'') THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''associatedObjectId='', wt.resource_description), 0) + 19, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''associatedObjectId='', wt.resource_description) + 19), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''associatedObjectId='', wt.resource_description) - 19)\r\n WHEN x.lock_type in (N''keylock'', N''hobtlock'', N''allocunitlock'') THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''hobtid='', wt.resource_description), 0) + 7, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''hobtid='', wt.resource_description) + 7), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''hobtid='', wt.resource_description) - 7)\r\n ELSE\r\n NULL\r\n END AS hobt_id,\r\n CASE x.lock_type\r\n WHEN N''applicationlock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''hash='', wt.resource_description), 0) + 5, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''hash='', wt.resource_description) + 5), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''hash='', wt.resource_description) - 5)\r\n ELSE\r\n NULL\r\n END AS applock_hash,\r\n CASE x.lock_type\r\n WHEN N''metadatalock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''subresource='', wt.resource_description), 0) + 12, COALESCE(NULLIF(CHARINDEX(N'' '', wt.resource_description, CHARINDEX(N''subresource='', wt.resource_description) + 12), 0), LEN(wt.resource_description) + 1) - CHARINDEX(N''subresource='', wt.resource_description) - 12)\r\n ELSE\r\n NULL\r\n END AS metadata_resource,\r\n CASE x.lock_type\r\n WHEN N''metadatalock'' THEN\r\n SUBSTRING(wt.resource_description, NULLIF(CHARINDEX(N''classid='', wt.resource_description), 0) + 8, COALESCE(NULLIF(CHARINDEX(N'' dbid='', wt.resource_description) - CHARINDEX(N''classid='', wt.resource_description), 0), LEN(wt.resource_description) + 1) - 8)\r\n ELSE\r\n NULL\r\n END AS metadata_class_id\r\n FROM\r\n (\r\n SELECT TOP(1)\r\n LEFT(wt.resource_description, CHARINDEX(N'' '', wt.resource_description) - 1) COLLATE Latin1_General_Bin2 AS lock_type\r\n ) AS x\r\n FOR XML\r\n PATH('''')\r\n )\r\n ELSE NULL\r\n END AS block_info,\r\n wt.wait_duration_ms,\r\n wt.waiting_task_address\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n wt0.wait_type COLLATE Latin1_General_Bin2 AS wait_type,\r\n LEFT\r\n (\r\n p.resource_description,\r\n ISNULL(NULLIF(CHARINDEX('' (LATCH '', p.resource_description) - 1, -1), 256)\r\n ) AS resource_description,\r\n wt0.wait_duration_ms,\r\n wt0.waiting_task_address,\r\n CASE\r\n WHEN wt0.blocking_session_id = p.blocked THEN\r\n wt0.blocking_session_id\r\n ELSE\r\n NULL\r\n END AS blocking_session_id\r\n FROM sys.dm_os_waiting_tasks AS wt0\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s0.blocked,\r\n wt0.resource_description COLLATE Latin1_General_Bin2 AS resource_description\r\n FROM @sessions AS s0\r\n WHERE\r\n s0.session_id = wt0.session_id\r\n AND COALESCE(s0.wait_type, N'''') <> N''OLEDB''\r\n AND wt0.wait_type <> N''OLEDB''\r\n ) AS p\r\n ) AS wt\r\n ) AS wt1\r\n GROUP BY\r\n wt1.wait_type,\r\n wt1.waiting_task_address\r\n ) AS wt2 ON\r\n wt2.waiting_task_address = task_info.task_address\r\n AND wt2.wait_duration_ms > 0\r\n AND task_info.runnable_time IS NULL\r\n GROUP BY\r\n task_info.session_id,\r\n task_info.request_id,\r\n task_info.physical_io,\r\n task_info.context_switches,\r\n task_info.thread_CPU_snapshot,\r\n task_info.num_tasks,\r\n CASE\r\n WHEN task_info.runnable_time IS NOT NULL THEN\r\n ''RUNNABLE''\r\n ELSE\r\n wt2.wait_type\r\n END\r\n ) AS w1\r\n ) AS waits\r\n ORDER BY\r\n waits.session_id,\r\n waits.request_id,\r\n waits.r\r\n FOR XML\r\n PATH(N''tasks''),\r\n TYPE\r\n ) AS tasks_raw (task_xml_raw)\r\n ) AS tasks_final\r\n CROSS APPLY tasks_final.task_xml.nodes(N''/tasks'') AS task_nodes (task_node)\r\n WHERE\r\n task_nodes.task_node.exist(N''session_id'') = 1\r\n ) AS tasks ON\r\n tasks.session_id = y.session_id\r\n AND tasks.request_id = y.request_id\r\n '\r\n ELSE\r\n ''\r\n END +\r\n 'LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n t_info.session_id,\r\n COALESCE(t_info.request_id, -1) AS request_id,\r\n SUM(t_info.tempdb_allocations) AS tempdb_allocations,\r\n SUM(t_info.tempdb_current) AS tempdb_current\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n tsu.session_id,\r\n tsu.request_id,\r\n tsu.user_objects_alloc_page_count +\r\n tsu.internal_objects_alloc_page_count AS tempdb_allocations,\r\n tsu.user_objects_alloc_page_count +\r\n tsu.internal_objects_alloc_page_count -\r\n tsu.user_objects_dealloc_page_count -\r\n tsu.internal_objects_dealloc_page_count AS tempdb_current\r\n FROM sys.dm_db_task_space_usage AS tsu\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s0.session_id\r\n FROM @sessions AS s0\r\n WHERE\r\n s0.session_id = tsu.session_id\r\n ) AS p\r\n\r\n UNION ALL\r\n\r\n SELECT TOP(@i)\r\n ssu.session_id,\r\n NULL AS request_id,\r\n ssu.user_objects_alloc_page_count +\r\n ssu.internal_objects_alloc_page_count AS tempdb_allocations,\r\n ssu.user_objects_alloc_page_count +\r\n ssu.internal_objects_alloc_page_count -\r\n ssu.user_objects_dealloc_page_count -\r\n ssu.internal_objects_dealloc_page_count AS tempdb_current\r\n FROM sys.dm_db_session_space_usage AS ssu\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s0.session_id\r\n FROM @sessions AS s0\r\n WHERE\r\n s0.session_id = ssu.session_id\r\n ) AS p\r\n ) AS t_info\r\n GROUP BY\r\n t_info.session_id,\r\n COALESCE(t_info.request_id, -1)\r\n ) AS tempdb_info ON\r\n tempdb_info.session_id = y.session_id\r\n AND tempdb_info.request_id =\r\n CASE\r\n WHEN y.status = N''sleeping'' THEN\r\n -1\r\n ELSE\r\n y.request_id\r\n END\r\n ' +\r\n CASE\r\n WHEN\r\n NOT\r\n (\r\n @get_avg_time = 1\r\n AND @recursion = 1\r\n ) THEN\r\n ''\r\n ELSE\r\n 'LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_exec_query_stats\r\n ) AS qs ON\r\n qs.sql_handle = y.sql_handle\r\n AND qs.plan_handle = y.plan_handle\r\n AND qs.statement_start_offset = y.statement_start_offset\r\n AND qs.statement_end_offset = y.statement_end_offset\r\n '\r\n END +\r\n ') AS x\r\n OPTION (KEEPFIXED PLAN, OPTIMIZE FOR (@i = 1)); ';\r\n\r\n SET @sql_n = CONVERT(NVARCHAR(MAX), @sql);\r\n\r\n SET @last_collection_start = GETDATE();\r\n\r\n IF\r\n @recursion = -1\r\n AND @sys_info = 1\r\n BEGIN;\r\n SELECT\r\n @first_collection_ms_ticks = ms_ticks\r\n FROM sys.dm_os_sys_info;\r\n END;\r\n\r\n INSERT #sessions\r\n (\r\n recursion,\r\n session_id,\r\n request_id,\r\n session_number,\r\n elapsed_time,\r\n avg_elapsed_time,\r\n physical_io,\r\n reads,\r\n physical_reads,\r\n writes,\r\n tempdb_allocations,\r\n tempdb_current,\r\n CPU,\r\n thread_CPU_snapshot,\r\n context_switches,\r\n used_memory,\r\n max_used_memory,\r\n requested_memory,\r\n granted_memory,\r\n tasks,\r\n status,\r\n wait_info,\r\n transaction_id,\r\n open_tran_count,\r\n sql_handle,\r\n statement_start_offset,\r\n statement_end_offset, \r\n sql_text,\r\n plan_handle,\r\n blocking_session_id,\r\n percent_complete,\r\n host_name,\r\n login_name,\r\n database_name,\r\n program_name,\r\n additional_info,\r\n memory_info,\r\n start_time,\r\n login_time,\r\n last_request_start_time\r\n )\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@recursion SMALLINT, @filter sysname, @not_filter sysname, @first_collection_ms_ticks BIGINT',\r\n @recursion, @filter, @not_filter, @first_collection_ms_ticks;\r\n\r\n --Collect transaction information?\r\n IF\r\n @recursion = 1\r\n AND\r\n (\r\n @output_column_list LIKE '%|[tran_start_time|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[tran_log_writes|]%' ESCAPE '|'\r\n OR @output_column_list LIKE '%|[implicit_tran|]%' ESCAPE '|'\r\n )\r\n BEGIN; \r\n DECLARE @i INT;\r\n SET @i = 2147483647;\r\n\r\n UPDATE s\r\n SET\r\n tran_start_time =\r\n CONVERT\r\n (\r\n DATETIME,\r\n LEFT\r\n (\r\n x.trans_info,\r\n NULLIF(CHARINDEX(NCHAR(254) COLLATE Latin1_General_Bin2, x.trans_info) - 1, -1)\r\n ),\r\n 121\r\n ),\r\n tran_log_writes =\r\n RIGHT\r\n (\r\n x.trans_info,\r\n LEN(x.trans_info) - CHARINDEX(NCHAR(254) COLLATE Latin1_General_Bin2, x.trans_info)\r\n ),\r\n implicit_tran =\r\n CASE\r\n WHEN x.implicit_tran = 1 THEN 'ON'\r\n ELSE 'OFF'\r\n END\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n trans_nodes.trans_node.value('(session_id/text())[1]', 'SMALLINT') AS session_id,\r\n COALESCE(trans_nodes.trans_node.value('(request_id/text())[1]', 'INT'), 0) AS request_id,\r\n trans_nodes.trans_node.value('(implicit_tran/text())[1]', 'INT') AS implicit_tran,\r\n trans_nodes.trans_node.value('(trans_info/text())[1]', 'NVARCHAR(4000)') AS trans_info\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CONVERT\r\n (\r\n XML,\r\n REPLACE\r\n (\r\n CONVERT(NVARCHAR(MAX), trans_raw.trans_xml_raw) COLLATE Latin1_General_Bin2,\r\n N'', N''\r\n )\r\n )\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n CASE u_trans.r\r\n WHEN 1 THEN u_trans.session_id\r\n ELSE NULL\r\n END AS [session_id],\r\n CASE u_trans.r\r\n WHEN 1 THEN u_trans.request_id\r\n ELSE NULL\r\n END AS [request_id],\r\n u_trans.implicit_tran AS [implicit_tran],\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n CASE\r\n WHEN u_trans.database_id IS NOT NULL THEN\r\n CASE u_trans.r\r\n WHEN 1 THEN COALESCE(CONVERT(NVARCHAR, u_trans.transaction_start_time, 121) + NCHAR(254), N'')\r\n ELSE N''\r\n END +\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT(VARCHAR(128), COALESCE(DB_NAME(u_trans.database_id), N'(null)')),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N'?'\r\n ) +\r\n N': ' +\r\n CONVERT(NVARCHAR, u_trans.log_record_count) + N' (' + CONVERT(NVARCHAR, u_trans.log_kb_used) + N' kB)' +\r\n N','\r\n ELSE\r\n N'N/A,'\r\n END COLLATE Latin1_General_Bin2\r\n ) AS [trans_info]\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n trans.*,\r\n ROW_NUMBER() OVER\r\n (\r\n PARTITION BY\r\n trans.session_id,\r\n trans.request_id\r\n ORDER BY\r\n trans.transaction_start_time DESC\r\n ) AS r\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n session_tran_map.session_id,\r\n session_tran_map.request_id,\r\n s_tran.database_id,\r\n COALESCE(SUM(s_tran.database_transaction_log_record_count), 0) AS log_record_count,\r\n COALESCE(SUM(s_tran.database_transaction_log_bytes_used), 0) / 1024 AS log_kb_used,\r\n MIN(s_tran.database_transaction_begin_time) AS transaction_start_time,\r\n MAX\r\n (\r\n CASE\r\n WHEN a_tran.name = 'implicit_transaction' THEN 1\r\n ELSE 0\r\n END\r\n ) AS implicit_tran\r\n FROM\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_tran_active_transactions\r\n WHERE\r\n transaction_begin_time <= @last_collection_start\r\n ) AS a_tran\r\n INNER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_tran_database_transactions\r\n WHERE\r\n database_id < 32767\r\n ) AS s_tran ON\r\n s_tran.transaction_id = a_tran.transaction_id\r\n LEFT OUTER HASH JOIN\r\n (\r\n SELECT TOP(@i)\r\n *\r\n FROM sys.dm_tran_session_transactions\r\n ) AS tst ON\r\n s_tran.transaction_id = tst.transaction_id\r\n CROSS APPLY\r\n (\r\n SELECT TOP(1)\r\n s3.session_id,\r\n s3.request_id\r\n FROM\r\n (\r\n SELECT TOP(1)\r\n s1.session_id,\r\n s1.request_id\r\n FROM #sessions AS s1\r\n WHERE\r\n s1.transaction_id = s_tran.transaction_id\r\n AND s1.recursion = 1\r\n \r\n UNION ALL\r\n \r\n SELECT TOP(1)\r\n s2.session_id,\r\n s2.request_id\r\n FROM #sessions AS s2\r\n WHERE\r\n s2.session_id = tst.session_id\r\n AND s2.recursion = 1\r\n ) AS s3\r\n ORDER BY\r\n s3.request_id\r\n ) AS session_tran_map\r\n GROUP BY\r\n session_tran_map.session_id,\r\n session_tran_map.request_id,\r\n s_tran.database_id\r\n ) AS trans\r\n ) AS u_trans\r\n FOR XML\r\n PATH('trans'),\r\n TYPE\r\n ) AS trans_raw (trans_xml_raw)\r\n ) AS trans_final (trans_xml)\r\n CROSS APPLY trans_final.trans_xml.nodes('/trans') AS trans_nodes (trans_node)\r\n ) AS x\r\n INNER HASH JOIN #sessions AS s ON\r\n s.session_id = x.session_id\r\n AND s.request_id = x.request_id\r\n OPTION (OPTIMIZE FOR (@i = 1));\r\n END;\r\n\r\n --Variables for text and plan collection\r\n DECLARE \r\n @session_id SMALLINT,\r\n @request_id INT,\r\n @sql_handle VARBINARY(64),\r\n @plan_handle VARBINARY(64),\r\n @statement_start_offset INT,\r\n @statement_end_offset INT,\r\n @start_time DATETIME,\r\n @database_name sysname;\r\n\r\n IF\r\n @recursion = 1\r\n AND @output_column_list LIKE '%|[sql_text|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE sql_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n session_id,\r\n request_id,\r\n sql_handle,\r\n statement_start_offset,\r\n statement_end_offset\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n AND sql_handle IS NOT NULL\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN sql_cursor;\r\n\r\n FETCH NEXT FROM sql_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @sql_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n\r\n --Wait up to 5 ms for the SQL text, then give up\r\n SET LOCK_TIMEOUT 5;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n UPDATE s\r\n SET\r\n s.sql_text =\r\n (\r\n SELECT\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n N'--' + NCHAR(13) + NCHAR(10) +\r\n CASE\r\n WHEN @get_full_inner_text = 1 THEN est.text\r\n WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN est.text\r\n WHEN SUBSTRING(est.text, (@statement_start_offset/2), 2) LIKE N'[a-zA-Z0-9][a-zA-Z0-9]' THEN est.text\r\n ELSE\r\n CASE\r\n WHEN @statement_start_offset > 0 THEN\r\n SUBSTRING\r\n (\r\n est.text,\r\n ((@statement_start_offset/2) + 1),\r\n (\r\n CASE\r\n WHEN @statement_end_offset = -1 THEN 2147483647\r\n ELSE ((@statement_end_offset - @statement_start_offset)/2) + 1\r\n END\r\n )\r\n )\r\n ELSE RTRIM(LTRIM(est.text))\r\n END\r\n END +\r\n NCHAR(13) + NCHAR(10) + N'--' COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [processing-instruction(query)]\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ),\r\n s.statement_start_offset =\r\n CASE\r\n WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN 0\r\n WHEN SUBSTRING(CONVERT(VARCHAR(MAX), est.text), (@statement_start_offset/2), 2) LIKE '[a-zA-Z0-9][a-zA-Z0-9]' THEN 0\r\n ELSE @statement_start_offset\r\n END,\r\n s.statement_end_offset =\r\n CASE\r\n WHEN LEN(est.text) < (@statement_end_offset / 2) + 1 THEN -1\r\n WHEN SUBSTRING(CONVERT(VARCHAR(MAX), est.text), (@statement_start_offset/2), 2) LIKE '[a-zA-Z0-9][a-zA-Z0-9]' THEN -1\r\n ELSE @statement_end_offset\r\n END\r\n FROM\r\n #sessions AS s,\r\n (\r\n SELECT TOP(1)\r\n text\r\n FROM\r\n (\r\n SELECT\r\n text,\r\n 0 AS row_num\r\n FROM sys.dm_exec_sql_text(@sql_handle)\r\n \r\n UNION ALL\r\n \r\n SELECT\r\n NULL,\r\n 1 AS row_num\r\n ) AS est0\r\n ORDER BY\r\n row_num\r\n ) AS est\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END TRY\r\n BEGIN CATCH;\r\n UPDATE s\r\n SET\r\n s.sql_text =\r\n CASE ERROR_NUMBER()\r\n WHEN 1222 THEN ''\r\n ELSE ''\r\n END\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END CATCH;\r\n\r\n FETCH NEXT FROM sql_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @sql_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n END;\r\n\r\n --Return this to the default\r\n SET LOCK_TIMEOUT -1;\r\n\r\n CLOSE sql_cursor;\r\n DEALLOCATE sql_cursor;\r\n END;\r\n\r\n IF\r\n @get_outer_command = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[sql_command|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE @buffer_results TABLE\r\n (\r\n EventType VARCHAR(30),\r\n Parameters INT,\r\n EventInfo NVARCHAR(4000),\r\n start_time DATETIME,\r\n session_number INT IDENTITY(1,1) NOT NULL PRIMARY KEY\r\n );\r\n\r\n DECLARE buffer_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n session_id,\r\n MAX(start_time) AS start_time\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n GROUP BY\r\n session_id\r\n ORDER BY\r\n session_id\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN buffer_cursor;\r\n\r\n FETCH NEXT FROM buffer_cursor\r\n INTO\r\n @session_id,\r\n @start_time;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n --In SQL Server 2008, DBCC INPUTBUFFER will throw\r\n --an exception if the session no longer exists\r\n INSERT @buffer_results\r\n (\r\n EventType,\r\n Parameters,\r\n EventInfo\r\n )\r\n EXEC sp_executesql\r\n N'DBCC INPUTBUFFER(@session_id) WITH NO_INFOMSGS;',\r\n N'@session_id SMALLINT',\r\n @session_id;\r\n\r\n UPDATE br\r\n SET\r\n br.start_time = @start_time\r\n FROM @buffer_results AS br\r\n WHERE\r\n br.session_number =\r\n (\r\n SELECT MAX(br2.session_number)\r\n FROM @buffer_results br2\r\n );\r\n END TRY\r\n BEGIN CATCH\r\n END CATCH;\r\n\r\n FETCH NEXT FROM buffer_cursor\r\n INTO\r\n @session_id,\r\n @start_time;\r\n END;\r\n\r\n UPDATE s\r\n SET\r\n sql_command =\r\n (\r\n SELECT\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n N'--' + NCHAR(13) + NCHAR(10) + br.EventInfo + NCHAR(13) + NCHAR(10) + N'--' COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [processing-instruction(query)]\r\n FROM @buffer_results AS br\r\n WHERE\r\n br.session_number = s.session_number\r\n AND br.start_time = s.start_time\r\n AND\r\n (\r\n (\r\n s.start_time = s.last_request_start_time\r\n AND EXISTS\r\n (\r\n SELECT *\r\n FROM sys.dm_exec_requests r2\r\n WHERE\r\n r2.session_id = s.session_id\r\n AND r2.request_id = s.request_id\r\n AND r2.start_time = s.start_time\r\n )\r\n )\r\n OR\r\n (\r\n s.request_id = 0\r\n AND EXISTS\r\n (\r\n SELECT *\r\n FROM sys.dm_exec_sessions s2\r\n WHERE\r\n s2.session_id = s.session_id\r\n AND s2.last_request_start_time = s.last_request_start_time\r\n )\r\n )\r\n )\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n )\r\n FROM #sessions AS s\r\n WHERE\r\n recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n CLOSE buffer_cursor;\r\n DEALLOCATE buffer_cursor;\r\n END;\r\n\r\n IF\r\n @get_plans >= 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[query_plan|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE @live_plan BIT;\r\n SET @live_plan = ISNULL(CONVERT(BIT, SIGN(OBJECT_ID('sys.dm_exec_query_statistics_xml'))), 0)\r\n\r\n DECLARE plan_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n session_id,\r\n request_id,\r\n plan_handle,\r\n statement_start_offset,\r\n statement_end_offset\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n AND plan_handle IS NOT NULL\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN plan_cursor;\r\n\r\n FETCH NEXT FROM plan_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @plan_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n\r\n --Wait up to 5 ms for a query plan, then give up\r\n SET LOCK_TIMEOUT 5;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n DECLARE @query_plan XML;\r\n SET @query_plan = NULL;\r\n\r\n IF @live_plan = 1\r\n BEGIN;\r\n BEGIN TRY;\r\n SELECT\r\n @query_plan = x.query_plan\r\n FROM sys.dm_exec_query_statistics_xml(@session_id) AS x;\r\n\r\n IF\r\n @query_plan IS NOT NULL\r\n AND EXISTS\r\n (\r\n SELECT\r\n *\r\n FROM sys.dm_exec_requests AS r\r\n WHERE\r\n r.session_id = @session_id\r\n AND r.request_id = @request_id\r\n AND r.plan_handle = @plan_handle\r\n AND r.statement_start_offset = @statement_start_offset\r\n AND r.statement_end_offset = @statement_end_offset\r\n )\r\n BEGIN;\r\n UPDATE s\r\n SET\r\n s.query_plan = @query_plan\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n END TRY\r\n BEGIN CATCH;\r\n SET @query_plan = NULL;\r\n END CATCH;\r\n END;\r\n\r\n IF @query_plan IS NULL\r\n BEGIN;\r\n BEGIN TRY;\r\n UPDATE s\r\n SET\r\n s.query_plan =\r\n (\r\n SELECT\r\n CONVERT(xml, query_plan)\r\n FROM sys.dm_exec_text_query_plan\r\n (\r\n @plan_handle,\r\n CASE @get_plans\r\n WHEN 1 THEN\r\n @statement_start_offset\r\n ELSE\r\n 0\r\n END,\r\n CASE @get_plans\r\n WHEN 1 THEN\r\n @statement_end_offset\r\n ELSE\r\n -1\r\n END\r\n )\r\n )\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END TRY\r\n BEGIN CATCH;\r\n IF ERROR_NUMBER() = 6335\r\n BEGIN;\r\n UPDATE s\r\n SET\r\n s.query_plan =\r\n (\r\n SELECT\r\n N'--' + NCHAR(13) + NCHAR(10) +\r\n N'-- Could not render showplan due to XML data type limitations. ' + NCHAR(13) + NCHAR(10) +\r\n N'-- To see the graphical plan save the XML below as a .SQLPLAN file and re-open in SSMS.' + NCHAR(13) + NCHAR(10) +\r\n N'--' + NCHAR(13) + NCHAR(10) +\r\n REPLACE(qp.query_plan, N''\r\n ELSE ''\r\n END\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.request_id = @request_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n END CATCH;\r\n END;\r\n\r\n FETCH NEXT FROM plan_cursor\r\n INTO\r\n @session_id,\r\n @request_id,\r\n @plan_handle,\r\n @statement_start_offset,\r\n @statement_end_offset;\r\n END;\r\n\r\n --Return this to the default\r\n SET LOCK_TIMEOUT -1;\r\n\r\n CLOSE plan_cursor;\r\n DEALLOCATE plan_cursor;\r\n END;\r\n\r\n IF\r\n @get_locks = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[locks|]%' ESCAPE '|'\r\n BEGIN;\r\n DECLARE locks_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT DISTINCT\r\n database_name\r\n FROM #locks\r\n WHERE\r\n EXISTS\r\n (\r\n SELECT *\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = #locks.session_id\r\n AND recursion = 1\r\n )\r\n AND database_name <> '(null)'\r\n OPTION (KEEPFIXED PLAN);\r\n\r\n OPEN locks_cursor;\r\n\r\n FETCH NEXT FROM locks_cursor\r\n INTO\r\n @database_name;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n SET @sql_n = CONVERT(NVARCHAR(MAX), N'') + N'\r\n UPDATE l\r\n SET\r\n object_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n o.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n index_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n i.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n schema_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n s.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n principal_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n dp.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n )\r\n FROM #locks AS l\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.allocation_units AS au ON\r\n au.allocation_unit_id = l.allocation_unit_id\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.partitions AS p ON\r\n p.hobt_id =\r\n COALESCE\r\n (\r\n l.hobt_id,\r\n CASE\r\n WHEN au.type IN (1, 3) THEN au.container_id\r\n ELSE NULL\r\n END\r\n )\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.partitions AS p1 ON\r\n l.hobt_id IS NULL\r\n AND au.type = 2\r\n AND p1.partition_id = au.container_id\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.objects AS o ON\r\n o.object_id = COALESCE(l.object_id, p.object_id, p1.object_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.indexes AS i ON\r\n i.object_id = COALESCE(l.object_id, p.object_id, p1.object_id)\r\n AND i.index_id = COALESCE(l.index_id, p.index_id, p1.index_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.schemas AS s ON\r\n s.schema_id = COALESCE(l.schema_id, o.schema_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.database_principals AS dp ON\r\n dp.principal_id = l.principal_id\r\n WHERE\r\n l.database_name = @database_name\r\n OPTION (KEEPFIXED PLAN); ';\r\n\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@database_name sysname',\r\n @database_name;\r\n END TRY\r\n BEGIN CATCH;\r\n UPDATE #locks\r\n SET\r\n query_error =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n ERROR_MESSAGE() COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n )\r\n WHERE\r\n database_name = @database_name\r\n OPTION (KEEPFIXED PLAN);\r\n END CATCH;\r\n\r\n FETCH NEXT FROM locks_cursor\r\n INTO\r\n @database_name;\r\n END;\r\n\r\n CLOSE locks_cursor;\r\n DEALLOCATE locks_cursor;\r\n\r\n CREATE CLUSTERED INDEX IX_SRD ON #locks (session_id, request_id, database_name);\r\n\r\n UPDATE s\r\n SET\r\n s.locks =\r\n (\r\n SELECT\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n l1.database_name COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [Database/@name],\r\n MIN(l1.query_error) AS [Database/@query_error],\r\n (\r\n SELECT\r\n l2.request_mode AS [Lock/@request_mode],\r\n l2.request_status AS [Lock/@request_status],\r\n COUNT(*) AS [Lock/@request_count]\r\n FROM #locks AS l2\r\n WHERE\r\n l1.session_id = l2.session_id\r\n AND l1.request_id = l2.request_id\r\n AND l2.database_name = l1.database_name\r\n AND l2.resource_type = 'DATABASE'\r\n GROUP BY\r\n l2.request_mode,\r\n l2.request_status\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ) AS [Database/Locks],\r\n (\r\n SELECT\r\n COALESCE(l3.object_name, '(null)') AS [Object/@name],\r\n l3.schema_name AS [Object/@schema_name],\r\n (\r\n SELECT\r\n l4.resource_type AS [Lock/@resource_type],\r\n l4.page_type AS [Lock/@page_type],\r\n l4.index_name AS [Lock/@index_name],\r\n CASE\r\n WHEN l4.object_name IS NULL THEN l4.schema_name\r\n ELSE NULL\r\n END AS [Lock/@schema_name],\r\n l4.principal_name AS [Lock/@principal_name],\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n l4.resource_description COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n ) AS [Lock/@resource_description],\r\n l4.request_mode AS [Lock/@request_mode],\r\n l4.request_status AS [Lock/@request_status],\r\n SUM(l4.request_count) AS [Lock/@request_count]\r\n FROM #locks AS l4\r\n WHERE\r\n l4.session_id = l3.session_id\r\n AND l4.request_id = l3.request_id\r\n AND l3.database_name = l4.database_name\r\n AND COALESCE(l3.object_name, '(null)') = COALESCE(l4.object_name, '(null)')\r\n AND COALESCE(l3.schema_name, '') = COALESCE(l4.schema_name, '')\r\n AND l4.resource_type <> 'DATABASE'\r\n GROUP BY\r\n l4.resource_type,\r\n l4.page_type,\r\n l4.index_name,\r\n CASE\r\n WHEN l4.object_name IS NULL THEN l4.schema_name\r\n ELSE NULL\r\n END,\r\n l4.principal_name,\r\n l4.resource_description,\r\n l4.request_mode,\r\n l4.request_status\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ) AS [Object/Locks]\r\n FROM #locks AS l3\r\n WHERE\r\n l3.session_id = l1.session_id\r\n AND l3.request_id = l1.request_id\r\n AND l3.database_name = l1.database_name\r\n AND l3.resource_type <> 'DATABASE'\r\n GROUP BY\r\n l3.session_id,\r\n l3.request_id,\r\n l3.database_name,\r\n COALESCE(l3.object_name, '(null)'),\r\n l3.schema_name\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n ) AS [Database/Objects]\r\n FROM #locks AS l1\r\n WHERE\r\n l1.session_id = s.session_id\r\n AND l1.request_id = s.request_id\r\n AND l1.start_time IN (s.start_time, s.last_request_start_time)\r\n AND s.recursion = 1\r\n GROUP BY\r\n l1.session_id,\r\n l1.request_id,\r\n l1.database_name\r\n FOR XML\r\n PATH(''),\r\n TYPE\r\n )\r\n FROM #sessions s\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n\r\n IF\r\n @find_block_leaders = 1\r\n AND @recursion = 1\r\n AND @output_column_list LIKE '%|[blocked_session_count|]%' ESCAPE '|'\r\n BEGIN;\r\n WITH\r\n blockers AS\r\n (\r\n SELECT\r\n session_id,\r\n session_id AS top_level_session_id,\r\n CONVERT(VARCHAR(8000), '.' + CONVERT(VARCHAR(8000), session_id) + '.') AS the_path\r\n FROM #sessions\r\n WHERE\r\n recursion = 1\r\n\r\n UNION ALL\r\n\r\n SELECT\r\n s.session_id,\r\n b.top_level_session_id,\r\n CONVERT(VARCHAR(8000), b.the_path + CONVERT(VARCHAR(8000), s.session_id) + '.') AS the_path\r\n FROM blockers AS b\r\n JOIN #sessions AS s ON\r\n s.blocking_session_id = b.session_id\r\n AND s.recursion = 1\r\n AND b.the_path NOT LIKE '%.' + CONVERT(VARCHAR(8000), s.session_id) + '.%' COLLATE Latin1_General_Bin2\r\n )\r\n UPDATE s\r\n SET\r\n s.blocked_session_count = x.blocked_session_count\r\n FROM #sessions AS s\r\n JOIN\r\n (\r\n SELECT\r\n b.top_level_session_id AS session_id,\r\n COUNT(*) - 1 AS blocked_session_count\r\n FROM blockers AS b\r\n GROUP BY\r\n b.top_level_session_id\r\n ) x ON\r\n s.session_id = x.session_id\r\n WHERE\r\n s.recursion = 1;\r\n END;\r\n\r\n IF\r\n @get_task_info = 2\r\n AND @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n BEGIN;\r\n CREATE TABLE #blocked_requests\r\n (\r\n session_id SMALLINT NOT NULL,\r\n request_id INT NOT NULL,\r\n database_name sysname NOT NULL,\r\n object_id INT,\r\n hobt_id BIGINT,\r\n schema_id INT,\r\n schema_name sysname NULL,\r\n object_name sysname NULL,\r\n query_error NVARCHAR(2048),\r\n PRIMARY KEY (database_name, session_id, request_id)\r\n );\r\n\r\n CREATE STATISTICS s_database_name ON #blocked_requests (database_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_schema_name ON #blocked_requests (schema_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_object_name ON #blocked_requests (object_name)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n CREATE STATISTICS s_query_error ON #blocked_requests (query_error)\r\n WITH SAMPLE 0 ROWS, NORECOMPUTE;\r\n \r\n INSERT #blocked_requests\r\n (\r\n session_id,\r\n request_id,\r\n database_name,\r\n object_id,\r\n hobt_id,\r\n schema_id\r\n )\r\n SELECT\r\n session_id,\r\n request_id,\r\n database_name,\r\n object_id,\r\n hobt_id,\r\n CONVERT(INT, SUBSTRING(schema_node, CHARINDEX(' = ', schema_node) + 3, LEN(schema_node))) AS schema_id\r\n FROM\r\n (\r\n SELECT\r\n session_id,\r\n request_id,\r\n agent_nodes.agent_node.value('(database_name/text())[1]', 'sysname') AS database_name,\r\n agent_nodes.agent_node.value('(object_id/text())[1]', 'int') AS object_id,\r\n agent_nodes.agent_node.value('(hobt_id/text())[1]', 'bigint') AS hobt_id,\r\n agent_nodes.agent_node.value('(metadata_resource/text()[.=\"SCHEMA\"]/../../metadata_class_id/text())[1]', 'varchar(100)') AS schema_node\r\n FROM #sessions AS s\r\n CROSS APPLY s.additional_info.nodes('//block_info') AS agent_nodes (agent_node)\r\n WHERE\r\n s.recursion = 1\r\n ) AS t\r\n WHERE\r\n t.database_name IS NOT NULL\r\n AND\r\n (\r\n t.object_id IS NOT NULL\r\n OR t.hobt_id IS NOT NULL\r\n OR t.schema_node IS NOT NULL\r\n );\r\n \r\n DECLARE blocks_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT DISTINCT\r\n database_name\r\n FROM #blocked_requests;\r\n \r\n OPEN blocks_cursor;\r\n \r\n FETCH NEXT FROM blocks_cursor\r\n INTO\r\n @database_name;\r\n \r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n BEGIN TRY;\r\n SET @sql_n =\r\n CONVERT(NVARCHAR(MAX), N'') + N'\r\n UPDATE b\r\n SET\r\n b.schema_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n s.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n ),\r\n b.object_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n o.name COLLATE Latin1_General_Bin2,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''''\r\n )\r\n FROM #blocked_requests AS b\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.partitions AS p ON\r\n p.hobt_id = b.hobt_id\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.objects AS o ON\r\n o.object_id = COALESCE(p.object_id, b.object_id)\r\n LEFT OUTER JOIN ' + QUOTENAME(@database_name) + N'.sys.schemas AS s ON\r\n s.schema_id = COALESCE(o.schema_id, b.schema_id)\r\n WHERE\r\n b.database_name = @database_name; ';\r\n \r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@database_name sysname',\r\n @database_name;\r\n END TRY\r\n BEGIN CATCH;\r\n UPDATE #blocked_requests\r\n SET\r\n query_error =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n CONVERT\r\n (\r\n NVARCHAR(MAX),\r\n ERROR_MESSAGE() COLLATE Latin1_General_Bin2\r\n ),\r\n NCHAR(31),N'?'),NCHAR(30),N'?'),NCHAR(29),N'?'),NCHAR(28),N'?'),NCHAR(27),N'?'),NCHAR(26),N'?'),NCHAR(25),N'?'),NCHAR(24),N'?'),NCHAR(23),N'?'),NCHAR(22),N'?'),\r\n NCHAR(21),N'?'),NCHAR(20),N'?'),NCHAR(19),N'?'),NCHAR(18),N'?'),NCHAR(17),N'?'),NCHAR(16),N'?'),NCHAR(15),N'?'),NCHAR(14),N'?'),NCHAR(12),N'?'),\r\n NCHAR(11),N'?'),NCHAR(8),N'?'),NCHAR(7),N'?'),NCHAR(6),N'?'),NCHAR(5),N'?'),NCHAR(4),N'?'),NCHAR(3),N'?'),NCHAR(2),N'?'),NCHAR(1),N'?'),\r\n NCHAR(0),\r\n N''\r\n )\r\n WHERE\r\n database_name = @database_name;\r\n END CATCH;\r\n\r\n FETCH NEXT FROM blocks_cursor\r\n INTO\r\n @database_name;\r\n END;\r\n \r\n CLOSE blocks_cursor;\r\n DEALLOCATE blocks_cursor;\r\n \r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n ('\r\n insert {sql:column(\"b.schema_name\")}\r\n as last\r\n into (/additional_info/block_info)[1]\r\n ')\r\n FROM #sessions AS s\r\n INNER JOIN #blocked_requests AS b ON\r\n b.session_id = s.session_id\r\n AND b.request_id = s.request_id\r\n AND s.recursion = 1\r\n WHERE\r\n b.schema_name IS NOT NULL;\r\n\r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n ('\r\n insert {sql:column(\"b.object_name\")}\r\n as last\r\n into (/additional_info/block_info)[1]\r\n ')\r\n FROM #sessions AS s\r\n INNER JOIN #blocked_requests AS b ON\r\n b.session_id = s.session_id\r\n AND b.request_id = s.request_id\r\n AND s.recursion = 1\r\n WHERE\r\n b.object_name IS NOT NULL;\r\n\r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n ('\r\n insert {sql:column(\"b.query_error\")}\r\n as last\r\n into (/additional_info/block_info)[1]\r\n ')\r\n FROM #sessions AS s\r\n INNER JOIN #blocked_requests AS b ON\r\n b.session_id = s.session_id\r\n AND b.request_id = s.request_id\r\n AND s.recursion = 1\r\n WHERE\r\n b.query_error IS NOT NULL;\r\n END;\r\n\r\n IF\r\n @output_column_list LIKE '%|[program_name|]%' ESCAPE '|'\r\n AND @output_column_list LIKE '%|[additional_info|]%' ESCAPE '|'\r\n AND @recursion = 1\r\n AND DB_ID('msdb') IS NOT NULL\r\n BEGIN;\r\n SET @sql_n =\r\n N'BEGIN TRY;\r\n DECLARE @job_name sysname;\r\n SET @job_name = NULL;\r\n DECLARE @step_name sysname;\r\n SET @step_name = NULL;\r\n\r\n SELECT\r\n @job_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n j.name,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''?''\r\n ),\r\n @step_name =\r\n REPLACE\r\n (\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(\r\n s.step_name,\r\n NCHAR(31),N''?''),NCHAR(30),N''?''),NCHAR(29),N''?''),NCHAR(28),N''?''),NCHAR(27),N''?''),NCHAR(26),N''?''),NCHAR(25),N''?''),NCHAR(24),N''?''),NCHAR(23),N''?''),NCHAR(22),N''?''),\r\n NCHAR(21),N''?''),NCHAR(20),N''?''),NCHAR(19),N''?''),NCHAR(18),N''?''),NCHAR(17),N''?''),NCHAR(16),N''?''),NCHAR(15),N''?''),NCHAR(14),N''?''),NCHAR(12),N''?''),\r\n NCHAR(11),N''?''),NCHAR(8),N''?''),NCHAR(7),N''?''),NCHAR(6),N''?''),NCHAR(5),N''?''),NCHAR(4),N''?''),NCHAR(3),N''?''),NCHAR(2),N''?''),NCHAR(1),N''?''),\r\n NCHAR(0),\r\n N''?''\r\n )\r\n FROM msdb.dbo.sysjobs AS j\r\n INNER JOIN msdb.dbo.sysjobsteps AS s ON\r\n j.job_id = s.job_id\r\n WHERE\r\n j.job_id = @job_id\r\n AND s.step_id = @step_id;\r\n\r\n IF @job_name IS NOT NULL\r\n BEGIN;\r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n (''\r\n insert text{sql:variable(\"@job_name\")}\r\n into (/additional_info/agent_job_info/job_name)[1]\r\n '')\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n \r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n (''\r\n insert text{sql:variable(\"@step_name\")}\r\n into (/additional_info/agent_job_info/step_name)[1]\r\n '')\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END;\r\n END TRY\r\n BEGIN CATCH;\r\n DECLARE @msdb_error_message NVARCHAR(256);\r\n SET @msdb_error_message = ERROR_MESSAGE();\r\n \r\n UPDATE s\r\n SET\r\n additional_info.modify\r\n (''\r\n insert {sql:variable(\"@msdb_error_message\")}\r\n as last\r\n into (/additional_info/agent_job_info)[1]\r\n '')\r\n FROM #sessions AS s\r\n WHERE\r\n s.session_id = @session_id\r\n AND s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n END CATCH;'\r\n\r\n DECLARE @job_id UNIQUEIDENTIFIER;\r\n DECLARE @step_id INT;\r\n\r\n DECLARE agent_cursor\r\n CURSOR LOCAL FAST_FORWARD\r\n FOR\r\n SELECT\r\n s.session_id,\r\n agent_nodes.agent_node.value('(job_id/text())[1]', 'uniqueidentifier') AS job_id,\r\n agent_nodes.agent_node.value('(step_id/text())[1]', 'int') AS step_id\r\n FROM #sessions AS s\r\n CROSS APPLY s.additional_info.nodes('//agent_job_info') AS agent_nodes (agent_node)\r\n WHERE\r\n s.recursion = 1\r\n OPTION (KEEPFIXED PLAN);\r\n \r\n OPEN agent_cursor;\r\n\r\n FETCH NEXT FROM agent_cursor\r\n INTO\r\n @session_id,\r\n @job_id,\r\n @step_id;\r\n\r\n WHILE @@FETCH_STATUS = 0\r\n BEGIN;\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@job_id UNIQUEIDENTIFIER, @step_id INT, @session_id SMALLINT',\r\n @job_id, @step_id, @session_id\r\n\r\n FETCH NEXT FROM agent_cursor\r\n INTO\r\n @session_id,\r\n @job_id,\r\n @step_id;\r\n END;\r\n\r\n CLOSE agent_cursor;\r\n DEALLOCATE agent_cursor;\r\n END;\r\n \r\n IF\r\n @delta_interval > 0\r\n AND @recursion <> 1\r\n BEGIN;\r\n SET @recursion = 1;\r\n\r\n DECLARE @delay_time CHAR(12);\r\n SET @delay_time = CONVERT(VARCHAR, DATEADD(second, @delta_interval, 0), 114);\r\n WAITFOR DELAY @delay_time;\r\n\r\n GOTO REDO;\r\n END;\r\n END;\r\n\r\n DECLARE\r\n @num_data_threshold MONEY,\r\n @num_col_fmt NVARCHAR(MAX),\r\n @num_delta_col_fmt NVARCHAR(MAX);\r\n\r\n SET @num_data_threshold = 919919919919919;\r\n SET @num_col_fmt =\r\n CASE @format_output\r\n WHEN 1 THEN N'\r\n CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, [col_name]))) OVER() - LEN(CONVERT(VARCHAR, [col_name]))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) AS '\r\n WHEN 2 THEN N'\r\n CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) AS '\r\n ELSE N''\r\n END + N'[col_name], ';\r\n SET @num_delta_col_fmt =\r\n N'\r\n CASE\r\n WHEN\r\n first_request_start_time = last_request_start_time\r\n AND num_events = 2\r\n AND [col_name] >= 0\r\n THEN ' +\r\n CASE @format_output\r\n WHEN 1 THEN N'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, [col_name]))) OVER() - LEN(CONVERT(VARCHAR, [col_name]))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) '\r\n WHEN 2 THEN N'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN [col_name] > @num_data_threshold THEN @num_data_threshold ELSE [col_name] END), 1), 19)) '\r\n ELSE N'[col_name] '\r\n END + N'\r\n ELSE NULL\r\n END AS [col_name], ';\r\n\r\n SET @sql_n = CONVERT(NVARCHAR(MAX), N'') +\r\n --Outer column list\r\n CASE\r\n WHEN\r\n @destination_table <> ''\r\n AND @return_schema = 0\r\n THEN N'INSERT ' + @destination_table + ' '\r\n ELSE N''\r\n END +\r\n N'SELECT ' +\r\n @output_column_list + N' ' +\r\n CASE @return_schema\r\n WHEN 1 THEN N'INTO #session_schema '\r\n ELSE N''\r\n END\r\n --End outer column list\r\n +\r\n --Inner column list\r\n N'\r\n FROM\r\n (\r\n SELECT\r\n session_id, ' +\r\n --[dd hh:mm:ss.mss]\r\n CASE\r\n WHEN @format_output IN (1, 2) THEN\r\n N'\r\n CASE\r\n WHEN elapsed_time < 0 THEN\r\n RIGHT\r\n (\r\n REPLICATE(''0'', max_elapsed_length) + CONVERT(VARCHAR, (-1 * elapsed_time) / 86400),\r\n max_elapsed_length\r\n ) +\r\n RIGHT\r\n (\r\n CONVERT(VARCHAR, DATEADD(second, (-1 * elapsed_time), 0), 120),\r\n 9\r\n ) +\r\n ''.000''\r\n ELSE\r\n RIGHT\r\n (\r\n REPLICATE(''0'', max_elapsed_length) + CONVERT(VARCHAR, elapsed_time / 86400000),\r\n max_elapsed_length\r\n ) +\r\n RIGHT\r\n (\r\n CONVERT(VARCHAR, DATEADD(second, elapsed_time / 1000, 0), 120),\r\n 9\r\n ) +\r\n ''.'' +\r\n RIGHT(''000'' + CONVERT(VARCHAR, elapsed_time % 1000), 3)\r\n END AS [dd hh:mm:ss.mss], '\r\n ELSE\r\n N''\r\n END +\r\n --[dd hh:mm:ss.mss (avg)] / avg_elapsed_time\r\n CASE\r\n WHEN @format_output IN (1, 2) THEN\r\n N'\r\n RIGHT\r\n (\r\n ''00'' + CONVERT(VARCHAR, avg_elapsed_time / 86400000),\r\n 2\r\n ) +\r\n RIGHT\r\n (\r\n CONVERT(VARCHAR, DATEADD(second, avg_elapsed_time / 1000, 0), 120),\r\n 9\r\n ) +\r\n ''.'' +\r\n RIGHT(''000'' + CONVERT(VARCHAR, avg_elapsed_time % 1000), 3) AS [dd hh:mm:ss.mss (avg)], '\r\n ELSE\r\n N'avg_elapsed_time, '\r\n END +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'physical_io') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'reads') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'physical_reads') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'writes') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'tempdb_allocations') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'tempdb_current') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'CPU') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'context_switches') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'used_memory') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'max_used_memory') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'requested_memory') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'granted_memory') +\r\n CASE\r\n WHEN @output_column_list LIKE '%|_delta|]%' ESCAPE '|' THEN\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'physical_io_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'reads_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'physical_reads_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'writes_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'tempdb_allocations_delta') +\r\n --this is the only one that can (legitimately) go negative\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'tempdb_current_delta') +\r\n --CPU_delta\r\n --leaving this one hardcoded, as there is a bit of different interaction here\r\n N'\r\n CASE\r\n WHEN\r\n first_request_start_time = last_request_start_time\r\n AND num_events = 2\r\n THEN\r\n CASE\r\n WHEN\r\n thread_CPU_delta > CPU_delta\r\n AND thread_CPU_delta > 0\r\n THEN ' +\r\n CASE @format_output\r\n WHEN 1 THEN N'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, thread_CPU_delta + CPU_delta))) OVER() - LEN(CONVERT(VARCHAR, thread_CPU_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN thread_CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE thread_CPU_delta END), 1), 19)) '\r\n WHEN 2 THEN N'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN thread_CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE thread_CPU_delta END), 1), 19)) '\r\n ELSE N'thread_CPU_delta '\r\n END + N'\r\n WHEN CPU_delta >= 0 THEN ' +\r\n CASE @format_output\r\n WHEN 1 THEN N'CONVERT(VARCHAR, SPACE(MAX(LEN(CONVERT(VARCHAR, thread_CPU_delta + CPU_delta))) OVER() - LEN(CONVERT(VARCHAR, CPU_delta))) + LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE CPU_delta END), 1), 19)) '\r\n WHEN 2 THEN N'CONVERT(VARCHAR, LEFT(CONVERT(CHAR(22), CONVERT(MONEY, CASE WHEN CPU_delta > @num_data_threshold THEN @num_data_threshold ELSE CPU_delta END), 1), 19)) '\r\n ELSE N'CPU_delta '\r\n END + N'\r\n ELSE NULL\r\n END\r\n ELSE\r\n NULL\r\n END AS CPU_delta, ' +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'context_switches_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'used_memory_delta') +\r\n REPLACE(@num_delta_col_fmt, N'[col_name]', N'max_used_memory_delta')\r\n ELSE N''\r\n END + N'\r\n ' +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'tasks') + N'\r\n status,\r\n wait_info,\r\n locks,\r\n tran_start_time,\r\n LEFT(tran_log_writes, LEN(tran_log_writes) - 1) AS tran_log_writes,\r\n implicit_tran, ' +\r\n REPLACE(@num_col_fmt, '[col_name]', 'open_tran_count') + N'\r\n ' +\r\n --sql_command\r\n CASE @format_output\r\n WHEN 0 THEN N'REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), sql_command), '''', '''') AS '\r\n ELSE N''\r\n END + N'sql_command,\r\n ' +\r\n --sql_text\r\n CASE @format_output\r\n WHEN 0 THEN N'REPLACE(REPLACE(CONVERT(NVARCHAR(MAX), sql_text), '''', '''') AS '\r\n ELSE N''\r\n END + N'sql_text,\r\n query_plan,\r\n blocking_session_id, ' +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'blocked_session_count') +\r\n REPLACE(@num_col_fmt, N'[col_name]', N'percent_complete') + N'\r\n host_name,\r\n login_name,\r\n database_name,\r\n program_name,\r\n additional_info,\r\n memory_info,\r\n start_time,\r\n login_time,\r\n CASE\r\n WHEN status = N''sleeping'' THEN NULL\r\n ELSE request_id\r\n END AS request_id,\r\n GETDATE() AS collection_time '\r\n --End inner column list\r\n +\r\n --Derived table and INSERT specification\r\n N'\r\n FROM\r\n (\r\n SELECT TOP(2147483647)\r\n *,\r\n CASE\r\n MAX\r\n (\r\n LEN\r\n (\r\n CONVERT\r\n (\r\n VARCHAR,\r\n CASE\r\n WHEN elapsed_time < 0 THEN\r\n (-1 * elapsed_time) / 86400\r\n ELSE\r\n elapsed_time / 86400000\r\n END\r\n )\r\n )\r\n ) OVER ()\r\n WHEN 1 THEN 2\r\n ELSE\r\n MAX\r\n (\r\n LEN\r\n (\r\n CONVERT\r\n (\r\n VARCHAR,\r\n CASE\r\n WHEN elapsed_time < 0 THEN\r\n (-1 * elapsed_time) / 86400\r\n ELSE\r\n elapsed_time / 86400000\r\n END\r\n )\r\n )\r\n ) OVER ()\r\n END AS max_elapsed_length, ' +\r\n CASE\r\n WHEN @output_column_list LIKE '%|_delta|]%' ESCAPE '|' THEN\r\n N'\r\n MAX(physical_io * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(physical_io * recursion) OVER (PARTITION BY session_id, request_id) AS physical_io_delta,\r\n MAX(reads * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(reads * recursion) OVER (PARTITION BY session_id, request_id) AS reads_delta,\r\n MAX(physical_reads * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(physical_reads * recursion) OVER (PARTITION BY session_id, request_id) AS physical_reads_delta,\r\n MAX(writes * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(writes * recursion) OVER (PARTITION BY session_id, request_id) AS writes_delta,\r\n MAX(tempdb_allocations * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(tempdb_allocations * recursion) OVER (PARTITION BY session_id, request_id) AS tempdb_allocations_delta,\r\n MAX(tempdb_current * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(tempdb_current * recursion) OVER (PARTITION BY session_id, request_id) AS tempdb_current_delta,\r\n MAX(CPU * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(CPU * recursion) OVER (PARTITION BY session_id, request_id) AS CPU_delta,\r\n MAX(thread_CPU_snapshot * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(thread_CPU_snapshot * recursion) OVER (PARTITION BY session_id, request_id) AS thread_CPU_delta,\r\n MAX(context_switches * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(context_switches * recursion) OVER (PARTITION BY session_id, request_id) AS context_switches_delta,\r\n MAX(used_memory * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(used_memory * recursion) OVER (PARTITION BY session_id, request_id) AS used_memory_delta,\r\n MAX(max_used_memory * recursion) OVER (PARTITION BY session_id, request_id) +\r\n MIN(max_used_memory * recursion) OVER (PARTITION BY session_id, request_id) AS max_used_memory_delta,\r\n MIN(last_request_start_time) OVER (PARTITION BY session_id, request_id) AS first_request_start_time, '\r\n ELSE N''\r\n END + N'\r\n COUNT(*) OVER (PARTITION BY session_id, request_id) AS num_events\r\n FROM #sessions AS s1 ' +\r\n CASE\r\n WHEN @sort_order = '' THEN N''\r\n ELSE\r\n N'\r\n ORDER BY ' +\r\n CONVERT(NVARCHAR(MAX), @sort_order)\r\n END +\r\n N'\r\n ) AS s\r\n WHERE\r\n s.recursion = 1\r\n ) x\r\n OPTION (KEEPFIXED PLAN);\r\n ' +\r\n CASE @return_schema\r\n WHEN 1 THEN\r\n N'\r\n SET @schema =\r\n ''CREATE TABLE ( '' +\r\n STUFF\r\n (\r\n (\r\n SELECT\r\n '','' +\r\n QUOTENAME(COLUMN_NAME) + '' '' +\r\n DATA_TYPE +\r\n CASE\r\n WHEN DATA_TYPE LIKE ''%char'' THEN ''('' + COALESCE(NULLIF(CONVERT(VARCHAR, CHARACTER_MAXIMUM_LENGTH), ''-1''), ''max'') + '') ''\r\n ELSE '' ''\r\n END +\r\n CASE IS_NULLABLE\r\n WHEN ''NO'' THEN ''NOT ''\r\n ELSE ''''\r\n END + ''NULL'' AS [text()]\r\n FROM tempdb.INFORMATION_SCHEMA.COLUMNS\r\n WHERE\r\n TABLE_NAME = (SELECT name FROM tempdb.sys.objects WHERE object_id = OBJECT_ID(''tempdb..#session_schema''))\r\n ORDER BY\r\n ORDINAL_POSITION\r\n FOR XML\r\n PATH('''')\r\n ), +\r\n 1,\r\n 1,\r\n ''''\r\n ) +\r\n '');''; '\r\n ELSE N''\r\n END;\r\n --End derived table and INSERT specification\r\n\r\n EXEC sp_executesql\r\n @sql_n,\r\n N'@num_data_threshold MONEY, @schema VARCHAR(MAX) OUTPUT',\r\n @num_data_threshold, @schema OUTPUT;\r\nEND;\r\nGO\r\n\r\nEXEC master.dbo.sp_whoisactive\r\n    @get_additional_info=0,@get_task_info=1, @output_column_list='[percent_complete][status][database_name][dd%][session_id][blocking_session_id][blocked_session_count][sql_text][sql_command][query_plan][login_name][wait_info][host_name][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][locks][%]', @format_output=1\r\n    ,@get_plans=0\r\n    ,@get_outer_command=1\r\n    ,@get_locks = 0\r\n    ,@find_block_leaders = 1\t\r\n    ,@sort_order = '[blocked_session_count] DESC,[session_id] ASC, [dd hh:mm:ss.mss] DESC';\r\nGO\r\n$CURSOR$\r\n\r\nIF OBJECT_ID('dbo.sp_whoisactive') IS NOT NULL \r\n\tDROP PROCEDURE dbo.sp_whoisactive;\r\nGO" } \ No newline at end of file diff --git a/wac_old-339f494d-8194-4fa6-b2b2-7133ecf49655.json b/wac_old-339f494d-8194-4fa6-b2b2-7133ecf49655.json index 7597d31..7f4efb4 100644 --- a/wac_old-339f494d-8194-4fa6-b2b2-7133ecf49655.json +++ b/wac_old-339f494d-8194-4fa6-b2b2-7133ecf49655.json @@ -1,6 +1,6 @@ -{ - "id": "339f494d-8194-4fa6-b2b2-7133ecf49655", - "prefix": "wac_old", - "description": "call sp_whoIsActive", - "body": "EXEC hciTools.dbo.sp_whoisactive\r\n    @get_additional_info=0,@get_task_info=1, @output_column_list='[percent_complete][status][database_name][dd%][session_id][blocking_session_id][blocked_session_count][sql_text][sql_command][query_plan][login_name][wait_info][host_name][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][locks][%]', @format_output=1\r\n    ,@get_plans=0\r\n    ,@get_outer_command=1\r\n    ,@get_locks = 0\r\n    ,@find_block_leaders = 1\t\r\n    ,@sort_order = '[blocked_session_count] DESC,[session_id] ASC, [dd hh:mm:ss.mss] DESC';\r\n" +{ + "id": "339f494d-8194-4fa6-b2b2-7133ecf49655", + "prefix": "wac_old", + "description": "call sp_whoIsActive", + "body": "EXEC hciTools.dbo.sp_whoisactive\r\n    @get_additional_info=0,@get_task_info=1, @output_column_list='[percent_complete][status][database_name][dd%][session_id][blocking_session_id][blocked_session_count][sql_text][sql_command][query_plan][login_name][wait_info][host_name][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][locks][%]', @format_output=1\r\n    ,@get_plans=0\r\n    ,@get_outer_command=1\r\n    ,@get_locks = 0\r\n    ,@find_block_leaders = 1\t\r\n    ,@sort_order = '[blocked_session_count] DESC,[session_id] ASC, [dd hh:mm:ss.mss] DESC';\r\n" } \ No newline at end of file diff --git a/we-7bce15ce-1e03-413c-8415-79fb5b0b6207.json b/we-7bce15ce-1e03-413c-8415-79fb5b0b6207.json index 81a4cd4..6209652 100644 --- a/we-7bce15ce-1e03-413c-8415-79fb5b0b6207.json +++ b/we-7bce15ce-1e03-413c-8415-79fb5b0b6207.json @@ -1,6 +1,6 @@ -{ - "id": "7bce15ce-1e03-413c-8415-79fb5b0b6207", - "prefix": "we", - "description": "WHERE fragment", - "body": "WHERE " +{ + "id": "7bce15ce-1e03-413c-8415-79fb5b0b6207", + "prefix": "we", + "description": "WHERE fragment", + "body": "WHERE " } \ No newline at end of file diff --git a/xa-10f68dd3-2117-403d-991a-1818c5e54098.json b/xa-10f68dd3-2117-403d-991a-1818c5e54098.json index af003e7..37cebc1 100644 --- a/xa-10f68dd3-2117-403d-991a-1818c5e54098.json +++ b/xa-10f68dd3-2117-403d-991a-1818c5e54098.json @@ -1,6 +1,6 @@ -{ - "id": "10f68dd3-2117-403d-991a-1818c5e54098", - "prefix": "xa", - "description": "xact_abbort and nocount options", - "body": "SET XACT_ABORT ON;\r\nSET NOCOUNT ON;\r\n" +{ + "id": "10f68dd3-2117-403d-991a-1818c5e54098", + "prefix": "xa", + "description": "xact_abbort and nocount options", + "body": "SET XACT_ABORT ON;\r\nSET NOCOUNT ON;\r\n" } \ No newline at end of file