/***********************************************************************/
TRIGGER TO CREATE REPORT DATA
CREATE TRIGGER [dbo].[trgAdminFeesAudit] on [myDatabase].[dbo].[AdminFeesAudit]
FOR UPDATE, INSERT
AS
BEGIN
/* TRIGGER TO LOG INCORRECT AdminType */
DECLARE @AdminTypePrev varchar(20) = null;
IF EXISTS(SELECT TOP 1 AdminType FROM deleted) BEGIN
SELECT @AdminTypePrev = AdminType FROM deleted;
END;
INSERT INTO AdminFeesAudit
( [SystemUser],[HostName],[EventType],[SPID],[SchemaName],[ObjectName],[ObjectType],[AdminTypeID],[AdminTypeNetworkID],[EffectiveDate],[TerminationDate],[AdminType],[AdminTypePrev],[Fee])
SELECT SUSER_SNAME(), HOST_NAME(), EVENTDATA().value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(max)'),
EVENTDATA().value('(/EVENT_INSTANCE/SPID)[1]','smallint'),
EVENTDATA().value('(/EVENT_INSTANCE/SchemaName)[1]','nvarchar(max)'),
EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)'),
EVENTDATA().value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(max)'),
i.ID, i.AdminTypeNetworkID, i.EffectiveDate, i.TerminationDate, i.AdminType, @AdminTypePrev, CONVERT(money, i.Fee)
FROM AdminFees p WITH(nolock)
INNER JOIN inserted i ON p.ID = i.ID --i.AdminTypeID
END
GO
ALTER TABLE [dbo].[AdminFees] ENABLE TRIGGER [trgAdminFeesAudit]
GO
/***********************************************************************/
REPORT
DECLARE @body NVARCHAR(MAX);
BEGIN TRY
SET @body = N'<html><body><H3>Audit Log Info</H3><H4> .CORRECT THE INVALID AdminType and Stop the SQL job.</H4><table>'
+ N'<tr><th> Eventdate </th> <th> SystemUser </th> <th> HostName </th> <th> EventType </th> <th> SPID </th> <th> AdminTypeID </th> <th> AdminTypeNetworkID </th> <th> EffectiveDate </th> <th> TerminationDate </th> <th> FeeType </th> <th> FeeTypePrev </th> <th> Fee </th></tr>'
+ CAST((
SELECT Convert(Varchar(20),pa.[DateStamp],120) AS td
,ISNULL(pa.[systemuser],'') AS td
,ISNULL(pa.[hostname],'') AS td
,ISNULL(pa.[EventType],'') AS td
,ISNULL(pa.[SPID],'') AS td
,ISNULL(pa.[AdminTypeID],'') AS td
,ISNULL(pa.[AdminTypeNetworkID],'') AS td
,ISNULL(pa.[EffectiveDate],'') AS td
,ISNULL(pa.[TerminationDate],'') AS td
,ISNULL(pa.[FeeType],'') AS td
,ISNULL(pa.[FeeTypePrev],'') AS td
,ISNULL(pa.[Fee],'') AS td
FROM myDatabase.dbo.AdminFeesAudit [pa] (NOLOCK) WHERE AdminTypeID = @AdminTypeID
FOR XML RAW('tr'), ELEMENTS
) AS NVARCHAR(MAX)) +'</table></body></html>';
/* DBAs OPTIONAL CODE HERE - EITHER SEND HERE 1 TIME OR ON FAILURE ERROR OR BOTH */
/* IF THIS CODE IS ENABLED THEN THERE IS NO NEED TO EMAIL ON FAILURE - JUST TRACK IT AS A FAILING JOB */
-- EXEC msdb.dbo.sp_send_dbmail
--@profile_name = 'ReportingDB'
-- ,@recipients = 'JobMonitor@myDomain.com;DataOps@myDomain.com'
-- ,@subject = 'Audit Log Info Report'
-- ,@body = @body
-- ,@body_format = 'HTML';
--SELECT cast(@body AS NVARCHAR(MAX));
UPDATE myDatabase.dbo.AdminFeesAudit SET AlertSent = 1 WHERE AdminTypeID = @AdminTypeID and AlertSent = 0;
SET @body = ('<?xml version="1.0"?><xml>' + @body + '</xml>');
SELECT cast(@body AS NVARCHAR(MAX));
THROW 58001, @body, 1;
END TRY
BEGIN CATCH
DECLARE @message NVARCHAR(2048) = N'ERROR: Audit Log Alert - INVALID AdminType. ' + ISNULL(ERROR_MESSAGE(),' NULL ERROR_MESSAGE.');
THROW 58002, @message, 1;
END CATCH;
No comments:
Post a Comment