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))