【发布时间】:2013-09-24 23:10:46
【问题描述】:
我有一个非常标准的关系数据情况,其中有一个带有子实体的根实体(和相应的表)。这些孩子有大约 6 个级别的孩子实体等等。每个级别都有许多孩子对一个父母的关系。我想编写一个有效地复制根实体及其所有子实体的过程(递归复制子实体的子实体),为每个实体创建新实体,同时将每个实体存储在其各自的表中。
我知道这可以通过嵌套游标来完成,但我不想那样做。我知道有一个更优雅的解决方案,我只需要帮助创建它。我有一种感觉,解决方案在于 OUTPUT 子句和 MERGE 语句的组合。
如果可以,请根据 SQL 开发新手级别调整您的答案。对于您使用的超出基本 SELECT INSERT UPDATE 和 DELETE 的任何结构,我需要解释或解释的链接。
感谢您的宝贵时间。
【问题讨论】:
-
这是什么 SQL 版本? (另外,请注意,这是您正在尝试的一项非常高级的任务,它并不适合新手)
-
MERGE 和 OUTPUT 很好的解决了这个问题。您可能需要一个 MERGE 语句加上每个表的一个临时表来复制,按照从上到下的拓扑顺序执行。您是否可以一次手动键入所有语句,或者您想要一种在运行时构造 SQL 的基于“反射”的方法?
-
我想知道@RBarryYoung 在想什么。递归公用表表达式,有人吗?或者这还不足以解决它?
-
@Guttsy 这在很大程度上取决于实际细节。从描述中不清楚这是一个自引用表还是涉及其他表以及它们是如何涉及的。 OP 将需要提供其中一些信息(以表定义和/或关系图的形式)。
-
@usr:我完全可以手动键入每个语句一次,而且我不需要基于反射的方法。
标签: sql sql-server tsql