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