web-dev-qa-db-ja.com

SSISパッケージを使用してMSAccessデータをSQLServerにインポートするにはどうすればよいですか?

私は一日の大部分を私を助けるために何かを探し回っていますが、SSISは非常に巨大なツールなので、これまでのところ何も役に立たないか、おそらく私はそれを理解していません。

いくつかの問題がある古いAccessデータベースを取得してSQLサーバーに移動する必要があります。私はすでにSQLデータベースにスキーマを設定しています。正規化や重複の削除など、古いデータを修正する必要があります。私の上司は、この仕事にSSISを使用することを主張しています。なぜなら、ここには使用方法を知っている誰かが必要であり、現在ほとんど誰も使用していないからです(1人のマネージャーがずっと前に使用していました)。

ですから、私はBDIS、ビジュアルスタジオ、またはこのアプリが実際に何であれ、プロジェクトをセットアップしています。 Accessデータベースへの接続マネージャーを作成し、OLE DBソースをデザイナーにドラッグして、そのデータベースに接続するように設定しました。データを選択できることもわかりました。そこから。

それで?巨大なSQLスクリプトを記述して、Accessデータベースから必要なすべてのデータを取得し、必要に応じて変換して、SQLサーバーデータベースに格納する方法が本当に必要です。しかし、デザイナーでこれらすべてのファンキーな変換ツールを使用する必要があるようです。また、結果のデータをSQLサーバーに取り込む方法もわかりません。サーバーエクスプローラーペインで接続を設定しましたが、オンラインの誰もがSQLServerの宛先を使用しないと言っています。だから私もそこで迷子になっています。

上司は、BooksOnlineのヘルプファイルが非常に役立つと述べました。これまでのところ、沼の下に沈んでいる干し草の山から針を見つけ、その上に3つの城が座っているようなものでした。情報が多すぎて、どれも役に立たないようです。

編集

うまくいけば、もう少し情報が役立つでしょう。 SSISに付属しているウィザードは、私が望むものに対して十分に強力ではないと思うので、もしそうなら、それを説明する必要があります。これが私がしなければならないことの例ですが、私の現実はより多くの変換を伴うより多くのテーブルです。

次のようなソーステーブルがあるとします。

Companies
====================================================
| Name    | Address    | WidgetOne   | WidgetTwo   |
|--------------------------------------------------|
| ACME    | 123 etc.   | Trampoline  | Cannon      |
====================================================

これを2つのテーブルに正規化する必要があります。また、ウィジェットが正しい会社に関連付けられるように、明らかにIDを追跡する必要があります。 AccessからSQLサーバーへのSSISでこのケースがどのように処理されるかの例を手伝っていただければ、おそらくそこからそれを取ることができます。ありがとう!

11
Tesserex

次の例は、MSAccessからSQLServerへのデータ移行を実行するためのアイデアを提供する可能性があります。この例では、MS Access 2010およびSQL Server 2008 R2データベースを使用しています。パッケージはSSIS 2008 R2で書かれました。以前に提供されたソリューションとは異なり、この回答ではSQLServerのインポートとエクスポートWizard)を使用せず、パッケージはゼロから構築されました。

ステップバイステップのプロセス:

  1. Accessテーブルがスクリーンショット#1に示されているとおりであり、非正規化された方法で2つの行を含むCompaniesという名前のテーブルがあると仮定します。

  2. また、SQL Serverのテーブル構造がスクリーンショット#2および#に示されているとおりであり、dbo.CompanyInfoおよびdbo.WidgetInfoという名前の2つのテーブルがあると仮定します。テーブルの作成スクリプトは、SQLスクリプトセクションにあります。スクリーンショット#4に示すように、テーブルは空です。

  3. 新しいSSISパッケージを作成します。 SSISパッケージで、接続マネージャーを右クリックし、[新規] OLE DB接続(スクリーンショット#5に示す)]を選択します。[構成] OLE DB接続マネージャー。スクリーンショット#6に示すように、[新規...]ボタンをクリックします。

  4. 接続マネージャーで、Native OLE DB/Microsoft Jet 4.0 OLE DB Providerを選択し、アクセスファイルのパスを指定します。この例では、ファイルはC:\temp\Source.mdbにあります。 [OK]をクリックします。スクリーンショット#7を参照してください。 [構成] OLE DB接続マネージャーで、スクリーンショット#8に示すように[OK]をクリックします。接続マネージャー名をAccessDBに変更します(名前は任意の名前にすることができます) 。スクリーンショット#9を参照してください。

  5. ここでも、接続マネージャーを右クリックして、[新規] OLE DB接続(スクリーンショット#1)を参照)を選択します。今回は、SQLの接続文字列を作成します。サーバー。[ネイティブ] OLE DB\SQL Serverネイティブクライアント10.0を選択し、スクリーンショット#11に示すようにサーバー名とデータベース名を入力します。接続マネージャーの名前をSQLServerに変更します(繰り返しますが、名前はあなたの選択です)スクリーンショット#12を参照してください。

  6. SSISパッケージの[制御フロー]タブで、データフロータスクを配置し、Populate CompanyInfoという名前を付けます。データフロータスクをダブルクリックして、[データフロー]タブに切り替えます。スクリーンショット#1に示すように、データフロータスク内にOLE DB SourceDerived Transformation、およびOLE DB Destinationを配置します。 NOTE:タスクを表示されている順序で1つずつ構成する必要があります。すべてのタスクを同時に配置して接続しようとしないでください。

  7. スクリーンショット#14および#15に示すように、Accessデータベーステーブルを読み取るようにOLE DBソースを構成します。変換するように派生変換を構成します。スクリーンショット#16に示すAccessデータベースからUnicodeへの文字列テキスト。スクリーンショット#-に示すように、SQLテーブルにデータを挿入するようにOLE DBDestinationを構成します。 17および#18

  8. スクリーンショット#19に示すように、[制御フロー]タブに戻り、別のデータフロータスクを配置します。

  9. 2番目のデータフロータスクでは、Accessデータベースの同じCompaniesテーブルを読み取り、SQLでWidgetInfoテーブルにデータを入力しようとします。

  10. OLE DB Sourceを配置してAccessテーブルを読み取り、スクリーンショット#2および#21でhownとして構成します。スクリーンショット#22に示すように、Derived transformationを配置して、文字列をUnicodeに変換します。 Lookup transformationを配置して、名前とアドレスに基づいてCompanyIdをフェッチし、スクリーンショット#2および#24に示すようにタスクを構成します。一致するものが見つからない場合、デフォルトでルックアップタスクは失敗します。ウィジェットデータを正規化する必要があります。したがって、Unpivot transformationを配置し、スクリーンショット#25に示すように構成します。 OLE DB Destinationを配置してデータをSQLに挿入し、スクリーンショット#26および#27に示すように構成します。 2番目のデータフロータスクは、スクリーンショット#28に示すようになります。

  11. スクリーンショット#29-#1サンプルパッケージの実行を示します。

  12. スクリーンショット#2は、パッケージ実行後のSQLテーブルのデータを示しています。

これにより、AccessデータベースからSQLサーバーにデータをエクスポートするアイデアが得られることを願っています。 Accessでテーブルをグループ化し、単一のデータフロータスク内でそれらをロードできます。他のテーブルに依存するテーブルがある場合は、この例に示すように、を個別のデータフロータスクに配置できます。

お役に立てば幸いです。

SQLスクリプト:

CREATE TABLE [dbo].[CompanyInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [CompanyName] [nvarchar](80) NOT NULL,
    [CompanyAddress] [nvarchar](255) NOT NULL,
CONSTRAINT [PK_CompanyInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

CREATE TABLE [dbo].[WidgetInfo](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [CompanyId] [int] NOT NULL,
    [WidgetName] [nvarchar](40) NOT NULL,
CONSTRAINT [PK_WidgetInfo] PRIMARY KEY CLUSTERED ([Id] ASC)) ON [PRIMARY]
GO

スクリーンショット#1:

1

スクリーンショット#2:

2

スクリーンショット#3:

3

スクリーンショット#4:

4

スクリーンショット#5:

5

スクリーンショット#6:

6

スクリーンショット#7:

7

スクリーンショット#8:

8

スクリーンショット#9:

9

スクリーンショット#10:

10

スクリーンショット#11:

11

スクリーンショット#12:

12

スクリーンショット#13:

13

スクリーンショット#14:

14

スクリーンショット#15:

15

スクリーンショット#16:

16

スクリーンショット#17:

17

スクリーンショット#18:

18

スクリーンショット#19:

19

スクリーンショット#20:

20

スクリーンショット#21:

21

スクリーンショット#22:

22

スクリーンショット#23:

23

スクリーンショット#24:

24

スクリーンショット#25:

25

スクリーンショット#26:

26

スクリーンショット#27:

27

スクリーンショット#28:

28

スクリーンショット#29:

29

スクリーンショット#30:

30

スクリーンショット#31:

31

スクリーンショット#32:

32

34
user756519

これは役立つかもしれません:

  1. ソースおよび宛先データベースへのconnection2が必要です。あなたはすでにあなたの情報源を持っているようです。

  2. [制御フロー]タブにデータフロータスクが必要です。これらのいずれかをドラッグしてダブルクリックすると、[データフロー]タブが表示されます。

  3. ここで「データソース」を追加し(これはあなたが行ったように聞こえます)、「OLEDB宛先」も追加します。

  4. ソースをダブルクリックします。接続を指定できる必要があります(これも、接続を行ったように見えます)。

  5. 「データアクセスモード」は、データを取得する方法を指定します。つまりテーブルから直接、またはデータを返すクエリを作成します

  6. 宛先への直線的な1対1のマッピングである場合は、2つを緑色の線で接続できるはずです(精度の制約)。

変換を実行する場合は、ソースのクエリで実行するか、変換オブジェクトの1つをソースと宛先の間に配置して、それらを適切に接続します。

1
James Wiseman