我正在开发一个相当大的SQL数据库项目,需要一些历史记录跟踪。我知道SQL有像Data Capture这样的东西,但我需要更多的控制,而不仅仅是存储数据的备份副本以及其他要求。
这是我想要做的,我在这里找到了一些类似的问题,如
get-the-smallest-datetime-value-for-each-day-in-sql-database
和
how-can-i-truncate-a-datetime-in-sql-server
我想要避免的是这些答案中提到的事物的类型,我的意思是它们在查询期间需要某种转换,即截断DateTime
值,我想要什么要做的是获取DateTime.Ticks
或其他DateTime
属性,并进行单向转换为较小的类型以创建"版本"在数据库更新/插入后,可以快速查询而不进行任何类型的转换的每条记录。
我对简单地将DateTime.Ticks
中的long存储为版本或使用类似Base36字符串的问题是在查询期间比较字段所需的大小和时间。
任何人都可以指出我正确的方向如何 安全 将DateTime.Ticks
或long
转换为可以直接比较的内容在查询期间?我的意思是,我希望能够使用以下内容找到历史记录:
int versionToFind = GetVersion(DateTime.Now);
var result = from rec in db.Records
where rec.version <= versionToFind
select rec;
或
int versionToFind = record.version;
var result = from rec in db.Records
where rec.version >= versionToFind
select rec;
这里要提到的一点是,我并不反对使用其他快速跟踪数据历史记录的方法。我只需要最快最小的解决方案,以便能够为每条记录生成和比较版本。