我想定期将表的全部内容复制到第二个历史记录表,除了额外的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();
}
这真的是最好和最有效的方法吗?历史表用于数据挖掘并生成随时间范围等数据变化的图表。
答案 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)
或者,您可以使用触发器进行审核,这样就可以审核每个数据库操作,而无需安排定期作业。
我将不再详述,而是参考之前关于这个主题的帖子: