0

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

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
4

0 に答える 0