昨日と今日のデータに基づいて新しい並べ替え順序を保持する仕事である古いストアド プロシージャを見ています。
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