I have a lot of fields in a table and I am trying to audit any insert - update - delete in another table.
I just have a problem of getting the value of the exact field I've Chosen.
I wrote this code and I expect to get the old and new value of an exact field.
DECLARE @ColName NVARCHAR(225) ,
@FieldID INT;
DECLARE columnCursor CURSOR
FOR
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'acc_Account'
AND TABLE_SCHEMA = 'dbo';
DECLARE @deleted_colmn INT;
DECLARE CurDB CURSOR
FOR
SELECT @deleted_colmn
FROM #Deleted;
OPEN columnCursor;
FETCH NEXT FROM columnCursor INTO @ColName;
WHILE ( @@FETCH_STATUS <> -1 )
BEGIN
--OPEN CurDB;
--FETCH NEXT FROM CurDB INTO @deleted_colmn;
SET @FieldID = ( SELECT TOP 1
FieldID
FROM fld_Field
WHERE fld_Field.FieldName = @ColName
);
SET @newvalue = ( SELECT TOP 1
@ColName
FROM Inserted
WHERE @ColName = @ColName
);
SET @oldvalue = ( SELECT TOP 1
@ColName
FROM Deleted
IF @newvalue <> @oldvalue
BEGIN
INSERT INTO dbo.utl_Audit_Trail_Field
( AuditTrailID ,
FieldID ,
OldValue ,
NewValue ,
CreatedDate ,
CreatedUserID ,
UpdatedDate ,
UpdatedUserID
)
VALUES ( @AuditTrailID , -- AuditTrailID - bigint
@FieldID , -- FieldID - bigint
@oldvalue , -- OldValue - nvarchar(1000)
@newvalue , -- NewValue - nvarchar(1000)
@CreatedDate , -- CreatedDate - datetime
@CreatedUserID , -- CreatedUserID - bigint
@CreatedDate , -- UpdatedDate - datetime
@CreatedUserID -- UpdatedUserID - bigint
);
END;
FETCH NEXT FROM columnCursor INTO @ColName;
END; WHERE @ColName = @ColName
);