C# 如何比较每列并单独显示差异

C# 如何比较每列并单独显示差异,c#,sql-server,entity-framework,tsql,entity-framework-6,C#,Sql Server,Entity Framework,Tsql,Entity Framework 6,请解释比较两行和显示字段以及更改值的最佳方法 范例 身份证件 员工编号 雇员姓名 地址1 地址2 薪水 更新日期 1. 501 约翰逊 第二大道 108 850 04/04/2020 2. 501 约翰逊 第二大道 109 900 04/05/2020 3. 501 约翰逊 第三大道 109 950 04/06/2020 这里有一个选项,它将通过一点JSON动态地取消绑定您的数据 示例或 所有已发布的内容都是程序说明。但是,我们需要您根据页面提出一个问题。我们不能确定你想从我们这里得到什么。请在

请解释比较两行和显示字段以及更改值的最佳方法

范例

身份证件 员工编号 雇员姓名 地址1 地址2 薪水 更新日期 1. 501 约翰逊 第二大道 108 850 04/04/2020 2. 501 约翰逊 第二大道 109 900 04/05/2020 3. 501 约翰逊 第三大道 109 950 04/06/2020
这里有一个选项,它将通过一点JSON动态地取消绑定您的数据

示例或


所有已发布的内容都是程序说明。但是,我们需要您根据页面提出一个问题。我们不能确定你想从我们这里得到什么。请在您的帖子中加入我们可以回答的有效问题。提醒:通过访问网站,确保您知道这里的主题;要求我们为您编写程序、建议和外部链接是离题的。请显示您当前拥有的代码,以便我们了解问题所在。您是否可以在该表上创建一个触发器,并将更改记录在单独的表中,如?您在此上下文中迄今为止尝试了什么?请阅读以了解有关改进问题的一些提示。您计划如何处理不同的数据类型,例如
NewValue
OldValue
可能是
money
nvarchar(max)
ID
是否保证是唯一且密集的,即从
1
开始,并精确计数?输入
1
的答案是什么?非常感谢。这正是我想要实现的。@jaka如果你觉得这有帮助,请随意接受答案。
;with cte as ( 
Select * 
      ,OldValue = lag(Value,1) over (partition by EmployeeID,[Key] order by UpdatedDate)
 From  YourTable A
 Cross Apply (
                Select [Key]
                      ,Value
                 From OpenJson((Select A.* For JSON Path,Without_Array_Wrapper,INCLUDE_NULL_VALUES  ) ) 
                 Where [Key] not in ('ID','UpdatedDate')
             ) B
)
Select [EmployeeID]
      ,[Column]=[Key]
      ,[NewValue] = [Value]
      ,[OldValue]
 From  cte
 Where [Value]<>[OldValue]
 Order By UpdatedDate desc
EmployeeID  Column      NewValue    OldValue
501         Address1    3rd Ave     2nd Ave
501         Salary      950         900
501         Address2    109         108
501         Salary      900         850