定期将整个SQL数据库表复制到另一个[history]表的最有效方法

时间:2013-12-19 12:38:47

标签: sql

我想定期将表的全部内容复制到第二个历史记录表,除了额外的datetime列之外,该表是相同的。 “实时”表最多可包含100,000行,每行需要复制一次,或者更少。

using (var db = new MyProjectEntities())
{
    var newData = from d in db.Data select d;
    foreach (var d in newData)
    {
        var histData = new DataHistory
        {
            DataName = d.DataName,
            DataType = d.DataType,
            DataValue = d.DataValue,
            Id = d.Id,
            SnapshotDate = DateTime.Now
        };
        db.DataHistories.Add(histData);
    }
    db.SaveChanges();
}

这真的是最好和最有效的方法吗?历史表用于数据挖掘并生成随时间范围等数据变化的图表。

3 个答案:

答案 0 :(得分:2)

您还没有说过哪个RDBMS,但我已将其基于MS SQL Server

只需运行一个SQL命令:

INSERT INTO SnapShotTable (DataName, DataType, DataValue, Id, SnapshotDate)
SELECT DataName, DataType, DataValue, Id, GetDate()
FROM SourceTable

答案 1 :(得分:1)

我认为使用SQL Agent触发的特定作业调用的脚本可能会相对有效。

使用LINQ和EF进入托管代码肯定不会有效,但可能很简单

答案 2 :(得分:0)

或者,您可以使用触发器进行审核,这样就可以审核每个数据库操作,而无需安排定期作业。

我将不再详述,而是参考之前关于这个主题的帖子:

Creating audit triggers in SQL Server