私はwhere句で現在使用しているパフォーマンスの向上を得るために、複数の列にhashbytesを使用してハッシュキーを作成しています。datetime2フィールドを持つHashBytes
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は非決定論的なので使用できないことがわかりました。
しかし、値をすべてミリ秒単位で正確に比較する必要があるため、フォーマットを変更することはできません。
誰でも私に回避策を教えていただけますか?他の解決策がありますか?
私は決して非決定的なデータ型について聞いたことがありません。あなたがやっていることは、チェックサム関数とほとんど同じですね。https://msdn.microsoft.com/en-us/library/ms189788.aspx –
式リストの値の1つが変更された場合、リストのチェックサムも一般に変更されます。ただし、チェックサムが変更されない可能性はわずかです。このため、CHECKSUMを使用して値が変更されたかどうかを検出することはお勧めしません。我々はこれを容認しない:) –