簡體   English   中英

使用功能從另一個表創建連接表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM