我有一个c#应用程序。我的SQL数据库(2012版)中还有两个订单表,tblOrderLive和tblOrderTemp。两个表都有一个名为OrderId的主键。
每天都会删除tblOrderTemp的内容,并通过文本文件加载最近3个月的订单。 tblOrderTemp中的任何订单都将添加到tblOrderLive中。
订单也可能已更改(不是OrderId,但可能是付款类型,预计交货日期或订单价值等。
表格的简要示例
tblOrdersLive
OrderId PaymentType DateDelivery OrderValue
1223 Cash 2018-05-01 1000
1255 Credit 2018-05-05 1325
1189 Cash 2018-05-05 800
1093 Cash 2018-05-04 55
tblOrdersTemp
OrderId PaymentType DateDelivery OrderValue
1223 Cash 2018-05-01 900 -- order value changed
1255 Credit 2018-05-05 1325
1189 Credit 2018-07-05 800 -- payment type & date changed
1093 Cash 2018-05-04 55
我希望能够做到以下几点。
如果两个表中的订单具有相同的OrderId,但其中一个字段已更改(因此,在我的第1行上方的示例中,订单值已更改,而第3行中的付款类型和交付日期已更改)更改将记录到第三个表中,如下所示,
tblOrderLog
OrderId DateLog OldValue NewValue FieldName
1223 2018-04-11 1000 900 OrderValue
1189 2018-04-11 Cash Credit PaymentType
1189 2018-04-11 2018-05-05 2018-07-05 DateDelivery
所以我想知道最好的方法,在真实的例子中我们需要检查大约20个字段?可以在SQL中完成(/应该这样做)吗?目前我正在考虑在我的C#应用程序中执行此操作。
我目前在C#中的计划(不确定这是最好的方式,因此我的问题)是有一个Orders对象。下载订单类型的两个列表(Live& Temp)。然后在我的订单类中实现 IEqualityComparer接口两个突出显示两个具有相同OrderId的订单具有不同的值。然后我将遍历所有字段以找到不同的字段并将它们上传到SQL表tblOrderLog。