我正在构建一棵树(物料清单样式),并转换一些数据。考虑以下表格:
物料清单
- 清单ID
- 父级ID
现在我正在使用CTE来填充它:
with BOM as
(
select @@identity as BomId, null as ParentId <some other fields> from MyTable
union all
select @@identity as BomId,
parent.BomId as ParentId,
some other fields
from MyTable2
inner join BOM parent on blabla)
insert into MyTable3
select * from BOM
问题是:@@identity 只会给我返回 union 前插入的最后一条记录的标识。
我该怎么做才能获得标识?我可以修改 Table3,但不能修改 Table1 或 Table2。
对于递归查询,
row_number()
的行为未定义,因此我无法在这里使用它。我知道我可以使用 GUID,那是唯一的选择吗?