Sql server 用于存档多个表的通用sql查询

Sql server 用于存档多个表的通用sql查询,sql-server,archive,Sql Server,Archive,我们如何在不编写单独存储过程的情况下管理归档过程 在SQLServer2000中 比如说, 当前数据库中有两个表,分别是student表和employee表 目的是归档这些表中的数据- student表格-超过1年的数据 employee表-超过2年的数据 要在student表中比较的日期字段是字段CreatedDate和员工的日期字段 isDOJ 此外,我还保存了一个配置表,其中包含列ConfigtableName、ConfigColumnName、ConfigCutoffdate a)

我们如何在不编写单独存储过程的情况下管理归档过程 在SQLServer2000中

比如说,

  • 当前数据库中有两个表,分别是student表和employee表
  • 目的是归档这些表中的数据-

  • student
    表格-超过1年的数据

  • employee
    表-超过2年的数据
要在student表中比较的日期字段是字段
CreatedDate
和员工的日期字段 is
DOJ

此外,我还保存了一个配置表,其中包含列
ConfigtableName、ConfigColumnName、ConfigCutoffdate

a) 如何编写一个通用查询,使其动态地采用表名和列名 从配置表中命名并将数据插入存档dbs的表

像这样的

INSERT INTO <ArchiveDb>.Dbo.<Table name obtained from config table>
    SELECT *
FROM <CurrentDb>.Dbo.<Table name obtained from config table>
WHERE   
       <ConfigColumnName  obtained from config table> < <Cutoffdate obtained from config table>
插入到.Dbo中。
挑选*
来自.Dbo。
哪里
< 
b) 如何管理标识字段集选项


c) 如果在第n次迭代中发生错误,是否可能将错误详细信息保存到日志中?

在存储过程中构造这种动态查询的唯一方法是使用存储过程。阅读我链接的文档。这很直截了当

我不确定我是否理解您所说的“标识字段集选项”是什么意思,但如果您担心列中的重复值应该具有唯一值(PK),我建议您禁用存档表中的唯一索引,因为它们是用于存档的。我不认为id列中存在重复值的主要问题,但最重要的是,如果存档表是源表的相同副本,则无论如何都不会出现这种情况


如果要捕获第n次迭代中的错误,则必须将每个迭代都包含在begin tran/commit tran块中,并检查错误。如果有,您可以登录到您选择的任何其他表;如果没有,则提交事务。例如(向下滚动到Transactions部分)。

通常,我会说您正在寻找一个动态sql语句,可能是一个游标,它在配置表中进行迭代,并使用它加上一个内置元表(INFORMATION_SCHEMA.COLUMNS)来构建insert语句,然后执行它们。对配置中的所有表格使用泡沫、冲洗、重复(光标)。然而,对于仅有的两个表来说,这是过分的。我只需编写insert语句并硬编码一个表截止日期的查找SQL并不是关于神奇的动态语句或减少代码,而是基于严格的表定义的重复和冗余的类似代码块。你越是偏离这一点,你的代码就越复杂,速度也就越慢。如果你要走上动态SQL的道路——你必须阅读和消化——绝对必要的阅读。。。。