I am new to SQL Server 2008 and I need advice from all of you. I want to find out the changed value in inserted
and deleted
tables of the SQL Serve
You could make a dynamic "comparer" by converting the inserted and deleted tables into 2 xml, iterating through the properties and comparing the xml value.
Example:
CREATE TRIGGER MY_COMPARER
ON TABLE_NAME
AFTER UPDATE
AS
BEGIN
DECLARE @columnIndex INT = 1;
DECLARE @maxColumns INT = (select count(*) from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'TABLE_NAME');
DECLARE @insertedXML XML = (select top 1 * from INSERTED FOR XML PATH('ROOT'), ELEMENTS XSINIL);
DECLARE @deletedXML XML = (select top 1 * from DELETED FOR XML PATH('ROOT'), ELEMENTS XSINIL);
WHILE @columnIndex <= @maxColumns BEGIN
DECLARE @insertedXMLValue XML = (select @insertedXML.query('/ROOT/*[sql:variable("@columnIndex")]'));
DECLARE @deletedXMLValue XML = (select @deletedXML.query('/ROOT/*[sql:variable("@columnIndex")]'));
DECLARE @insertedValue NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX), @insertedXMLProp);
DECLARE @deletedValue NVARCHAR(MAX) = CONVERT(NVARCHAR(MAX), @deletedXMLProp);
IF (@insertedValue != @deletedValue)
print('Column: ' + CONVERT(NVARCHAR(MAX), @columnIndex) + ' has changed')
SET @columnIndex = @columnIndex + 1;
END
END