私は一日の大部分を私を助けるために何かを探し回っていますが、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
でこのケースがどのように処理されるかの例を手伝っていただければ、おそらくそこからそれを取ることができます。ありがとう!
次の例は、MSAccessからSQLServerへのデータ移行を実行するためのアイデアを提供する可能性があります。この例では、MS Access 2010
およびSQL Server 2008 R2
データベースを使用しています。パッケージはSSIS 2008 R2
で書かれました。以前に提供されたソリューションとは異なり、この回答ではSQLServerのインポートとエクスポートWizard)を使用せず、パッケージはゼロから構築されました。
ステップバイステップのプロセス:
Accessテーブルがスクリーンショット#1に示されているとおりであり、非正規化された方法で2つの行を含むCompanies
という名前のテーブルがあると仮定します。
また、SQL Serverのテーブル構造がスクリーンショット#2および#に示されているとおりであり、dbo.CompanyInfo
およびdbo.WidgetInfo
という名前の2つのテーブルがあると仮定します。テーブルの作成スクリプトは、SQLスクリプトセクションにあります。スクリーンショット#4に示すように、テーブルは空です。
新しいSSISパッケージを作成します。 SSISパッケージで、接続マネージャーを右クリックし、[新規] OLE DB接続(スクリーンショット#5に示す)]を選択します。[構成] OLE DB接続マネージャー。スクリーンショット#6に示すように、[新規...]ボタンをクリックします。
接続マネージャーで、Native OLE DB/Microsoft Jet 4.0 OLE DB Provider
を選択し、アクセスファイルのパスを指定します。この例では、ファイルはC:\temp\Source.mdb
にあります。 [OK]をクリックします。スクリーンショット#7を参照してください。 [構成] OLE DB接続マネージャーで、スクリーンショット#8に示すように[OK]をクリックします。接続マネージャー名をAccessDBに変更します(名前は任意の名前にすることができます) 。スクリーンショット#9を参照してください。
ここでも、接続マネージャーを右クリックして、[新規] OLE DB接続(スクリーンショット#1)を参照)を選択します。今回は、SQLの接続文字列を作成します。サーバー。[ネイティブ] OLE DB\SQL Serverネイティブクライアント10.0を選択し、スクリーンショット#11に示すようにサーバー名とデータベース名を入力します。接続マネージャーの名前をSQLServerに変更します(繰り返しますが、名前はあなたの選択です)スクリーンショット#12を参照してください。
SSISパッケージの[制御フロー]タブで、データフロータスクを配置し、Populate CompanyInfo
という名前を付けます。データフロータスクをダブルクリックして、[データフロー]タブに切り替えます。スクリーンショット#1に示すように、データフロータスク内にOLE DB Source
、Derived Transformation
、およびOLE DB Destination
を配置します。 NOTE:
タスクを表示されている順序で1つずつ構成する必要があります。すべてのタスクを同時に配置して接続しようとしないでください。
スクリーンショット#14および#15に示すように、Accessデータベーステーブルを読み取るようにOLE DBソースを構成します。変換するように派生変換を構成します。スクリーンショット#16に示すAccessデータベースからUnicodeへの文字列テキスト。スクリーンショット#-に示すように、SQLテーブルにデータを挿入するようにOLE DBDestinationを構成します。 17および#18。
スクリーンショット#19に示すように、[制御フロー]タブに戻り、別のデータフロータスクを配置します。
2番目のデータフロータスクでは、Accessデータベースの同じCompaniesテーブルを読み取り、SQLでWidgetInfoテーブルにデータを入力しようとします。
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に示すようになります。
スクリーンショット#29-#1サンプルパッケージの実行を示します。
スクリーンショット#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:
スクリーンショット#2:
スクリーンショット#3:
スクリーンショット#4:
スクリーンショット#5:
スクリーンショット#6:
スクリーンショット#7:
スクリーンショット#8:
スクリーンショット#9:
スクリーンショット#10:
スクリーンショット#11:
スクリーンショット#12:
スクリーンショット#13:
スクリーンショット#14:
スクリーンショット#15:
スクリーンショット#16:
スクリーンショット#17:
スクリーンショット#18:
スクリーンショット#19:
スクリーンショット#20:
スクリーンショット#21:
スクリーンショット#22:
スクリーンショット#23:
スクリーンショット#24:
スクリーンショット#25:
スクリーンショット#26:
スクリーンショット#27:
スクリーンショット#28:
スクリーンショット#29:
スクリーンショット#30:
スクリーンショット#31:
スクリーンショット#32:
これは役立つかもしれません:
ソースおよび宛先データベースへのconnection2が必要です。あなたはすでにあなたの情報源を持っているようです。
[制御フロー]タブにデータフロータスクが必要です。これらのいずれかをドラッグしてダブルクリックすると、[データフロー]タブが表示されます。
ここで「データソース」を追加し(これはあなたが行ったように聞こえます)、「OLEDB宛先」も追加します。
ソースをダブルクリックします。接続を指定できる必要があります(これも、接続を行ったように見えます)。
「データアクセスモード」は、データを取得する方法を指定します。つまりテーブルから直接、またはデータを返すクエリを作成します
宛先への直線的な1対1のマッピングである場合は、2つを緑色の線で接続できるはずです(精度の制約)。
変換を実行する場合は、ソースのクエリで実行するか、変換オブジェクトの1つをソースと宛先の間に配置して、それらを適切に接続します。