CTE を利用する単一ステートメントの非カーソル メソッドを次に示します。
WITH CTE(iteration, page_id, content) AS ( SELECT 0, P.page_id, REPLACE(P.content, M1.old_value, M1.new_value) FROM Pages P INNER JOIN Moving M1 ON P.content LIKE '%' + M1.old_value + '%' WHERE NOT EXISTS (SELECT * FROM Moving M2 WHERE P.content LIKE '%' + M2.old_value + '%' AND M2.moving_id < M1.moving_id) UNION ALL SELECT CTE.iteration + 1, CTE.page_id, REPLACE(CTE.content, M3.old_value, M3.new_value) FROM CTE INNER JOIN Moving M3 ON CTE.content LIKE '%' + M3.old_value + '%' WHERE NOT EXISTS (SELECT * FROM Moving M4 WHERE CTE.content LIKE '%' + M4.old_value + '%' AND M4.moving_id < M3.moving_id) ) UPDATE P2 SET content = CTE1.content FROM Pages P2 INNER JOIN CTE CTE1 ON CTE1.page_id = P2.page_id AND NOT EXISTS (SELECT * FROM CTE CTE2 WHERE page_id = P2.page_id AND CTE2.iteration > CTE1.iteration)
プレ>