Oracle テーブルから SQL2K テーブルにデータをプルする DTS パッケージを作成したいと考えています。SQL2K テーブルにまだ存在しない行を挿入し、SQL2K テーブルに既に存在する行を更新するにはどうすればよいですか?
テーブル全体を切り捨てて再作成するか、一時テーブルを作成してから、一時テーブルから宛先テーブルへの更新/挿入を行うことができると思います。
DTS を使用する簡単な方法はありますか?
ありがとう、
ロカール
Oracle テーブルから SQL2K テーブルにデータをプルする DTS パッケージを作成したいと考えています。SQL2K テーブルにまだ存在しない行を挿入し、SQL2K テーブルに既に存在する行を更新するにはどうすればよいですか?
テーブル全体を切り捨てて再作成するか、一時テーブルを作成してから、一時テーブルから宛先テーブルへの更新/挿入を行うことができると思います。
DTS を使用する簡単な方法はありますか?
ありがとう、
ロカール
これは、挿入用と更新用の 2 つのデータ ドリブン クエリ タスクを使用して、DTS パッケージで実行できます。データ ドリブン クエリ タスクを使用するのは少し面倒ですが、機能します。また、動的 t-sql を使用して AS/400 データベースを使用する SQL Server 2000 でこれ (「マージ」) を実行しました。psql を出力する t-sql スクリプトを作成し、それを Oracle データベースへのリンク サーバーで再度実行します。
更新: DTS の「データ ドリブン クエリ タスク」を使用すると、DTS の SQL サーバー接続から、一時テーブルまたはリンク サーバーを使用する DTS の Oracle サーバー接続にデータを挿入または更新できます。
Update2; 私が何を意味するかについての詳細は次のとおりです 。 http://www.databasejournal.com/features/mssql/article.php/3315951
http://msdn.microsoft.com/en-us/library/aa933507(SQL.80).aspx
試す:
DELETE FROM dbo.WhateverTable WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)
かなり遅いかもしれません。代わりに join を使用してください:
Delete a
from firstTable a join secondTable b on a.id = b.id
はい、ソースと宛先の主キーの値は一致します。
一時 (ステージング) テーブルを使用せずにこのタスクを達成したいと考えていました。
また、SQL Server 2000 を使用しているため、MERGE ステートメントは使用できません。
同じステートメントで TSQL を使用して INSERT または UPDATE を実行する方法はありませんが、2 つのステートメントで非常に簡単に実行できます (上記のとおり)。
ステートメント 1:
DELETE FROM dbo.WhateverTable
WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)
ステートメント 2:
INSERT INTO dbo.WhateverTable
SELECT * FROM MySource
また、一時テーブルを使用したくない理由はありますか?
同じ主キーの値を保持していますか?
いくつかのオプションがある場合、SQL の一部のバージョンは、必要に応じて更新または挿入する MERGE ステートメントをサポートしています。
または、自分で書くこともできます。
すべての行を SQL データベースのステージング テーブルにロードし、行ごとにメインの SQL テーブルに主キーが存在するかどうかをチェックします。キーが存在する場合は行を更新し、存在しない場合は挿入します。