将备份表中的行还原到另一个表中。

时间:2011-09-16 10:41:13

标签: tsql

我想从EmpTable中进行简单删除,然后插入EmpTable Select * xxEmpTablemmddyyy
但EmpTable被太多表格引用。

考虑以下业务流程:

  • 员工表,通过pk和fk被许多表引用。

  • 员工表上的任何更新(比如更改员工姓名)都会更新现有行的effective_end_date,然后使用新的effective_start_date创建新行

  • 插入/更新到employee表的信息来自许多源文件(foxpro表,csv文件等)

  • 然后将所述源文件加载到临时表
  • 做一些验证
  • 存储过程spTransfer: - 备份现有表(从EmpTable中选择*到xxEmpTablemmddyyyy) - 更新/插入Employee表。

考虑一下情景。

  • 用户将源文件加载到登台表,做了一些验证工作
  • 执行spTransfer
  • 程序
  • 用户意识到源文件不正确。

现在,我需要根据xxEmpTablemmddyyyy恢复EmpTable的状态。

我想从EmpTable中进行简单的删除然后插入EmpTable Select * xxEmpTablemmddyyy 但EmpTable被太多表格引用。

任何建议都非常感谢。

谢谢,
埃尔默

1 个答案:

答案 0 :(得分:0)

是否需要能够反转删除和插入?

将要删除的行保存到存档表中,因此创建存档表,如果您有一个标识字段,则必须在identity_insert上插入

select * into MyEMpTable_Archived from MyEMpTable
where 1=2;

选择要删除的行并将其插入存档表。

从目标表中删除行。

从舞台表中加载新行。

如果要反转操作,还需要跟踪新插入的行。因此,在加载之前记录最大值,然后在加载之后再次记录。

如果用户在加载新数据后调用,则可以删除新插入的行,并放回已删除的行。

这是很多工作。

确保您有频繁的备份,投资SQL虚拟还原或其他一些工具,这些工具只允许您检索您在非生产环境中的一个表,然后将所需的行传回表中。

如果经常发生这种情况,您可能不应该从目标表中删除但是有一个位字段并将其标记为非活动状态或已删除,这样您就可以避免这一切。