2017-01-30 21 views
0

私が後のことを完全には解決しない回答で他の質問を見たことがありますか?SSISでOLE DBコマンド変換を使用して、新しい列として挿入された各行の結果のプライマリキーをすぐに取得します。すべて内の同じデータフロータスクです。 SSISで求められるのは、一般的な、組み込みの、かなり単純なものでなければならないようですね。SSIS行を挿入し、OLE DBコマンドを使用して結果IDを取得する

INSERT INTO dbo.MyReleaseTable(releaseDate) 
OUTPUT ?=Inserted.id 
VALUES (?) 

だけ私が行う方法を見つけ出すことはできません。

だから、私にとって明白な最初の選択肢は、私はSELECTを行うと、私のコマンドでOUTPUT句を含めどこOLE DBコマンドを使用することですこれはOLE DBコマンド(出力あり)であり、不平を言っていません。私はこれを行うためにストアドプロシージャの使用について読んだので、私はこれを行うにはストアドプロシージャを使用する必要がありますか?

これはうまくいきません。スクリプト変換を使用して直接SQLを実行することはできますか?もしそれが私がしなければならないことであれば、カスタムコードとSSISブロックコンポーネントを使用する間の線がぼやけてしまい、SSISを投げ捨てて、コード内でETL全体を実行するように誘惑されます。

次に、SQLの実行タスクについて説明します。だから私は1つのデータフロータスク内で1つのデータフローを行うことはできませんか?私はそれを得ていますか?私は1つのデータフローを1つのデータフロータスク内に保持し、別々のタスク間で私の1つのフローを壊す必要はありません。

このシンプルなデータフローの目的がSSISに組み込まれていないことが判明したら、SSISのダンプを検討します。 Talendは無料のETLサービスを提供していますか?

答えて

1

これは、DataFlow内のSSISで行うことができますが、いくつかのトリックがあります。入力と出力パラメータを持つストアドプロシージャを作成し、hereのようにDataFlowで再利用し、結果値を取得する必要があります。このアプローチの
欠点:

  • は、各列ではなくバッチ処理、暗黙のトランザクションを引き起こすSP、で処理するストアドプロシージャ
  • を作成する必要があります。これはあなたのパッケージを遅くする可能性があります。

解決方法パフォーマンスペナルティなしのソリューション - 2つのDataFlowsで、まず一時テーブルに値を挿入し、OLE DBソースで2番目のDF - SQL MERGEコマンドを実行し、必要に応じて出力データを処理します。この内部トランザクションは、MSDTCか自分で処理します。

+0

これは私が知る必要があったものです。基本的に、SSISは機能が欠けているETLツールです。彼らは多くのことをしていますが、ADO.NET DBコマンドを実行できないようにするには、既存のブロック(スクリプトが必要またはデータフローを分割する必要があります)または入出力で入出力を行うことができないようにする必要がありますデータフローはフィーチャの観点からは失望しています。特に成熟したツールではそうです。 –

関連する問題