見守り電球またはGPS端末が特価中!

SQL Server初心者です。
下記のことが可能かどうか教えてください。

現在、社内ASP Webシステムが10個くらいあります。
バックエンドデータベースとしてAccessを使用していますが、ファイルサイズが数十メガになってしまったものもあり、これらをすべてSQL Serverに移行しようと考えています。

Accessでは、複数のデータベースで共有したいテーブルがある場合、リンクテーブルとして共有できるため、これらのWebシステムでも社員情報テーブルをすべてリンクテーブルで共有しておりました。

SQL Serverに移行した場合、Accessのようにテーブルを共有することはできるのでしょうか?

ご教授のほどよろしくお願いします。

バージョン: SQL Server 2000

このQ&Aに関連する最新のQ&A

A 回答 (2件)

可能ですが、SQL Serverのたて方次第で方法は変わります。


・1台のサーバにSQL Serverを1つだけインストールし、その中に全部のデータベースを作成する
・1台もしくは複数台のサーバにSQL Serverを複数インストールし、それぞれの中にデータベースを作成する

どちらの方法で移行するかはシステム要件次第&サーバの台数次第です。
1つのSQL Server内に全部のデータベースを作成すると管理は容易ですが、1つのSQL Serverにサービスはデータベースエンジンとしては1つなので、負荷も集中しますし、SQL Serverのサービスがダウンしたときには、すべてのシステムが利用不能になります。

それを避けなければならないニーズがあるときに複数のSQL Serverをインストールしてそれぞれで管理します。
サーバ1台に複数のSQL Serverをインストールすることもできますが、管理負担は増えますし、CPU・メモリはそれだけ余計に食います。

前者であれば話は簡単です。
サーバAにSQL Serverをインストールして、例えば「社員」データベースと「売上管理」データベースを作成したとすると、
「社員」データベースのアクセス権限さえ与えてやれば、「売上管理」データベースに対してSQLを投げるときに
SELECT * FROM 社員.dbo.社員マスタ
という形で参照できます。

後者の場合は、リンクサーバというものを設定します。
サーバAに「社員」データベース、サーバBに「売上管理」データベースがあるときに、サーバBに「サーバA」という名前でリンクサーバを設定しておけば、
SELECT * FROM [サーバA].社員.dbo.社員マスタ
という形で参照できます。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
弊社で準備できるサーバーは1台なので、前者になります。
お教えいただいた方法を試してみたところ、希望するデータを他のデータベースより取得することができました。
ありがとうございました。

お礼日時:2009/08/11 17:48

SQL Serverには、リンクサーバという機能があります。


おそらく、望んでおられる機能が実現できると思いますので、
調べてみてください。
    • good
    • 0
この回答へのお礼

早速のご回答ありがとうございます。
今回は複数のサーバーを使用しませんが、将来複数に分けて使用するようになった場合に、リンクサーバの機能を用いたいと思います。
ありがとうございました。

お礼日時:2009/08/11 17:49

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q他のデータベースとのテーブル結合

いつもお世話になっております。
VB.netでwindowsアプリケーションの作成しているところです。
SQLサーバーのテーブルを参照していますが、テーブルの結合は同じデータベース内にないと結合できないのでしょうか?

'SQL接続処理
Dim strConn As String = "Password='';User ID=sa;Initial Catalog=test;Data Source=server1"

と、testというデータベースがありその中に幾つかテーブルがあります。
このtestデータベースにないテーブルが必要になり、aaaデータベース内の
テーブルを結合しようとしたのですが、出来ません。
Catalog=test,aaaとやってみたり、SELECT * FROM tbl1,aaa.tbl2などとしてみましたが、遠いようです。
SQLのクエリを使って、テーブルの追加をすると同じデータベース内のテーブルしか出てこないので、出来ないのかなと思っていますがどうでしょうか?

わかる方がいましたら教えてください。

いつもお世話になっております。
VB.netでwindowsアプリケーションの作成しているところです。
SQLサーバーのテーブルを参照していますが、テーブルの結合は同じデータベース内にないと結合できないのでしょうか?

'SQL接続処理
Dim strConn As String = "Password='';User ID=sa;Initial Catalog=test;Data Source=server1"

と、testというデータベースがありその中に幾つかテーブルがあります。
このtestデータベースにないテーブルが必要になり、aaaデータベース内の
テーブルを結合しよう...続きを読む

Aベストアンサー

select * from tbl1,[aaa].[dbo].[tbl2]
のように、[データベース名].[オーナー].[テーブル名]の様式で指定すれば、良いかと思います。
(当然、権限の問題がない前提ですが・・)

QACCESSに同時アクセス(編集)をしたい

教えてください。
ACCESSのDBに複数のユーザが同時にアクセスして、
データを追加・編集したいのですが、
やはり、不可能でしょうか?

Aベストアンサー

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」

というのがありますから、最初に作ったdb1をたどり、リンクしたいテーブルを
選択します。

こうすることにより、db2にdb1のテーブルがリンクされ(リンクテーブルと
呼ばれます。アイコンが通常のテーブルと違います。)、db1に格納された
データをdb2で編集することができます。

db2で、db1からのリンクテーブルを元にクエリーを作成することもできます。
リンクテーブルに対してできないことはテーブル構造の変更くらいで
他のことはだいたいできると思っていいかと思います。

このような形をとれば、ローカルエリアネットワーク内の複数のコンピュータ
から同時に同じアクセスデータベースにアクセスすることは可能かと思います。

このやり方にはおそらく問題もあるだろうと思うのですが、昔私がやって
いた頃は、特段支障もなく業務を行なうことができました。問題は、これを
読んだ他の誰かが指摘してくださるかと思います。

同じレコードに複数ユーザが同じタイミングでアクセスするとややこしい
ことになります。これを回避するためには、db2にワークテーブルを備えておき、
リンクテーブルからレコードを一度db2に格納し、編集を終了したのちに
リンクテーブルのレコードを削除し、ワークテーブルで編集したレコードを
リンクテーブルに追加する、などのルーティンをマクロやVBAで構築するのが
よいかと思います。私はそのようにしていました。

他に、ADOを使う方法などもあります。方法はいくつかありますから、
少し研究してみるといいですよ。(^-^)

マイクロソフトのアクセスに同時に複数のユーザが同時にアクセスして
データベースを操作することは可能です。いくつかの方法がありますが、
昔私が簡便に行なっていた方法は「テーブルのリンク」です。

あるコンピュータにアクセスでdb1という名前のデータベースを作って
ここにデータを格納しておきます。

他方で別のコンピュータに、アクセスでdb2という名前のデータベースを作ります。

このdb2というデータベースのメニューで

「ファイル」->「外部データの取り込み」->「テーブルのリンク」
...続きを読む

QSQLServer2005上の別DBからテーブルを読みたい

SQLServer2005で2つの異なるデータベース(ADB、BDB)が存在します。
ADBでBDBにあるテーブルを取得して検索をかけたいのですが、どのようにすれば実現できるのでしょうか。
BDBのVIEWを作成するイメージなんですが、リンクテーブルを設定するとかが必要になるのですか。
もしそうだとしたら、どうリンクテーブルを設定するのか教えてください。

Aベストアンサー

その2つのデータベースは同じインスタンスにいますか?
同じインスタンスにいるなら、
SELECT * FROM BDB.dbo.テーブル名
などで検索できます。

インスタンス自体が別ならリンクサーバを設定します。
サーバのリンク
http://msdn.microsoft.com/ja-jp/library/ms188279(SQL.90).aspx

もしくはアドホックリモートクエリを使う方法もあります。
ただし、OPENROWSETを使う場合は「SQL Server のセキュリティ構成」で利用を許可しないといけませんのでご留意ください。

Q別のDBからテーブルをコピーする方法

SQL Server2005 Express Edition を使っています。
異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの
ですが・・・
コピー元DB名:DB_A
コピー元テーブル名:dbo.顧客
コピー先DB名:DB_B

テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。
お教えいただければ幸いです。
よろしくお願いいたします。

Aベストアンサー

別のDBでも同じインスタンス内ならば同じです。

SELECT * INTO DB_B.dbo.顧客 FROM DB_A.dbo.顧客

QAccessとSQL Serverの連携について

現在Accessで組まれているデータベースがあるのですが、複数人で入力をする必要が出てきたため、SQL Serverへ移行したいと思っています。
ただ、まだデータベースの内容が完全にFIXしておらず、項目に変更や追加が発生する可能性があります。

そこで、
●Accessを管理画面として使い、
●Access上で内容を変更したら、システム全体もその通り変わる
ような仕組みを作りたいのですが、可能でしょうか。
(完全にSQL Serverへ移行するのではなく、AccessとSQL Serverを連携させる?)

よき方法がありましたら教えて頂けましたら幸いです。
ちなみにコストはあまり大きくはかけられません・・。
どうぞよろしくお願いします。

(※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。なお、説明がおかしなこともあるかと思いますがご容赦ください。)

Aベストアンサー

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテーブルを(1)のSQL Serverに作成。
(3)ここからはPC側の作業
(4)ODBC接続を作成
(5)現行のAccessに(4)を使ってリンクテーブル作成。
(6)(5)のAccess内のクエリ、フォーム、レポートなどを必要に応じた修正を行う。
(7)動作確認
(8)各PCにODBC接続を設定&Accessファイルを配布。

概要はここまでです。如何でしょう、ご自分でできそうですか?

作業の概要はこの通りなんですが、サーバー機の選定とか"細かい"作業はかなり省略…というか書いてません書けません。特に(6)は実際にAccessファイルを見ないときっちりアドバイスはできませんし、作業ボリュームや難易度も見えてきません。…ということで(業者への発注は想定外のようですがw)業者も見積には難渋するでしょう。さくっと見積もりが出てくることもあるでしょうけど、かなりバッファをとった高額なお見積りかと。正直、見積もり作るのにお金がほしい内容です。

どうしてこんなことをグチグチ書いているかというと、大変申し上げにくいのですが、自称素人の方には難易度高め。業者に任せるか、類似のパッケージを探された方が、不具合などのリスクも軽減され、業務への影響も少ないかと。

ご健闘をお祈りしております。

>※私はシステムはど素人なので、なるべく簡単に教えて頂けたら嬉しいです。

でもやることは十分玄人の領域な気が…。なので簡単に、は不可能でしょう。
以下、#1さんと同じように、AccessファイルからSQLServerへデータ読込、書込する環境を構築することを目指します。違うのは概要だけ。#1さんはきちんとシステムを構築する方法を書かれていますが、私は概要だけ。なんで概要だけかは後述。

(1)SQL Server Expressをダウンロードして、サーバー(もしくはサーバーに見立てたPC)にインストール。
(2)Accessのテー...続きを読む

QSQLで特定の項目の重複のみを排除した全項目を取得する方法

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のような構造になっている場合に「項目名1」について重複している項目を排除し、結果として


項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 B    え    イ    江

上のようなデータを取得したいのです。
この時に、Aの重複を排除して取得するレコードは1~3行目のどれでもよいです。
また、データを取得する際には必ずそのレコードの「全項目」を取得したいのでDistinctはうまく使えませんでした。

どなたか詳しい方、方法を教えてくださると幸いです。回答お待ちしております。

私は仕事上でデータベースを扱っていて、タイトルのような処理を行う必要があるのですが、いかんせん方法がわからずネット上を検索しても同様だったためここで質問させていただきます。

質問点を簡単に説明いたしますと、
たとえばAというテーブルがあって、

項目名1 項目名2 項目名3 項目名4
 A    あ    ア    亜
 A    い    ア    以
 A    う    ア    宇
 B    え    イ    江
 B    お    イ    尾

上のよ...続きを読む

Aベストアンサー

比較可能で一意性のある値をもてる項目6をテーブルに追加して、

select T.* from T, (select Item1,min(Item6) as Item6 from T group by item1) W where T.item6=W.item6;

――ってやるのが、一番手っ取り早いと思います。
他のところに影響がでないのであればですが。
oracleならrowidを使うとか、レコードの更新時刻を突っ込むとか。

QODBCの接続に失敗しました(3146)について

どうにもならなくて困ってしまいメールいたします。
現在、ウインドウズ98、アクセス2000という環境で作業をしています。このアクセスでは、日に1回、本社とのデータのやりとりを行っていますが、ある日から「ODBCの呼び出しに失敗しました エラーメッセージ3146」と出てしまうようになってしまいました。何が原因かもさっぱり分かりません。どんなことでもいいので助言お願いします。

Aベストアンサー

ODBCのエラーは、簡単には原因がわからない場合が
ほとんどです。

通常はコントロールパネルのODBCデータソースアドミニ
ストレータの「トレース」タブの中に、「トレースの開始」
というボタンがありますから、適当なファイル名を指定
してからこれを押します。

それからエラーがでる処理をAccessでやってみます。

するとODBCの呼び出し、通信の内容がログに吐かれます
からこれが解決の手がかりになると思います。専門家に
直してもらうにしてもこの情報は必要ですよ。

おそらく3146ならば、MDACがらみかと推測しますけど、
自信はありません。WindowsUpdateとかIEを6にしたとか
サービスパックとか・・考えられる原因はいっぱいあり
すぎて・・

Q25分13秒05 を 1513秒 と表示させたい

数百件分を秒換算しなくてはなりません。
良い方法はありますか?

Aベストアンサー

#3です。
解決、おめでとうございます。

ええと、FIND("分",A1) は
「"分"という文字はA1のセルの文字列の何文字目にあるか」
ということを意味します。

VALUEは、文字列を数値に変換するための処理で、全角で入力していた場合に、数値として計算可能にするための変換です。実際には、Excelでは全角の数値でも普通に計算してくれるので、あまり意味はないのですが、つい、いつもの癖で入れてしまいました。

「LEFT(A1,B1-1)」はA1のセルの文字列の左から(B1-1)文字分を取り出すという意味で、
「MID(A1,B1+1,C1-B1-1)」はA1のセルの文字列の左から(B1+1)文字目から、(C1-B1-1)文字分だけ取り出すという意味です。

QAccess or SQLServer どちらを使用しますか?

こんにちは。
みなさんならAccessかSQLServerの、どちらのDBを使うかご意見ください(出来ればメリットやデメリットなどもあるとうれしいです)

<環境>
サーバー:Win2000Server、Access2000または、SQLServer7.0
クライアント:Win2000 ×10台
開発環境:VB6.0(SP5)、Win2000

<やりたいこと&悩み>
1)複数のパソコンからDBのデータをSelect、Insert、Update、Deleteする
2)データが多いので、Accessの場合は3つくらいのmdbに分けないといけない(Accessのサイズ上限を超えてしまう為)。分けた場合は、リンクテーブルが必要。データ数は、1ヶ月に3万件くらい
3)タイミングによっては、同時アクセスあり
4)AccessをDBとして試作品を作成したところ、ファイルをロックできませんでしたというエラーが1日1回程度でてしまう
5)SQLServerでは気軽(?)にユーザーがメンテナンスできない(Accessの知識は多少あり)

このような感じですが、みなさんならどちらを選択されますか?ご意見よろしくお願いします。

こんにちは。
みなさんならAccessかSQLServerの、どちらのDBを使うかご意見ください(出来ればメリットやデメリットなどもあるとうれしいです)

<環境>
サーバー:Win2000Server、Access2000または、SQLServer7.0
クライアント:Win2000 ×10台
開発環境:VB6.0(SP5)、Win2000

<やりたいこと&悩み>
1)複数のパソコンからDBのデータをSelect、Insert、Update、Deleteする
2)データが多いので、Accessの場合は3つくらいのmdbに分けないといけない(Accessのサイズ上限を超えてしまう為)。分け...続きを読む

Aベストアンサー

それだけの規模のクラサバシステムを構築するのであれば
SQLServerにしておくべきでしょう、というよりも
ACCESSでは危険が大きすぎます。

SQLServerと比較した場合のACCESSのデメリットとして

・データベース(mdbファイル)が破損する危険が大きい
・レコード件数が増えることによるレスポンスの低下が激しい
・ユーザー権限、アクセス権限などを管理する機能が乏しく
 マルチクライアントからの利用には向かない
・データベースの保守、管理機能が乏しく、 データベースの
 バックアップ等もmdbファイルそのものをコピーするぐらいしかない

などが挙げられます。

ACCESSのmdbは、マルチユーザー・マルチクライアントの
システムを管理できるほど高性能なデータベースではありません。
ACCESSで管理できるデータベースは、スタンドアロンや
もっと小規模なシステム(クライアント2~3台程度)ぐらいが限界でしょう。

QEXCEL VBAマクロ作成で、他のEXCELからデータを取り込みたい

メインプログラム(EXCEL VBA)より、
他のフォルダーにあるEXCELの項目の内容を取り込みたいです。
たとえば他のフォルダーのEXCELのRange("A2:A3").ValueをメインプログラムのRange("C2:C3").Valueにセットしたい時です。

・コマンドボタン押したら、どこのEXCELから取り込むかのポップアップ(?)は、表示はできてます。
・作業者が選んだパスとブックもMsgBoxで表示できてるので、もらう相手の場所も取得できてます。

・となると次はOPEN,INPUTですか?
テキストデータの取り込みですと、Inputでそのバッファを定義してるのですが、なんか違うような。。。

よろしくお願いします!

Aベストアンサー

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Cells(2, 2).Value ' 相手シートの B2 の値を自分自身の A1 に書き込む

readBook.Close False ' 相手ブックを閉じる
Set readSheet = Nothing
Set readBook = Nothing

私がやる方法です。

Dim writeSheet As Worksheet ' 自分自身の書き出し先シート
Set writeSheet = ThisWorkbook.Worksheets(1) ' Sheet1 を参照

Dim readBook As Workbook ' 相手ブック
Set readBook = Workbooks.Open(filename) ' 相手ブックを開いて参照
Dim readSheet As WorkSheet ' 相手シート
Set readSheet = readBook.Worksheets("sheetName") ' 相手シートを参照
' または Set readSheet = readBook.Worksheets(sheetIndex)

' 例えば
writeSheet.Cells(1, 1).Value = readSheet.Ce...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング