Null許容のbit型のカラムが存在しない場合のデータ競合エラーの原因と解消方法
Accessの単票画面+AccessからSQL Serverへのリンクテーブルの構成で、
マスタメンテナンス画面を作成していたのですが、とあるテーブルの単票画面から更新しようとすると、以下のデータ競合エラーがでて全くデータ更新できない状態となりました。
エラーメッセージから検索すると、以下のURLがヒットするのですが、
いずれのURLにもテーブルのカラムにNull許容のbit型が存在することをが原因と記載されています。
ところが、このエラーがでるテーブルにNull許容のbit型のカラムが存在しないため、
もう少し調べてみると、以下のURLがヒットし、こちらが原因でした。
よくテーブルのレコード作成日時やレコード更新日時のカラムでミリ秒まで保持しているケースがありますが、datetime型がミリ秒まで保持しているカラムが存在する場合でも、必ずこのデータ競合エラーが発生します。
以下のSQLでミリ秒を切捨てするデータ更新することで、このエラーは解消されました。
update [dbo].[M_Table] set [CreateDatetime] = CONVERT(DATETIME,CONVERT(VARCHAR(24),[CreateDatetime],20)), [UpdateDatetime] = CONVERT(DATETIME,CONVERT(VARCHAR(24),[UpdateDatetime],20))
Accessの日付/時刻型は、秒単位までしか扱えず、ミリ秒まで保持できないようです。