- ベストアンサー
AccessのテーブルをSQL Serverに自動インポートする方法について
現在SQL Server2005を使用しております。 別のサーバー内でAccessのテーブルデータが定期的に更新されており、 このデータを利用したシステムをSQL Server上で作ろうと考えています。 手動でSQL ServerにAccessのテーブルデータをインポートするやり方は分かりましたが、(データ更新の為に)定期的にインポートする方法がわかりません。 どのように実現すればよいか、サンプルや参考になるHPがありましたら 是非教えていただけないでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
SQL Serverのエディションと、Accessのバージョンを書いた方がよいです。 (Access2003までを想定して書きます) 1) リンクサーバを設定する ・サーバオブジェクト→リンクサーバで作成 ・リンクサーバ名は任意(例えばACC)、「Microsoft jet 4.0 OLE DB Provider」を選択し、製品名に「Microsoft Access」、あとはMDBをフルパス指定するだけでよい。 ・SQL Server側では「SELECT * FROM ACC...テーブル名」の形式でクエリを実行できる。 (条件)32ビットマシンであること 2) OPENROWSETを使う ・以下のようなクエリを実行する SELECT a.* FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0','MDBのフルパス';;,テーブル名) AS a ・あとはリンクサーバと同じ (条件)32ビットマシンであること。アドホッククエリの実行を許可しておくこと 3) SSISを使う ・SQL Server Integration Serviceで取り込み処理をパッケージとして作成する (条件)Standard Edition以上であること いずれの方法もジョブをSQL Server Agentに登録することで定期実行できます。 1)2)の場合は、TRUNCATE TABLE文とINSERT SELECT文、3)の場合はパッケージの実行を登録することになります。 Expressであれば、sqlcmdを使ったバッチを書いてそれをWindowタスクで実行します。 外部データのアクセス:http://msdn.microsoft.com/ja-jp/library/ms188313(SQL.90).aspx OPENROWSET http://msdn.microsoft.com/ja-jp/library/ms190312(SQL.90).aspx
その他の回答 (1)
- jamshid6
- ベストアンサー率88% (591/669)
#1です。 とりあえずリンクサーバが使えたのであれば、よかったです。 >しかしデータを読んでいるだけで保存はされていないので、後はテーブルを作ってコピーするSQL文を追加すればよいのでしょうか? その通りです。データは入れ替えでよければ、テーブルを作っておいて、 TRUNCATE TABLE テーブル; INSERT INTO テーブル SELECT * FROM ACC...テーブル; を実行させればOKです。 Standardということなので、SQL Server Agentが使えます。 タスクを新規登録して、上記の2つのコマンドを打ち込み、スケジュールを指定すれば自動実行されます。 詳細はリンクなど、MSDNを参考にしてください。 サーバはSQL Server 2000だそうですが、通常の作業には全く問題ないです。ただ、タスクの登録までSSMSでできるかは試したことがないので、わかりません。 うまく登録できないようなら、サーバにログインしてEnterprise Managerを開き、そこで設定した方がいいかもしれませんね。
お礼
方法(1)での確認完了しました。 また(3)を試したのですが、やはりServer側が2000という事もあり jamshid6さんがおっしゃるとおりSSISは使えないようです。 (SSISは2005から追加された機能ですので当然といえば当然ですね。) >サーバにログインしてEnterprise Managerを開き、 >そこで設定した方がいいかもしれませんね こちらも仰るとおり、サーバー側で設定したら上手くいきました。 (2)の方法も後ほど試したいと思います。 いろいろと教えていただきありがとうございました。 一旦クローズさせていただきます。
お礼
回答ありがとうございます。 >SQL Serverのエディションと、Accessのバージョンを書いた方がよいです。 申し訳ありませんでした。 SQL Server 2000 StandardがWin2003 Serverに入っているのですが、自分のPC(WinXP)に入っているSQL Server2005 StandardのManagement Studioで2000側を操作している状況です。 2000と2005とVersionが違うので正しい使い方か分かりませんが…。 Accessは2003になります。 1),2),3)の手段、全てで試してみたいのですが取り合えず1)でできそうです。 >「SELECT * FROM ACC...テーブル名」 で実行したところデータがとれました。 しかしデータを読んでいるだけで保存はされていないので、後はテーブルを作ってコピーするSQL文を追加すればよいのでしょうか? (見当違いでしたらすいません) SQL Serverは今回初めて使うので実現手段も調べてはみましたが結局はよくわからず途方にくれていたのですが、解決の道筋がみえそうです。 ありがとうございます。 他の手段も追って確認したいと思います。