CREATE FUNCTION [dbo].[fn_RunDuration] (@nRunDuration INT) RETURNS VARCHAR(128) AS BEGIN DECLARE @vcMsg VARCHAR(128), @nH INT, @nM INT, @nS INT, @vcH VARCHAR(48), @vcM VARCHAR(48), @vcS VARCHAR(48) SELECT @nH = LEFT(RIGHT('000000' + CAST(@nRunDuration AS VARCHAR), 6), 2), @nM = LEFT(RIGHT('000000' + CAST(@nRunDuration AS VARCHAR), 4), 2), @nS = RIGHT('000000' + CAST(@nRunDuration AS VARCHAR), 2), @vcH = CASE WHEN @nH = 0 THEN '' WHEN @nH = 1 THEN CAST(@nH AS VARCHAR) + ' hour, ' ELSE CAST(@nH AS VARCHAR) + ' hours, ' END, @vcM = CASE WHEN @nM = 0 THEN '' WHEN @nM = 1 THEN CAST(@nM AS VARCHAR) + ' minute, ' ELSE CAST(@nM AS VARCHAR) + ' minutes, ' END, @vcS = CASE WHEN @nS = 1 THEN CAST(@nS AS VARCHAR) + ' second' ELSE CAST(@nS AS VARCHAR) + ' seconds' END, @vcMsg = @vcH + @vcM + @vcS RETURN @vcMsg END
[master_admin].[dbo].[fn_INTtoDateTime]
CREATE FUNCTION [dbo].[fn_INTtoDateTime] ( @vcDate VARCHAR(8), @vcTime VARCHAR(6) ) RETURNS DATETIME AS BEGIN SET @vcDate = RIGHT(RTRIM('00000000' + CONVERT(CHAR(8), @vcDate) + ' '), 8) SET @vcTime = RIGHT(RTRIM('00000000' + CONVERT(CHAR(6), @vcTime) + ' '), 6) IF @vcDate = '00000000' SET @vcDate = LEFT(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(23), CAST(0 AS SMALLDATETIME), 121), '-', ''), ':', ''), SPACE(1), ''), 8) RETURN ( CAST(SUBSTRING(@vcDate,1,4) + '-' + SUBSTRING(@vcDate,5,2) + '-' + SUBSTRING(@vcDate,7,2) + ' ' + SUBSTRING(@vcTime,1,2) + ':' + SUBSTRING(@vcTime,3,2) + ':' + SUBSTRING(@vcTime,5,2) AS DATETIME) ) END
SQL Agent: What ran last night after time …
------------------------------------------------------------------------------------------------------------------------ -- -- What ran last night after time ... -- SELECT [master_admin].[dbo].[fn_INTtoDateTime]([run_date], [run_time]) AS [RunDate], DATENAME(WEEKDAY, CONVERT(VARCHAR(10), [run_date], 112)), [j].[name], [master_admin].[dbo].[fn_RunDuration]([run_duration]), [h].[step_id], [s].[step_name], [command] AS [StepCommand], [instance_id] FROM [msdb].[dbo].[sysjobhistory] [h] WITH (NOLOCK) JOIN [msdb].[dbo].[sysjobs] [j] WITH (NOLOCK) ON [j].[job_id] = [h].[job_id] JOIN [msdb]..[sysjobsteps] [s] WITH (NOLOCK) ON [s].[job_id] = [j].[job_id] AND [s].[step_id] = [h].[step_id] WHERE [run_date] >= CONVERT(VARCHAR(8), DATEADD(DAY, -0, GETDATE()), 112) AND [h].[run_time] >= 021439 ORDER BY [RunDate]
Required objects
[fn_INTtoDateTime]
[fn_RunDuration]