今日、クライアントが次のように尋ねる新しい状況があります。
フォルダーに XML ファイルがあります。これらのファイルを SQL Server テーブル列 (XML データ型) にロードする必要があります。XML 出力をさまざまな SQL Server テーブルにロードするのではなく、XML ファイル自体を SQL Server データベースの XML データ型を持つ列にロードします。
これは、クライアントの要件に従って、SSISでのみ行う必要があります。したがって、この方法で Execute SQL Task を使用します。(XML ファイルとは別に、、、などが必要ですImportDate
。FileName
)
接続の種類は OLE DB です。私が持っているSQLステートメントは次のとおりです。
INSERT INTO dbo.tablename (IncomingXMLfile, ImportDate)
-- I am using just 2 columns as an example for this table--
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'C:\Mic\...........\API_Schemas\ABC.xml', SINGLE_BLOB) AS x;
これは、ファイルを 1 つだけハードコードする場合にうまく機能します。さて、C:\Mic\...\API_Schemas
フォルダーには多くの XML ファイルがあり、それぞれをロードする必要があります。それとは別に、それらのファイル ( ImportDate
. GETDATE()
INSERT ステートメント)。ForEachLoop コンテナーを使用し、SQL 実行タスクをこのコンテナー内に配置する必要があります。
したがって、この問題には 2 つの側面があります。
SQL 実行タスク内でファイル名をパラメータ化します。
ForEachLoop コンテナーを使用して (およびこの SQL 実行タスクを内部に配置して)、フォルダー内の各 XML ファイルを実行します。
Filename
(string datatype)という名前のユーザー変数を使用します。この値ABC.xml
には (フォルダー内の一連の XML ファイルの最初のファイル); 上記の TSQL クエリを次のようにパラメーター化します (以下を参照)。
INSERT INTO dbo.tablename (IncomingXMLfile, ImportDate)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'C:\Mic\...........\API_Schemas\?', SINGLE_BLOB) AS x;
このパラメーター ( ) を、この Execute SQL Task (タブ)?
のユーザー変数 Filenameにマップします。ParameterMapping
クエリは SQL 実行タスクで正しく解析されました! ただし、この SQL タスクを実行すると、次のエラーが発生します。
「パラメータ名が認識されません。」. 考えられる失敗の理由: クエリの問題、「ResultSet」プロパティが正しく設定されていない、パラメーターが正しく設定されていない、または接続が正しく確立されていない。
この状況は、XML ファイルから (データ アクセス モード (変数からの XML データ) などを使用して XML ソース エディターを使用して) SQL Server テーブルにデータを読み込む場合とはかなり異なります。この場合、XML ファイル自体を XML データ型を持つ SQL Server テーブル COLUMN にロードし、フォルダーからロードされたさまざまな XML ファイルに関する情報を取得します。その結果、変数を使用してこのパッケージを実行する方法がわかりません。
ファイル名を正しくパラメータ化する方法について、まず誰かが私を助けることができますか?
後で、フォルダーから各ファイルを読み取るように ForEachLoop コンテナーを構成する方法を教えてください。
このシナリオでユーザー変数を使用する方法について混乱しています。