[英]Create a concatenated table from another table using function
我有一個GetChildren(@id uniqueidentifier)
函數,該函數返回從刪除觸發器中刪除的節點表和父表。我想制作一個較大的節點表,將每行的GetChildren輸出合並在一起.Id的刪除,我該怎么辦那? 請說出如何僅使用純sql-way使其不包含變量和循環
我想要類似於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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.