Quantcast
Channel: SQLServerCentral » SQL Server 2014 » Administration - SQL Server 2014 » Latest topics
Viewing all articles
Browse latest Browse all 6525

Trigger isn't firing

$
0
0
I have created a trigger on a table but its not working when a user tries to update the table. Syntax is below. What am I missing and why the trigger isn't working?[code="sql"]CREATE TRIGGER Safety_tiudPatientON [Safety].[Patient]AFTER INSERT, UPDATE, DELETEAS BEGIN IF @@ROWCOUNT = 0 --no rows affected, no reason for trigger to fireBEGIN RETURNENDELSE IF @@ROWCOUNT > 1 --multiple rows affected, trigger can not handle at this time BEGIN RETURN ENDELSEIF @@ROWCOUNT = 1BEGINSET NOCOUNT ONDECLARE @auditLinkGUID AS UNIQUEIDENTIFIER;DECLARE @modifiedData AS TINYINT;DECLARE @systemUserID AS UNIQUEIDENTIFIER = '00000000-0000-0000-0000-000000000000' DECLARE @schemaName AS NVARCHAR(500) = 'Safety'DECLARE @tableRoot AS NVARCHAR(500) = 'Patient'DECLARE @tableName AS NVARCHAR(500)SET @tableName = @schemaName + '.' + @tableRoot SET @auditLinkGUID = newid();SET @modifiedData = 0; --no DECLARE @action char(1); SET @action = (CASE WHEN EXISTS(SELECT * FROM inserted) AND EXISTS(SELECT * FROM deleted) THEN 'U' -- Set Action to UPDATE. WHEN EXISTS(SELECT * FROM inserted ) THEN 'I' -- Set Action to INSERT. WHEN EXISTS(SELECT * FROM deleted) THEN 'D' -- Set Action to DELETE. ELSE NULL -- Skip. It may have been a "failed delete". END) IF @action IN ('I', 'U') BEGIN IF @action = 'I'BEGIN INSERT INTO Audit.AuditPatient ( PatientID, FacilityID, FacilityPatientID, PatientFirstName, PatientMiddleInitial, PatientLastName, PatientPseudonym, GenderID, TransactionAuditGUID, InitDate, InitUserID, LastUpdateDate, LastUpdateUserID, Status, ChangeTypeID, ChangeTimestamp, ChangeDate, ChangeUserID, ChangeDataStatus, AuditLinkGUID ) ( SELECT i.PatientID, i.FacilityID, i.FacilityPatientID, i.PatientFirstName, i.PatientMiddleInitial, i.PatientLastName, i.PatientPseudonym, i.GenderID, i.TransactionAuditGUID, i.InitDate, i.InitUserID, i.LastUpdateDate, i.LastUpdateUserID, i.Status, 'I', SYSDATETIME(), i.LastUpdateDate, i.LastUpdateUserID, 0, @auditLinkGUID FROM inserted i )END -- if 'I'ELSEIF @Action = 'U'BEGIN SELECT @modifiedData = CASE WHEN ISNULL(i.Status, '0') != ISNULL(d.status, '0') THEN 2WHEN ISNULL(i.FacilityID, 0) != ISNULL(d.FacilityID, 0) THEN 1WHEN ISNULL(i.FacilityPatientID, '0') != ISNULL(d.FacilityPatientID, '0') THEN 1WHEN ISNULL(i.PatientFirstName, '0') != ISNULL(d.PatientFirstName, '0') THEN 1WHEN ISNULL(i.PatientMiddleInitial, '0') != ISNULL(d.PatientMiddleInitial, '0') THEN 1WHEN ISNULL(i.PatientLastName, '0') != ISNULL(d.PatientLastName, '0') THEN 1WHEN ISNULL(i.PatientPseudonym, '0') != ISNULL(d.PatientPseudonym, '0') THEN 1WHEN ISNULL(i.GenderID, 0) != ISNULL(d.GenderID, 0) THEN 1ELSE 0 ENDFROM inserted iINNER JOIN deleted dON i.PatientID = d.PatientID INSERT INTO Audit.AuditPatient ( PatientID, FacilityID, FacilityPatientID, PatientFirstName, PatientMiddleInitial, PatientLastName, PatientPseudonym, GenderID, TransactionAuditGUID, InitDate, InitUserID, LastUpdateDate, LastUpdateUserID, Status, ChangeTypeID, ChangeTimestamp, ChangeDate, ChangeUserID, ChangeDataStatus, AuditLinkGUID ) ( SELECT d.PatientID, d.FacilityID, d.FacilityPatientID, d.PatientFirstName, d.PatientMiddleInitial, d.PatientLastName, d.PatientPseudonym, d.GenderID, d.TransactionAuditGUID, d.InitDate, d.InitUserID, d.LastUpdateDate, d.LastUpdateUserID, d.Status, 'UB', SYSDATETIME(), i.LastUpdateDate, i.LastUpdateUserID, @modifiedData, @auditLinkGUID FROM inserted i INNER JOIN deleted d ON i.PatientID = d.PatientID ) INSERT INTO Audit.AuditPatient ( PatientID, FacilityID, FacilityPatientID, PatientFirstName, PatientMiddleInitial, PatientLastName, PatientPseudonym, GenderID, TransactionAuditGUID, InitDate, InitUserID, LastUpdateDate, LastUpdateUserID, Status, ChangeTypeID, ChangeTimestamp, ChangeDate, ChangeUserID, ChangeDataStatus, AuditLinkGUID ) ( SELECT i.PatientID, i.FacilityID, i.FacilityPatientID, i.PatientFirstName, i.PatientMiddleInitial, i.PatientLastName, i.PatientPseudonym, i.GenderID, i.TransactionAuditGUID, i.InitDate, i.InitUserID, i.LastUpdateDate, i.LastUpdateUserID, i.Status, 'UA', SYSDATETIME(), i.LastUpdateDate, i.LastUpdateUserID, @modifiedData, @auditLinkGUID FROM inserted i ) END -- IF 'U'END --if 'I' or 'U'ELSEIF @Action = 'D'BEGIN INSERT INTO Audit.AuditPatient ( PatientID, FacilityID, FacilityPatientID, PatientFirstName, PatientMiddleInitial, PatientLastName, PatientPseudonym, GenderID, TransactionAuditGUID, InitDate, InitUserID, LastUpdateDate, LastUpdateUserID, Status, ChangeTypeID, ChangeTimestamp, ChangeDate, ChangeUserID, ChangeDataStatus, AuditLinkGUID ) ( SELECT d.PatientID, d.FacilityID, d.FacilityPatientID, d.PatientFirstName, d.PatientMiddleInitial, d.PatientLastName, d.PatientPseudonym, d.GenderID, d.TransactionAuditGUID, d.InitDate, d.InitUserID, d.LastUpdateDate, d.LastUpdateUserID, d.Status, 'D', SYSDATETIME(), SYSDATETIME(), @systemUserID, 0, @auditLinkGUID FROM deleted d ) END -- If 'D'END -- if @@Rowcount = 1END --final ENDGO[/code]

Viewing all articles
Browse latest Browse all 6525

Trending Articles