我的任务是创建一个存储过程来复制与数据库中给定ID相关的每一段数据。这些数据涵盖了数十个表格。每个表可能有几十个匹配的行。
示例:
表帐户
pk = AccountID
表帐户设置
FK = AccountID
表用户
PK =用户ID
FK = AccountID
表UserContent
PK = UserContentID
FK =用户ID
我想创建一个与AccountID相关联的所有内容的副本(几乎遍历每个表)该副本将具有新的AccountID和UserContentID,但具有相同的UserID。新数据需要在各自的表中。 :)好玩吧?
以上只是一个示例,但我会为50或60个表格做这个。 我已经研究过使用CTE,但我们仍然有点模糊。这可能是最好的方法。我的SQL技能......到目前为止我已经使用了大约40个小时的记录:)
任何关于在哪里寻找的建议或指示都将不胜感激。另外,我不反对通过C#这样做,如果可能或更好。
提前感谢您提供任何信息帮助。
答案 0 :(得分:3)
解决这个问题的最简单方法是强力方式:编写一个非常长的proc,分别处理每个表。这将容易出错并且很难维护。但它的优点是不依赖于数据库或数据库元数据处于任何特别一致的状态。
如果你想要一些基于元数据的东西,事情会更有趣。那里有三个挑战:
我过去曾看过这个问题,虽然我不能为你提供防水算法,但我可以给你一个通用的启发式方法。换句话说:这就是我接近它的方式。
EF方法的优势:随着数据库的变化,您的模型也会发生变化,如果您的代码是基于元数据的,那么它应该能够适应。
缺点:如果您有“真正”相同但不同类型的字段,或者未正确建模的复杂三向关系,或者您需要解析的嵌入式CSV列表等现象,这不行。它只适用于您的数据库状态良好且模型良好的情况。否则你需要诉诸蛮力。