我有一个函数GetChildren(@id uniqueidentifier)
,它返回一个节点表和一个从删除触发器中删除的父表我想制作一个大的节点表,为每一行连接 GetChildren 的输出。已删除的 ID,我该怎么做?请说如何仅以纯 sql 方式在没有变量和循环的情况下制作它
我想要类似于 linq c# 中的 SelectMany
例子:
deleted
桌子
+-----+
| Id |
+-----+
| 111 |
+-----+
| 222 |
+-----+
Nodes
桌子
+-----+----------+
| Id | ParentId |
+-----+----------+
| 111 | ... |
+-----+----------+
| 222 | ... |
+-----+----------+
| 333 | ... |
+-----+----------+
| 444 | 111 |
+-----+----------+
| 555 | null |
+-----+----------+
| 666 | 222 |
+-----+----------+
GetChildren('111')
将产生:
+-----+
| Id |
+-----+
| 111 |
+-----+
| 444 |
+-----+
GetChildren('222')
将产生:
+-----+
| Id |
+-----+
| 222 |
+-----+
| 666 |
+-----+
我想得到上面2个串联的表:
+-----+
| Id |
+-----+
| 111 |
+-----+
| 444 |
+-----+
| 222 |
+-----+
| 666 |
+-----+
如果deleted
将包含 4 行,我想连接GetChildren
每一行的所有 4 个输出
您可以使用CROSS APPLY从基于另一个表的行的表值函数返回和合并多个结果集。在您的示例中,它看起来像:
SELECT c.*
FROM deleted d
CROSS APPLY GetChildren(d.Id) c
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句