タイムスタンプ データ型は、SQL Server によって管理されます。テーブルの列タイプ以外で使用されているのを見たことがありません。その容量では、タイムスタンプ型の列は、データベース内の他のすべての更新に関連して、行の最後の挿入/更新の厳密な序数を提供します。データベース全体で最新の序数を表示するには、@@DBTS または rowversion() の値を取得できます。
http://msdn.microsoft.com/en-us/library/ms182776(SQL.90).aspxごと
タイムスタンプ (Transact-SQL)
は、データベース内で自動的に生成された一意の 2 進数を公開するデータ型です。通常、timestamp はテーブル行にバージョン スタンプを付けるメカニズムとして使用されます。ストレージサイズは 8 バイトです。タイムスタンプ データ型は単なる増分であり、日付や時刻は保持されません。日付または時刻を記録するには、datetime データ型を使用します。
したがって、タイムスタンプ列の揮発性の値は設定できず、行が変更されると変更される可能性があります。ただし、タイムスタンプ値を varbinary(8) 値に凍結することはできます。
たとえば、ソース テーブルとターゲット テーブルがあるとします。
CREATE TABLE tblSource (
Id int not null
colData int not null
colTimestamp timestamp null)
CREATE TABLE tblTarget (
Id int not null
colData int not null
colTimestampVarBinary varbinary(8) null)
次に、抽出プロセスで、最後に抽出プロセスを実行してから更新されたものをすべてキャプチャすることができます。
DECLARE @maxFrozenTargetTimestamp varchar(8)
SELECT @maxFrozenTargetTimestamp = max(colStamp) FROM tblTarget
INSERT tblTarget(Id, colData, colTimestampVarBinary)
SELECT
Id
,colData
colTimestampVarBinary = convert(varbinary(8) colTimestamp)
FROM
tblSource
WHERE
tblSource.colTimestamp > @maxFrozenTargetTimestamp
問題が発生している場合、私の最初の推測では、問題の核心は varchar から varbinary(8) への変換であり、タイムスタンプ型への変換ではありません。
詳細については (おそらく多すぎる)、コメント (4 番目の 1 つ下) を参照してください。 ?showComment=1213612020000