Suppose I store employee data in a xml
column in my log table. Sometimes data is also updated in the xml
column from a stored procedure.
He
I don't have the exact output you wanted - but at least you get a good comparison of old and new values:
;WITH OldData AS
(
SELECT
@XML1.value('(/NewDataSet/Employee/EmpID)[1]', 'int') AS 'EmpID',
@XML1.value('(/NewDataSet/Employee/Name)[1]', 'varchar(50)') AS 'Name',
@XML1.value('(/NewDataSet/Employee/DOB)[1]', 'datetime') AS 'DOB',
@XML1.value('(/NewDataSet/Employee/DeptID)[1]', 'varchar(50)') AS 'DeptID',
@XML1.value('(/NewDataSet/Employee/Salary)[1]', 'varchar(25)') AS 'Salary'
),
NewData AS
(
SELECT
@XML2.value('(/NewDataSet/Employee/EmpID)[1]', 'int') AS 'EmpID',
@XML2.value('(/NewDataSet/Employee/Name)[1]', 'varchar(50)') AS 'Name',
@XML2.value('(/NewDataSet/Employee/DOB)[1]', 'datetime') AS 'DOB',
@XML2.value('(/NewDataSet/Employee/DeptID)[1]', 'varchar(50)') AS 'DeptID',
@XML2.value('(/NewDataSet/Employee/Salary)[1]', 'varchar(25)') AS 'Salary'
)
SELECT
'Old values', od.*
FROM OldData od
UNION
SELECT 'New values', nd.*
FROM NewData nd
Gives you an output of:
EmpID Name DOB DeptID Salary
Old values 1005 keith 1981-12-02 00:00:00.000 ACC001 10,500
New values 1006 keith 1981-05-02 00:00:00.000 ACC002 10,900
SQL Server is great for storing and manipulating data - but presentation like this should be done in a front-end application (like an ASP.NET application) - not in T-SQL....