我正在查看一个旧的存储过程,它的工作是根据昨天和今天的数据保留新的排序顺序。
排序顺序不再保留,我已将其缩小到WHERE
删除所有行的子句。主要目标是保留,SortOrder
因此如果昨天某些自定义数据位于第 4 位,则任何取代其位置的新自定义数据也应位于第 4 位。
如果我消除
--AND b.PrimaryID = b.SortOrder
然后我得到数千行。我怀疑出了点问题,但我不明白。我怎样才能使它更简单,所以它真的很容易理解?
重要提示:如果数据不再排序,则SortOrder
实际等于。PrimaryID
否则它是增量1 2 3 4 5 6 7 ..
的等等。我想这是建筑师最初的做法。
-- Merge data and get missing rows that have not changed.
SELECT
PrevPrimaryID = a.PrimaryID
,a.WidgetID
,a.AnotherValue
,a.DataID
,PrevSortOrder = a.SortOrder
,NewPrimaryID = b.PrimaryID
,NewDataID = b.DataID
,NewStartDate = b.StartDate
,NewSortOrder = b.SortOrder
INTO #NewOrder2
FROM #YesterdaysData2 a
LEFT JOIN #TodaysData2 b ON a.WidgetID = b.WidgetID
AND a.AnotherValue = b.AnotherValue
WHERE
a.Primaryid <> a.sortorder
AND b.PrimaryID = b.SortOrder
SELECT * FROM #NewOrder2
-- later update based on #NewOrder2...
UPDATE CustomerData
SET SortOrder = (
SELECT PrevSortOrder
FROM #NewOrder2
WHERE CustomerData.PrimaryID = #NewOrder2.NewPrimaryID
)
WHERE PrimaryID IN (
SELECT NewPrimaryID
FROM #NewOrder2
)
更新 - 是否可能只是一个错误,该WHERE
子句应该是
WHERE a.Primaryid <> a.sortorder
AND b.PrimaryID <> b.SortOrder