带有datetime2字段的HashBytes

时间:2016-08-02 14:08:32

标签: sql hash datetime2 hashbytes

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

但我不能改变格式,因为我需要准确地比较它的值,包括所有毫秒。

任何人都可以给我一个解决方法吗?任何替代解决方案都将受到赞赏。

1 个答案:

答案 0 :(得分: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))