esmaspäev, 20. aprill 2009

SQL SERVER Agent kuupäeva funktsioon

Kui lugeda andmeid SQL SERVER Agent tabelitest, MSDB andmebaasist siis kuupäeva ja kellaaeg on antud seal INT väärtuste kujul, et nüüd nendest asjadest mõistlikku kuupäeva saada võib kasutada järgmist funktsiooni mis genereerib kellaaja lähtudes tabeli date ja time numbritest


CREATE FUNCTION [dbo].[SQLSERVERAGENTDATETIME_KUIDO] (@agentdate INT, @agenttime INT)
RETURNS DATETIME
AS
BEGIN
DECLARE @Result DATETIME
DECLARE @date DATETIME, @year INT, @month INT, @day INT, @datestr NVARCHAR(40)
,@hour INT, @min INT, @sec INT, @timestr NVARCHAR(40)

SET @year = (@agentdate / 10000)
SET @month = (@agentdate - (@year * 10000)) / 100
SET @day = (@agentdate - (@year * 10000) - (@month * 100))

IF @agentdate = 0
RETURN @Result --võib rõõmsalt ka NULL-i tagasi anda, kui kuupäeva pole

SET @datestr = CONVERT(NVARCHAR(4), @year) +
RIGHT('0'+CONVERT(NVARCHAR(2), @month),2) +
RIGHT('0'+CONVERT(NVARCHAR(2), @day),2)

SET @hour = (@agenttime / 10000)
SET @min = (@agenttime - (@hour * 10000)) / 100
SET @sec = (@agenttime - (@hour * 10000) - (@min * 100))
SET @timestr = RIGHT('00'+CONVERT(NVARCHAR(2), @hour),2) + N':' +
RIGHT('00'+CONVERT(NVARCHAR(2), @min),2) + N':' +
RIGHT('00'+CONVERT(NVARCHAR(2), @sec),2)
SET @Result = CONVERT(DATETIME, @datestr+' '+@timestr,112)
RETURN @Result

END


Kasutada niimoodi, kui vaja teada millal automaatseid töid käivitati

SELECT [message], run_status, sql_severity, step_id
,[dbo].[SQLSERVERAGENTDATETIME_KUIDO](run_date, run_time) AS RUN_TIME FROM MSDB.dbo.sysjobhistory