質問

SQLデータベースからXMLを引き出し、SSIを介してXMLをバルクで細断する方法を探しています。現在、データベースからXMLを引き出し、XMLを変数を介してXMLをストアドプロシージャに渡すことができるパッケージがありますが、これは一度に1つのレコードしか機能しません。 100,000のレコードを処理すると、これは非常に時間がかかる可能性があります。

SSIを使用して、複数のXML値を一度に細断したいと思います。これはSSISで可能ですか?おそらく、すべてのXML値がソースから選択され、何らかの種類のパーサーに渡されるデータフロータスクの何か?

役に立ちましたか?

解決

そのため、問題について多くの検索と考えを考えた後、私はシュレッディングをしたストアドプロシージャを再設計しました。変数をストアドプロシージャに渡す代わりに、XML列自体から細断しました。これにより、ループをループしてストアドプロシージャに渡すのではなく、一度に多くのXML値を一度に細断することができました。これにより、私が探していたパフォーマンスが向上しました。だからこのようなものの代わりに...

SET @xmlData = CAST(@xmlMessageData AS XML)

SELECT
   , row.value('xmlNode1[1]', 'BIT' )                   AS Column1  
   , row.value('xmlNode2[1]', 'NVARCHAR(255)')          AS Column2
   , row.value('xmlNode3[1]', 'BIT' )                   AS Column3
   , row.value('xmlNode4[1]/Name[1]', 'NVARCHAR(255)' ) AS Column4
FROM @xmlData.nodes('xmlRootNode') AS T1(row)

私は今これをします...

SELECT
   , row.value('xmlNode1[1]', 'BIT' )                   AS Column1  
   , row.value('xmlNode2[1]', 'NVARCHAR(255)')          AS Column2
   , row.value('xmlNode3[1]', 'BIT' )                   AS Column3
   , row.value('xmlNode4[1]/Name[1]', 'NVARCHAR(255)' ) AS Column4
FROM [ESBMessagesData] D
CROSS APPLY
    [DataItem].nodes('xmlRootNode') AS T1(row)
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top