2

データベースに 10 個のテーブルのセットがあります ( DB1)。DB2また、別のデータベース ( ) には、同じ SQL Server 2008 R2 データベース サーバー マシン上にまったく同じスキーマを持つ10 個のテーブルがあります。

の 10 個のテーブルはDB1、データで頻繁に更新されます。

DB1で 10 個のテーブルを同期するために、毎日 1 回実行されるストアド プロシージャを作成するつもりですDB2。ストアド プロシージャはMERGEステートメントを利用します。

今、私の目標は、これを可能な限り一般的でパラメータ化することです。つまり、今後さらに多くのテーブルに対応し、さまざまなソース DB 名とターゲット DB 名に対応します。間違いなく、ハードコーディングは意図されていません。

これまでの私のアルゴリズムは次のとおりです。

  1. データベース名をパラメーターとして持つ
  2. ストアド プロシージャ内で最初のクエリを実行すると、ルックアップ テーブルから 10 個のテーブルの名前が返されます (これは 10、20、または何でもかまいません)。
  3. 上記の一連のテーブルのそれぞれに対して同期を行う一般的なMERGEステートメントがあります (主キーに基づいていますか?)

これは、さらに入力が必要な場所です。

このストアド プロシージャを実現する最善の方法は何ですか? SQL 構文が役立ちます。

4

1 に答える 1

2

マージステートメントに「スケルトン」を含む文字列を使用するために、同様のことをしなければなりませんでした。次に、sysビューで簡単なクエリを使用して、列のリストとpksを取得しました。

マージステートメントを構築するために同様のことを行うことができます。ここに私が今書いたスケッチを例として示します(恐ろしいことはわかっていますが、今はまともなことを書くつもりはありません。とにかくヒントを与えるはずです:P )

SQLフィドル

ちなみに、通常のストアドプロシージャで実行するだけで済みsp_executesqlます。この方法でコマンド文字列を作成するときは常に注意してください。それほど安全ではありません

于 2012-11-29T23:02:00.207 に答える