我有一个表(在SQL Server中),存储表,如下所示。 Old_Id
的目的是用于更改跟踪。
这意味着当我要更新记录时,原始记录必须保持不变,但是必须使用新的Id
和更新的值以及{中的修改后的记录的ID {1}}列
Old_Id
我的问题是:
当我搜索id = 1或2或4时,我想选择所有相关记录。
在这种情况下,我想查看记录以下ID:1、2、4
如何在存储过程中编写它?
即使这样做是不好的做法,我也不能更改此逻辑,因为它的遗留数据库而且它是一个很大的数据库。
任何人都可以帮忙吗?
答案 0 :(得分:0)
您可以使用递归公用表表达式(CTE)来做到这一点
WITH cte_history AS (
SELECT
h.id,
h.name,
h.old_id
FROM
history h
WHERE old_id IS NULL
and id in (1,2,4)
UNION ALL
SELECT
e.id,
e.name,
e.old_id
FROM
history e
INNER JOIN cte_history o
ON o.id = e.old_id
)
SELECT * FROM cte_history;