0

2つのテーブルをレコードごとに比較したいと思います。テーブルごとに2つのカーソルがあります。コードは次のようになります

Declare Cursor c1 for SELECT * from Table1
OPEN c1
While @@Fetch_status=0
Begin
  Declare Cursor c2 for SELECT * from Table2
  OPEN c2
  WHILE @@Fetch_Status=0
  Begin
     /*Comparison happens here*/
  END
END

感染するとき、フェッチするカーソルを指定する必要がありますか?それを行うにはどうすればよいですか?

編集

表1の各レコードについて

  • 主キーに基づいてそのレコードをTable2で検索します。
  • 見つかったら、table1の列の値に基づいてTable2の追加の列の値を更新します。
  • このレコードがtable2にない場合は、table1からtable2にコピーして、table2の追加の列のデフォルト値を設定します。

他のソリューションを開く(カーソルに限定されない)

4

3 に答える 3

2

テーブルに同じ列定義がある場合、fastes の方法は単に「except」句を使用することです。

SELECT * from Table1
except
SELECT * from Table2

逆の方法でも実行します。

SELECT * from Table2
except
SELECT * from Table1

正確なセットの違いが表示されます。

EXCEPT と INTERSECT

于 2012-12-07T18:49:45.747 に答える
1

Redgate には、数ドルを費やすだけの場合に最適なツールがあります。

無料トライアルを利用して、ニーズに合っているかどうかを確認できます。

于 2012-12-07T16:31:22.590 に答える
0

できません...

SELECT * FROM Table1 LEFT JOIN Table2 ON <your matching criteria>

...次に、右の「半分」がNULLである行に対してINSERTを実行し、そうでない行に対してUPDATEを実行しますか?

于 2012-12-07T17:12:16.453 に答える