内部データセットを含む SQL2005 CLR ストアド プロシージャを作成することで、これを簡単に行うことができました。
ご覧のとおり、新しい SqlDataAdapter は、デフォルトで、複数の結果セットの sproc を複数のテーブルのデータセットに入力します。これらのテーブルのデータは、書き込みたい呼び出し側 sproc の #Temp テーブルに挿入できます。 dataset.ReadXmlSchemaは、各結果セットのスキーマを表示します。
ステップ 1: 複数結果セット sproc からデータを読み取る sproc の作成を開始する
を。スキーマに従って、結果セットごとに個別のテーブルを作成します。
CREATE PROCEDURE [dbo].[usp_SF_Read] AS
SET NOCOUNT ON;
CREATE TABLE #Table01 (Document_ID VARCHAR(100)
, Document_status_definition_uid INT
, Document_status_Code VARCHAR(100)
, Attachment_count INT
, PRIMARY KEY (Document_ID));
b. この時点で、ここで作成する CLR sproc を繰り返し呼び出すために、カーソルを宣言する必要がある場合があります。
ステップ 2: CLR Sproc を作成する
Partial Public Class StoredProcedures
<Microsoft.SqlServer.Server.SqlProcedure()> _
Public Shared Sub usp_SF_ReadSFIntoTables()
End Sub
End Class
を。を使って接続しNew SqlConnection("context connection=true")
ます。
b. コマンド オブジェクト (cmd) を設定して、複数結果セット sproc を含めます。
c. 以下を使用してすべてのデータを取得します。
Dim dataset As DataSet = New DataSet
With New SqlDataAdapter(cmd)
.Fill(dataset) ' get all the data.
End With
'you can use dataset.ReadXmlSchema at this point...
d. 各テーブルを繰り返し処理し、すべての行を適切な一時テーブル (上記の手順 1 で作成した) に挿入します。
最後の注意:
私の経験では、各レコードがどのバッチから来たのかを知るために、テーブル間にいくつかの関係を強制したい場合があります。
それだけです!
~ ショーン、シアトル近郊