在一个SP内使用CTE复制相关数据?

时间:2009-06-25 23:27:33

标签: sql-server

我必须为一名学生复制数据(克隆学生) 这包括三个表:

  
      
  1. tblStudent(其中PK是studentId)
  2.   
  3. tblStudentSubjects(其中PK是StudentsubjectId,FK是StudentId)
  4.   
  5. tblStudentSubjectComments(其中PK不存在且FK是   StudentSubjectId)
  6.   

要做到这一点,我必须

  
      
  1. 通过复制现有学生记录创建学生记录并获取新记录   studentid
  2.   
  3. 使用创建每个现有学生科目的学生科目记录   新的学生和获得新的   StudentSubjectId
  4.   
  5. 为每位现有学生创建学生主题评论记录   主题评论使用新的   studentSubjectId
  6.   

...希望你有所了解

那么,有一种优雅的方法可以在一个商店程序中使用CTE来实现这一目的吗? (我正在使用SQL Server 2005)

2 个答案:

答案 0 :(得分:2)

INSERT和UPDATE语句一次只能在一个表上运行。您有3个表需要INSERT。你绝对可以一次性将多行插入到表中,我认为尽可能做好,但你不能同时在多个表中放行。

这样想。查询数据时,您将从多个源中将记录拉入单个结果集。修改数据时,您将从多个源中提取记录以将更改应用于单个结果集。

另外,我讨厌说,但有一些事情不需要超级优雅的解决方案。您的存储过程只需要应用一些最佳实践来确保所有3个INSERT语句都作为原子事务(全部或全部)发生。最终结果可能是冗长和无趣的,但它将是快速,有效,安全,易懂和可维护的。

答案 1 :(得分:0)

您是否尝试过使用OUTPUT INTO将初始操作的结果导入另一个表并重复?