2017-07-11 19 views
0

SSISを使用して次の操作を実行しようとしています。私はSDTの最新バージョンとquering SQL Server 2008 R2を使用しています。 もし私が間違ってやっていると誰かがお勧めしますか?もっと良い方法があれば教えてくださいSSISのsqlコマンドでDeclareステートメントがサポートされていません

私は基本的にはソースからストアドプロシージャを実行し、その結果をデスティネーションに保存する必要があります。約20のストアドプロシージャがあります。

xmlが入力として格納された各プロシージャ。私はデータフロータスクの中でコントロールタスクを作成しました。データフロー内で、私はoledbソースを作成しています。

SQLコマンドとしてデータアクセスモードを選択しました。私は以下の私のクエリを作成していますが、私はプレビュー時、私はそのdeclare文はどのように私は、ストアドプロシージャの残りの部分を実行しない

Declare @xmldata xml 
set @xmldata = (SELECT DISTINCT top 1000 (mc.companyId) as id 
FROM ciqMarketCap mc 
JOIN ciqCompany c 
     ON c.companyid = mc.companyid 
WHERE c.companyStatusTypeId NOT IN (5,6) AND c.companyTypeId IN (1,4) for xml path(''), type, root('partyIds') 
) 
exec getPartiesMarketData @xmldata 

がサポートされていないというエラーを取得します。いくつかのoledbソースを作成する必要がありますか?

+1

必要なものを実行するラッパーSPを作成してSSISから呼び出すのはなぜですか? – Jeremy

+0

ラッパー内で20個のストアドプロシージャを実行するのですが、20個の結果セットをデスティネーションの20個のテーブルにどのように送るのですか? – Tom

+0

私は新しいSSISです。あなたが私に例を挙げると助けになるでしょう。また、xmlのロジックはすべてのSPで同じであることに注意してください – Tom

答えて

0

私は段階的に行うことをお勧め:

は、SSISの変数を作成します。

XMLDATA列セット= "" ExecのgetPartiesMarketData "の

のSQLQuery文字列セット式" + @xmldata

でSQLタスクを実行するSQLステートメントを直接入力に入力:

ID DISTINCTトップ1000(mc.companyId)をid FROM ciqMarketCap mc JOIN ciqCompany c ON c.companyid = mc.companyid c.companyStatusTypeIdはxmlパス( '')、タイプ、ルートのIN(5,6)およびc.companyTypeId IN(1,4)

SQLソースの種類:変数

( 'partyIds')

変更結果が

XMLDATA XML

地図の結果に設定は、次に別のもので、あなたの本当のクエリを実行するSQLが接続されている実行します

ソース変数:SQLquery

私はこれをテストしていませんが、動作することは間違いありません。

+0

データフロータスク、oledbソース、接続マネージャを使用するとどうなりますか?どのようにこれらを設定するのですか – Tom

+0

spが実際に何をしていますか?カーソルの場合は、SSISでforeachループを実行してXMLをスキップしてください。 – KeithL

+0

storedprocedureには、提供されたxml入力に基づいてレコードを取得するジョインが含まれています。カーソルを使用しない – Tom

関連する問題