1

複数の列で 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

しかし、その列の 1 つは、追加できない datetime2 フィールドです。私がしようとしている間、私はエラーメッセージの下に来ています

「列が非決定論的であるため、テーブル 'table1' の計算列 'HashKey' を永続化できません。」.

私の調査から、datetime2 は非決定論的であるため使用できないことがわかりました。

しかし、すべてのミリ秒を含む値を正確に比較する必要があるため、形式を変更することはできません。

誰か私に回避策を教えてもらえますか?

4

1 に答える 1

0

私はその影響について確信が持てません..

ただし、datetime をバイナリにキャストすると、常に新しい値が得られます。以下の例を参照してください。

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 に答える