2016-08-31 3 views
2

出力を生成するプロシージャ(SQL Server)がほとんどなく、ヘッダ付きのテキストファイルに手動で保存します。複数のプロシージャを使用して出力テキストファイルを作成する汎用のssisパッケージ

procedure_name、output_filenameを入力とし、出力ファイルを生成する一般的なSSISパッケージが必要です。

異なる手順で異なる列が生成されるため、メタデータを動的に処理する必要があります。

例:PROC1結果、以下の生成

COL1 | COL2

|

PROC2結果以下産生B:

COL1 | COL2 | COL3

1 | 2 | a

解決策の1つは、すべての手順を変更することでしたresを使用して1行の出力を生成するため、SSISはそれを1つの列として扱い、出力ファイルを生成します。 例:

'COL1 | COL2 |コール' AS rowdata

'1 | 2 |' AS rowdata

しかし、かなりの数の手順と、すべての手順を変更すると、多くの時間がかかりますがあります人間の間違いで終わる可能性があります。

SSISでメタデータを動的に処理して出力ファイルを作成できる方法があるかどうかを知りたいと思います。

答えて

1

メタデータを使用してパッケージを動的にビルドして実行するBiMLを調べることができます。

+0

私のためにBiMLのドアを開けていただきありがとうございます。私はそれを全く知らなかった。いくつかのスクリプトを試してBiMLの仕組みを理解するのにはしばらく時間がかかるので、私の質問に答える直接リンク/スクリプトはありますか?やや似たようなスクリプトもあります。 – Ash

+0

いいえ、残念ながら私はあなたの問題を直接解決するショートカットを持っていません。ちょうどBiMLは解決策につながる可能性があります。 –

0

従来のSSISパッケージでは、すべての出力が設計時に定義され、実行時に検証されることはほとんどありません。番号を変更すると、検証エラーが発生し、パッケージの実行が停止します。
SQL実行タスクとスクリプトコンポーネントでトリックをプレイできます。 Exec SQLはSPを実行し、SP結果をObject変数に格納された 'Full Result Set'として返します。スクリプトタスクでは、実際にはADOレコードセットであるこの変数を開きます。 System.Data.OleDb.OleDbDataAdapterで読み取ることができます。たとえば、

// Set up the DataAdapter to extract the data, 
// and the DataTable object to capture those results 
OleDbDataAdapter da = OleDbDataAdapter(); 
DataTable dt = DataTable(); 
// Extract the data from the object variable into the table 
da.Fill(dt, Variables.vResults); 

DataSetを使用して作業し、後で使用するために単一の変数に変換することができます。または、C#スクリプトで直接ファイルを作成して保存します。

+0

私はC#の初心者です。 1000万を超えるレコードがあり、そのようなデータ量でスクリプトがどのように動作するかは不明です。また、このデータをすべて1つの変数に格納するのは恐ろしいことです。 – Ash

+1

@Ash、Object変数に10Mレコード、後でC#スクリプトで構文解析するのは問題ありません。 問題はあなたの目標とSSISをツールとすることです。 SPを実行し、その結果をほとんど変換なしでファイルに保存する汎用SPプロセッサーを望むなら、純粋なC#はよりシンプルになります。 SQLからSQLCMDまたはBCPユーティリティを試すことができます。 固定レイアウトデータを変換する必要がある場合は、SSISが輝きます。ビジュアルツールで大部分のデータ変換を設計することができます。あなたの仕事ははるかに簡単で一般的です - SSISの利点は負担になります。 – Ferdipux

+0

返信いただきありがとうございますFerdipux。 – Ash

関連する問題