ORACLEとSQLSERVERでのTIMESTAMP型の違い


ORACLEのTIMESTAMP型の項目をSQLSERVERにそのままリプレイスすると
処理内で登録/更新しようとした際に以下のようなエラーになる

・登録

timestamp 列に明示的な値を挿入できません。timestamp 列を除外する列リストを指定して INSERT を使用するか、timestamp 列に DEFAULT を挿入してください。

・更新

timestamp 列は更新できません。

Why?

ORACLEでは日時を表す型としてTIMESTAMP型を使用しているが、
SQLSERVERではTIMESTAMP型は少し位置づけが異なるため。

SQL ServerのTIMESTAMP型はユーザーによって設定されない想定の型であるため、上記エラーになるとのこと。
※中身もバイナリっぽいですので、そもそもそのまま人が見ることは想定しない項目の様子。

なので、datetime もしくは datetime2にする必要がある。

どっちが悪いとかではないんだろうけど、同じ型名で全然違うものを示すのはやめてほしいところ。