
現在SQL Server2005を使用しております。
別のサーバー内でAccessのテーブルデータが定期的に更新されており、
このデータを利用したシステムをSQL Server上で作ろうと考えています。
手動でSQL ServerにAccessのテーブルデータをインポートするやり方は分かりましたが、(データ更新の為に)定期的にインポートする方法がわかりません。
どのように実現すればよいか、サンプルや参考になるHPがありましたら
是非教えていただけないでしょうか?
No.1ベストアンサー
- 回答日時:
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 …
OPENROWSET http://msdn.microsoft.com/ja-jp/library/ms190312 …
回答ありがとうございます。
>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は今回初めて使うので実現手段も調べてはみましたが結局はよくわからず途方にくれていたのですが、解決の道筋がみえそうです。
ありがとうございます。
他の手段も追って確認したいと思います。
No.2
- 回答日時:
#1です。
とりあえずリンクサーバが使えたのであれば、よかったです。
>しかしデータを読んでいるだけで保存はされていないので、後はテーブルを作ってコピーするSQL文を追加すればよいのでしょうか?
その通りです。データは入れ替えでよければ、テーブルを作っておいて、
TRUNCATE TABLE テーブル;
INSERT INTO テーブル SELECT * FROM ACC...テーブル;
を実行させればOKです。
Standardということなので、SQL Server Agentが使えます。
タスクを新規登録して、上記の2つのコマンドを打ち込み、スケジュールを指定すれば自動実行されます。
詳細はリンクなど、MSDNを参考にしてください。
サーバはSQL Server 2000だそうですが、通常の作業には全く問題ないです。ただ、タスクの登録までSSMSでできるかは試したことがないので、わかりません。
うまく登録できないようなら、サーバにログインしてEnterprise Managerを開き、そこで設定した方がいいかもしれませんね。
参考URL:http://msdn.microsoft.com/ja-jp/library/ms189237 …
方法(1)での確認完了しました。
また(3)を試したのですが、やはりServer側が2000という事もあり
jamshid6さんがおっしゃるとおりSSISは使えないようです。
(SSISは2005から追加された機能ですので当然といえば当然ですね。)
>サーバにログインしてEnterprise Managerを開き、
>そこで設定した方がいいかもしれませんね
こちらも仰るとおり、サーバー側で設定したら上手くいきました。
(2)の方法も後ほど試したいと思います。
いろいろと教えていただきありがとうございました。
一旦クローズさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Access VBA [リモートサーバー...
-
Select ~ into ~ で作成した...
-
実行時エラー3086 削除クエリ...
-
ACCESS2007 フォーム 「バリア...
-
ACCESSのODBCリンクテーブルに...
-
Accessでクエリを完了できませ...
-
Oracleデータベーストリガーの...
-
大きなテーブルに対する問い合...
-
accessでSQL実行時のテーブル名...
-
テーブル作成後なんですが、Pri...
-
ユニオンクエリで繋げられるテ...
-
SQL Serverのテーブルってどう...
-
VBAの実行時エラー'2522'について
-
結合テーブルクエリPrimaryKey...
-
「マスタ」と「テーブル」の違...
-
Accessにインポートしたら並び...
-
SQL Server のデータをCSVファ...
-
3つ以上のテーブルをUNIONする...
-
SI Object Browserのテーブルス...
-
ACCESS 一番最新の日付の金額...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ACCESS2007 フォーム 「バリア...
-
Access VBA [リモートサーバー...
-
Accessでクエリを完了できませ...
-
ACCESSのODBCリンクテーブルに...
-
大きなテーブルに対する問い合...
-
VBAの実行時エラー'2522'について
-
テーブル作成後なんですが、Pri...
-
accessでSQL実行時のテーブル名...
-
実行時エラー3086 削除クエリ...
-
Select ~ into ~ で作成した...
-
アクセスのワークシート変換に...
-
ユニオンクエリで繋げられるテ...
-
インデックスを調べる方法は?
-
AccessのテーブルをSQL Server...
-
PhpMyAdminで作成して実行せよ...
-
Access Update文の副問い合わせ
-
TRY CATCHでシステムエラーを検...
-
Access VBA 読み取り専用かチェ...
-
SQL Serverのテーブルってどう...
-
SSIS 変数の値をSQL実行タスク...
おすすめ情報