HashBytes с полем datetime2

Я создаю хеш-ключ, используя хеш-байты в нескольких столбцах, чтобы получить прирост производительности, который мы используем прямо сейчас в предложении 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, которое я не могу добавить. Пока я пытался я получаю сообщение об ошибке ниже

Msgstr "Вычисляемый столбец 'HashKey' в таблице 'table1' не может быть сохранён, потому что столбец недетерминированный."

Из моего исследования я обнаружил, что datetime2 нельзя использовать, поскольку он недетерминирован.

Но я не могу изменить формат, так как мне нужно сравнить значение точно так, как оно включает все миллисекунды.

Может кто-нибудь, пожалуйста, дайте мне обойти? Любое альтернативное решение будет оценено.

1 ответ

Решение

Я не уверен в последствиях..

Но приведение даты и времени к двоичному всегда дает новое значение. См. Ниже пример.

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))
Другие вопросы по тегам