1

我正在使用多个列上的哈希字节创建一个哈希键,以获得我们现在在 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,因为它是不确定的。

但是我无法更改格式,因为我需要完全比较该值,因为它包括所有毫秒。

任何人都可以给我一个解决方法吗?任何替代解决方案将不胜感激。

4

1 回答 1

0

我不确定影响..

但是将日期时间转换为二进制总是会给出新的值。请参阅下面的示例..

select getdate(),cast(getdate()as  binary)

2016-08-02 10:17:20.573 0x000000000000000000000000000000000000000000000000A65600A98EEC


2016-08-02 10:17:40.537 0x000000000000000000000000000000000000000000000000A65600A9A651

所以试试吧..

select hashbytes('md5',cast(getdate()as  binary))
于 2016-08-02T14:18:50.573 回答