2016-05-13 4 views
0

私はSQL Server 2008 R2で作業しており、作業するために別の場所に正確にレプリケートする必要があるプロダクションテーブルを用意しています。私は最初にすべてを移動して(一度オフに)ジョブを実行して、毎日更新/挿入を毎日更新するジョブを実行します。タイムスタンプ値を持つレコードのコピーを作成する方法

毎日のジョブでは、本番表を見て、(作成された日付に基づいて)挿入する必要がある新しい値を見つけ、更新する必要がある既存の値を見つけます。新しい値はすべて挿入され、変更された値はすべて更新されます。

ジョブは、これらの行を本番表からプルし、それらを他の場所にあるコピー表に適用します。タイムスタンプの列に問題があります。プロダクションテーブルにはタイムスタンプカラムがあり、(タイムスタンプカラムとしても作成された)コピーテーブルを更新するときに、これをどのように処理すべきかわかりません。

production.timestamp_col = copytable.timestamp_col(タイムスタンプ列を更新できません)を設定するとエラーが発生します。

コピーテーブルの列を&に変換すると、本番表から選択した値が何かに変換されます。 )、自分の値を入れて(テーブルの正確なコピーを持たない)、または切り捨て/切り捨てを行い、毎回再作成します(データ量のために非効率的です)。

このような状況で、最良のアプローチは何でしょうか?

おかげSQLで

+0

スケジュールされたベースでデータをコピーするには、レプリケーションが最適です。あなたが言いました。今すぐタイムスタンプ。タイムスタンプを行のGUIDと考えてください。これは、すべてのユニバースで行を一意にマークします;-)これが、テーブルにタイムスタンプ列を1つだけ持つことができる理由です。したがって、同じタイムスタンプ値を持つ2つの行を持つことはできません。これは、一部のレプリケーションシナリオで役立ちます。 – shadow

答えて

0

宛先タイムスタンプ列をvarbinary(8)に変換してから値を挿入できます。これは、正確なコピーを作成するのに役立ちますが、タイムスタンプ機能を無効にします。コピーが必要な場合は、これを行います。タイムスタンプ列の実際の目的は、バージョニングを通じて行の変更を追跡することです。

2

タイムスタンプ列が生成されたシステムであり、あなたはそれを更新または挿入時にそれを設定することはできません。 SQLはこれをすべてあなたのために行います。

https://technet.microsoft.com/en-us/library/ms182776(v=sql.110).aspx

レプリケーション/ 100%正確なコピーを取得するためにミラーリングして何かをやってのけることができるかもしれないが、それはそれはあなたのニーズに応じて、価値がないかもしれません。

関連する問題