2

Oracle テーブルから SQL2K テーブルにデータをプルする DTS パッケージを作成したいと考えています。SQL2K テーブルにまだ存在しない行を挿入し、SQL2K テーブルに既に存在する行を更新するにはどうすればよいですか?

テーブル全体を切り捨てて再作成するか、一時テーブルを作成してから、一時テーブルから宛先テーブルへの更新/挿入を行うことができると思います。

DTS を使用する簡単な方法はありますか?

ありがとう、

ロカール

4

5 に答える 5

1

これは、挿入用と更新用の 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

于 2008-10-24T02:42:42.360 に答える
0

試す:

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
于 2010-01-18T11:02:44.247 に答える
0

はい、ソースと宛先の主キーの値は一致します。

一時 (ステージング) テーブルを使用せずにこのタスクを達成したいと考えていました。

また、SQL Server 2000 を使用しているため、MERGE ステートメントは使用できません。

于 2008-10-24T00:23:01.863 に答える
0

同じステートメントで TSQL を使用して INSERT または UPDATE を実行する方法はありませんが、2 つのステートメントで非常に簡単に実行できます (上記のとおり)。

ステートメント 1:

DELETE FROM dbo.WhateverTable 
WHERE WhateverTableID IN (SELECT WhateverTableID FROM MySource)

ステートメント 2:

INSERT INTO dbo.WhateverTable 
SELECT * FROM MySource

また、一時テーブルを使用したくない理由はありますか?

于 2008-10-24T10:04:44.170 に答える
0

同じ主キーの値を保持していますか?

いくつかのオプションがある場合、SQL の一部のバージョンは、必要に応じて更新または挿入する MERGE ステートメントをサポートしています。

または、自分で書くこともできます。

すべての行を SQL データベースのステージング テーブルにロードし、行ごとにメインの SQL テーブルに主キーが存在するかどうかをチェックします。キーが存在する場合は行を更新し、存在しない場合は挿入します。

于 2008-10-23T09:02:24.373 に答える