1

DB からデータを抽出し、それを毎週 Excel ファイルに書き込む SSIS パッケージを作成しています。データがオフロードされるたびに、Excel ファイルを最初から再生成する必要があります。データ フロー タスクで Excel の宛先を使用すると、既存のファイルを上書きできないことがわかったので、次のことを試しました。

  1. データ オフロードの前に Execute SQL タスクを追加して、次の SQL を使用してファイル内の既存のシートを再作成します。

    DROP TABLE Users$

    GO

    CREATE TABLE Users$ ( Ref NVARCHAR(10), Username NVARCHAR(20), Active INT, Absent INT, Allow Reconciliation NVARCHAR(4), Prefix NVARCHAR(10), First Name NVARCHAR(25), Middle Name NVARCHAR(25), Last Name NVARCHAR(40), Suffix INT, Email NVARCHAR(33), Work Phone NVARCHAR(10), Required Approvals NVARCHAR(1), Division/Section Ref NVARCHAR(15), Grade Ref NVARCHAR(9), Cost Centre Ref NVARCHAR(15), Location Ref NVARCHAR(5), Last Hire Date NVARCHAR(10), Original Hire Date INT, Manager Ref INT, Approver Ref NVARCHAR(6), Gender NVARCHAR(6), Ethnicity NVARCHAR(25), Language NVARCHAR(5), Expiry Date NVARCHAR(10), Staff Category NVARCHAR(50), Source of Funding NVARCHAR(4), BAC Number INT, Title NVARCHAR(50) )

    GO

  2. 列ヘッダーのみを含む空のファイル テンプレートを保持して、列マッピングが保持されていることを確認し、データ フロー タスクの前にスクリプト タスクを使用して既存の出力ファイルを置き換えます。

どちらの場合も、パッケージは正常に実行され、ログにレコードが Excel ファイルに書き込まれたと表示されますが、ファイルを開くと、ヘッダー行のみが表示され、データは表示されません。私の印象では、ファイルが置き換えられたり、シートが再作成されたりすると、列のマッピングが台無しになります。どうすればよいかわかりません。

編集:データフロータスクを単独で実行すると、レコードが書き込まれることに注意する必要があります。アドバイスしてくださいありがとう

4

1 に答える 1

0

完全にテストされていない1つの可能な解決策ですが、動作するはずです:

  1. スクリプト タスクを使用して、一意の値を変数に書き込みます。GUID または日付/時刻ベースの文字列をお勧めします。
  2. 最初にデータ フロー タスクを実行し、別の列に GUID と共にデータを挿入します。
  3. データ フローの後に Excel ファイルに対してスクリプト タスクを実行し、guid 列が変数の値と等しくない行を削除します。

これに関する唯一の問題は、GUID が Excel ファイルに残ることです。

それが役立つことを願っています。

于 2013-03-26T19:32:55.213 に答える