我正在多列上使用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,因为它是非确定性的。
但我不能改变格式,因为我需要准确地比较它的值,包括所有毫秒。
任何人都可以给我一个解决方法吗?任何替代解决方案都将受到赞赏。
答案 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))