看起来目前 Dapper 中的一项声明无法实现这一点。当考虑到需要在幕后做什么才能实现这一目标时,这是完全可以理解的。
我最终做的是使用 3 条语句创建一个临时表,填充需要更新的数据,然后通过内部联接调用临时表的更新:
cn.Execute(@"create table #routineUpdatedRecords
(
AircraftId int,
ItemNumber int,
ToleranceMonths int,
ToleranceDays int,
ToleranceLandings int,
ToleranceCycles decimal(12,2),
ToleranceRIN decimal(12,2),
ToleranceHours decimal(12,2)
);");
cn.Execute(@"Insert INTO #routineUpdatedRecords
VALUES(@AircraftId, @ItemNumber, @ToleranceMonths, @ToleranceDays,
@ToleranceLandings, @ToleranceCycles, @ToleranceRIN, @ToleranceHours)", updateInput);
var numResults = cn.Execute(@"UPDATE rm
SET rm.ToleranceMonths=ur.ToleranceMonths,
rm.ToleranceDays=ur.ToleranceDays,
rm.ToleranceHours=ur.ToleranceHours,
rm.ToleranceLandings=ur.ToleranceLandings,
rm.ToleranceCycles=ur.ToleranceCycles,
rm.ToleranceRIN=ur.ToleranceRIN
from [RoutineItems] rm
Inner Join #routineUpdatedRecords ur ON rm.AircraftId=ur.AircraftId AND rm.ItemNumber=ur.ItemNumber");
我相信这比循环调用 update 更快,因为我更新了大约 600K 行。