我有许多函数可以将记录从一个表移动到另一个表(通常用于存档数据的形式),并且想知道是否存在执行此操作的“最佳实践”,或者是一种比我目前使用的更有效的方法.
目前,我正在运行如下:
INSERT INTO archive_table SELECT [ROWID],[COL1],[COL2] FROM live_table WHERE <criteria> DELETE FROM live_table WHERE [ROWID] IN ( SELECT [ROWID] FROM archive_table )
这也在sql性能软件上发出警告,该查询可能导致索引抑制和性能下降;由于执行了SCAN,而不是SEEK.
值得补充的是,archive_table是live_table的精确副本,除了我们已经从[ROWID]列中删除了标识和主键,并且该表未在“实时”环境中使用,除了具有插入旧数据,如上所述.
[编辑]
似乎Alex的答案为此提供了一个非常简单的解决方案;关于使用触发器的注释不能解决此实例中的问题,因为事件发生在几天之后,并且标准取决于该时间段内的事件.
DELETE FROM live_table OUTPUT DELETED.* INTO archive_table WHERE <criteria>