【发布时间】:2016-08-02 14:08:31
【问题描述】:
我正在使用多列上的哈希字节创建一个哈希键,以获得我们现在在 where 子句中使用的性能增益。
alter table dbo.Table1
add HashKey AS CAST(hashbytes('MD5', PID+PNumber+CONVERT([varchar] (50),[DateStamp]) +CONVERT(VARCHAR(50), TransactionCount)+OCD+ONbr+TransactionID) AS VARBINARY(80)) PERSISTED
但其中一列是我无法添加的 datetime2 字段。当我尝试时,我收到以下错误消息
“表 'table1' 中的计算列 'HashKey' 无法持久化,因为该列是不确定的。”。
根据我的研究,我发现不能使用 datetime2,因为它是不确定的。
但我无法更改格式,因为我需要完全比较该值,因为它包括所有毫秒。
任何人都可以给我一个解决方法吗?任何替代解决方案将不胜感激。
【问题讨论】:
-
我从未听说过非确定性数据类型。似乎您正在做的事情与 checkum-function 几乎相同:msdn.microsoft.com/en-us/library/ms189788.aspx
-
如果表达式列表中的某个值发生变化,则列表的校验和一般也会发生变化。但是,校验和不会改变的可能性很小。因此,我们不建议使用 CHECKSUM 来检测值是否已更改,除非您的应用程序可以容忍偶尔丢失更改。我们不能容忍这种情况:)
标签: sql hash datetime2 hashbytes