I have a code below that should insert records into the table but unfortunately this code foes not work in case multiple records are inserted or updated or deleted. How should I rewrite the code for procedure to loop through all the inserted / deleted records? And I do need to use that stored procedure with Input parameters (not just simple insert into ... select ... from ...)
IF EXISTS (SELECT * FROM MyDB.sys.triggers WHERE object_id = OBJECT_ID(N'[dbo].[MyTable_DEL_UPD_INS]'))
DROP TRIGGER [dbo].[MyTable_DEL_UPD_INS]
GO
CREATE TRIGGER [dbo].[MyTable_DEL_UPD_INS]
ON [MyDB].[dbo].[MyTable]
AFTER DELETE, UPDATE, INSERT
NOT FOR REPLICATION
AS
BEGIN
DECLARE @PKId INT,
@Code VARCHAR(5),
@AuditType VARCHAR(10)
SET @Code = 'TEST'
IF EXISTS (SELECT * FROM deleted d)
AND NOT EXISTS (SELECT * FROM inserted i)
BEGIN
SELECT TOP 1
@PKId = d.[MyTable_PK],
@AuditType = 'DELETE'
FROM
deleted d WITH (NOLOCK)
IF @PKId IS NOT NULL
AND @Code IS NOT NULL
EXEC MyDB.[dbo].[SP_Audit] @PKId, @Code, @AuditType
END
IF EXISTS (SELECT * FROM deleted d)
AND EXISTS (SELECT * FROM inserted i)
BEGIN
SELECT TOP 1
@PKId = d.[MyTable_PK],
@AuditType = 'UPDATE'
FROM
deleted d WITH (NOLOCK)
IF @PKId IS NOT NULL
AND @Code IS NOT NULL
EXEC MyDB.[dbo].[SP_Audit] @PKId, @Code, @AuditType
END
IF NOT EXISTS (SELECT * FROM deleted d)
AND EXISTS (SELECT * FROM inserted i)
BEGIN
SELECT TOP 1
@PKId = d.[MyTable_PK],
@AuditType = 'INSERT'
FROM
deleted d WITH (NOLOCK)
IF @PKId IS NOT NULL
AND @Code IS NOT NULL
EXEC MyDB.[dbo].[SP_Audit] @PKId, @Code, @AuditType
END
END
GO
ALTER TABLE [MyDB].[dbo].[MyTable] ENABLE TRIGGER [MyTable_DEL_UPD_INS]