テーブルの参照方法

このQ&Aのポイント
  • SQL Server 2005を使用している環境で、複数のサーバ間でテーブルを参照する方法について教えてください。
  • Windows Server 2003 SP1上にインストールされている2台のサーバ(サーバAとサーバB)があり、サーバAに存在するテーブルをサーバBからTSQLで参照したいです。
  • 参照するためには、サーバAとサーバBの間で必要な設定を行い、TSQLを使用してテーブルを参照することができます。具体的な手順について教えてください。
回答を見る
  • ベストアンサー

テーブルの参照方法

よろしくお願いします。 SQLServer2005についての質問です。 (OS:Windows Server 2003 SP1) サーバが2台あり、どちらにもSQL Server 2005 がインストールされ ています。一方のサーバ(サーバA)に存在するテーブルを他方の サーバ(サーバB)からTSQLで参照するにはどのようにすれば良い でしょうか? 各サーバで必要な設定と、実行するTSQLのイメージを教えてください。 基本的なことかもしれませんが、調べてもさっぱり判らず困っています。 (sqlcmdを使うようだというところはなんとなく判りました) どうぞよろしくお願い致します。

  • nao-k
  • お礼率92% (695/752)

質問者が選んだベストアンサー

  • ベストアンサー
  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.2

リンクサーバを構築しないでもできますよ。 Management Studioから、リンク元のサーバを右Clickし、 サーバのプロパティを表示させます。 そこに、「接続」というタブがあるんで、 「このサーバへのリモート接続を許可する」をCheckONにしておく ことと、 SQL Serverをインストールすると、 [構成ツール]の配下に「SQL Server セキュリティ構成」もインストールされるので、「サービスと接続のセキュリティ構成」を 選んで、SQL Server 2005 Surface Area Configuration を 起動させます。 [リモート接続]というタブがあるので [ローカル接続および[リモート接続]を選択し、 適切なTCPプロトコルを設定し、適用させて、SQL Serverのサービスを 再起動すれば可能です。 細かい点としては、SQL Server Browser Serviceの有効化や SQL Serverのファイアウォール設定を行う必要があります。 詳しいことは、ご確認頂いていたサイトの日本語版が http://support.microsoft.com/kb/914277/ja-jp にもありますので、少しはわかりやすいかと思います。 なお、設定後のSQLアクセスは、 select * from [サーバAのサーバ名].[DB名].[スキーマ名(dbo等)].[テーブル名] で接続可能です。 よろしくお願いします。

参考URL:
http://support.microsoft.com/kb/914277/ja-jp
nao-k
質問者

お礼

お礼の書き込みが遅くなり、申し訳ございません。 いろいろと教えてくださり、ありがとうございます。 非常に助かりました。

その他の回答 (1)

  • kero_mio
  • ベストアンサー率90% (94/104)
回答No.1

もし、リンクサーバを立てられるのであれば、 サーバB上に、リンクサーバを立てちゃいましょう! (ただし、サーバAとサーバBがネットワーク上、同一セグメントにいればの話ですが) リンクサーバの立て方なんですが、Management Studioから [サーバーオブジェクト]->[リンクサーバ]というのがあるので 右Clickして、「新しいリンクサーバー」というのがありますので そこから作ります。 (リンク先(サーバA)のサーバ名かIPアドレスを入力し、 プロバイダには、VSEEなんとか というやつを選択します。 もし、サーバAとサーバBでパスワードや権限が違う場合は、 セキュリティタブで、リモートログインするユーザ名とパスワード を設定しましょう) ここまでできたら、サーバB上で、 select * from [サーバAのサーバ名].[DB名].[スキーマ名(dbo等)].[テーブル名] でアクセスすればOKです。 ※注意点は、[]できちんとサーバ名、DB名、スキーマ名、テーブル名は 必ず[]で囲っておくことです。 ※懸念点としては、リンクサーバはレスポンスは良くないので、  レスポンス重視のものを作っているのであれば  別の形(設計思想を変えるなど)した方がいいです。

nao-k
質問者

お礼

アドバイスありがとうございます。 (他の質問でもお世話になっております) リンクサーバーを構築すれば可能そうだということが判り、 下記をまずは簡単に眺めてみました。 http://technet.microsoft.com/ja-jp/library/ms188279.aspx http://technet.microsoft.com/ja-jp/library/ms190406.aspx http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=31792&forum=26&3 ちなみに、リンクサーバーを構築しないではできないのでしょうか? sqlcmdのオプション指定をみるとホスト名やインスタンスを指定 することもできるようなので何もせずに可能なのかな?と思っていましたが。 ただし、下記のようなこともあるようですが良く判ってはおりません。。 http://support.microsoft.com/kb/914277/en-us >(ただし、サーバAとサーバBがネットワーク上、同一セグメントにいればの話ですが) 同一セグメントにいます。

関連するQ&A

  • SQL ServerのテーブルをCSVへ出力したい

    お世話になっております。 httpで、インターネット経由にて SQL Serverのテーブルから条件に合致したデータをCSVへ出力しダウンロードする 仕組みを作りたいと考えております。 例 ■テーブルA KeyA 項目1 項目2 001 100 200 002 200 250 003 300 350 select * from KeyA =para paraはパラメタとして渡し、結果をpara.CSVのようにCSVファイルへ出力したいのです。 sqlcmdを使えば、できそうな感じだったのですがよくわからなかったのが (1)sqlcmdのSQL文にパラメタを渡すことができるのか、できるのならどうやるのか (2)出力ファイル名もパラメタ化したいのだができるのか、できるのならどうやるのか (3)ネット経由でsqlcmdを実行することができるのか、できるのならどうやるのか (環境) SQLServer2008R2 IIS ご教授頂けましたら大変ありがたいです。 よろしくお願いいたします。

  • SQLServer2008 ユーザー名の修飾無しでテーブル参照したい

    SQLServer2000で動作していたプログラムをSQLServer2008で動かそうとしています。 プログラムはDBのテーブルにアクセスする際にユーザー名(スキーマ)の修飾無しの SQLをDBに送っているためエラーになってしまいます。 SQLServer側の設定でスキーマと同じユーザーでログインしている場合は スキーマ修飾なしテーブルにアクセスする方法は無いでしょうか? 質問番号:4681290も参考にしたのですがログインユーザのサーバーロールはpublicのみが割り当てられています。 環境は専用レンタルサーバーでWindows Web Server 2008 + Microsoft SQL Server 2008です。 アドバイスいただければ幸いです。 よろしくお願いいたします。

  • 複数のテーブルを参照して値を変更する方法

    お世話になっております。 以下のようなテーブルがあったとして、table1,table2の値を参照して加算し、master_tableの値を変更するようなSQLは一つの文で書く方法はありますでしょうか? 例えば、あるSQLを実行すると、master_tableのid1のscoreが500になるようなSQLです。 どなたかご教授ください。 master_table id | score 1 | 0 2 | 0 table1 id | score 1 | 100 2 | 300 table2 id | score 1 | 400 2 | 100

    • ベストアンサー
    • MySQL
  • 【PostgreからSQL-ServerのテーブルをSelect】

    【PostgreからSQL-ServerのテーブルをSelect】 PostgreからSQL-ServerのDBにあるテーブルをSelectしたいのですが、 ODBCまでは設定したものの、それ以降のやり方がわかりません。 どなたか教えていただけないでしょうか。 【参照元】 *Windows 2003 ServerR2(32Bit) *SQL-Server 2005 【参照先】 *Windows 2003 ServerR2(32bit) *PostgreSQL 8.2 参照先と参照元を変更すればSQL-Server上で出来そうなのですが、 今回、Postgre側からSQL-ServerにSelectしなければなりません。 OracleでいうところのDB Linkなのですが、どなたか教えていただけないでしょうか。 URLのご提示でも結構です。 どうぞよろしくお願いいたします。 Postgre ---- Select(後にViewに変更予定) ----→ SQL-Server

  • ODBCでSQLServerテーブルが参照できない

    自宅のパソコンでSQLServerをインストールし、 それにデータベース・テーブルなどを作成し、VisuualStudioでC#/ASP.NETのアプリを開発しています。 今回、データベースのマスタをメンテナンスするツールをAccessで作成したいので ODBC接続の設定を行い、 Access側からリンクテーブルでSQLServerのテーブルを参照したいのですが SQLServverで作成したテーブルが一覧に一切表示できず、何かシステムテーブルのようなものだけが表示されます。 会社では上記のことが問題なく行えました。 会社で違うのは、SQLServerは別のサーバーマシン内にある点です。 自宅の場合、データベースサーバーも同じパソコンのため上手くいかないのでしょうか。 自宅でも効率よく作業したいので同じように環境構築したいのです。 何か、原因等わかる方がおられましたら ご教授願います。

  • SQLserver2005 テーブル一覧の取得

    SQLserver2005 テーブル一覧の取得 知っている方には、基礎すぎて申し訳ないのですが、 添付画像のテーブルを選択して、SQLペインを表示させて そこに、  EXEC sp_tables と記述して、テーブル一覧を取得しようとして「!」マークを 押して、sp_tablesを実行させようとした所、下記のようなエラーメッセージが 出てしまいます。 EXEC SQL コンストラクトまたはステートメントはサポートされていません。 書き方が悪いのか、ストアドプロシージャの実行場所が悪いのかよく分かりませんが うまく行きません。 sp_tablesを使用して、テーブル一覧を取得する方法をどなたか教えて下さい。 よろしくお願いします。

  • バッチからSQLCMDを実行する方法

    以下のようなコマンドをバッチファイル(.bat)に記載し、実行しています。(ローカルのsqlserverにwindows認証で入れる事は確認済みです。) !!sqlcmd -E -d database -i c:\sql\a.sql ですが、バッチを実行してもsqlcmdが動作せず、 「'!!sqlcmd'は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。」 というエラーが発生します。 バッチファイルから、sqlcmdの実行方法をご存知の方、申し訳ありませんがご教示お願いします。

  • 2台のサーバー間でのテーブル結合方法

    2台のサーバーでそれぞれSQL Server2000 とSQL Server2005を動かしています。 2台のサーバーの中の別のDBの中にあるテーブルを結合したいのですが、可能なのでしょうか? ちなみに [データベース名1]のサーバーに接続した状態で SELECT a.*,b.* FROM [データベース名1].[dbo].[テーブル名1] AS a INNER JOIN [ServerIPアドレス].[データベース名2].[dbo].[テーブル名2] AS b ON a.ID=b.ID とやると 「sys.serversにサーバー 'ServerIPアドレス' が見つかりませんでした。 正しいサーバー名を指定したかどうかを確認してください。 必要であればストアド プロシージャ sp_addlinkedserver を実行し、 サーバーを sys.servers に追加してください。」 というエラーになってします。 宜しくお願いします。

  • SQLServerのデータを支店間で参照する方法

    こんにちは、SQLServerとネットワークに関してよくわからないことがあります。 教えて頂けないでしょうか。 会社で使用しているSQLServerのデータを遠距離にある支店から参照したいのですが、システム部は、支店間でPCを接続することを原則禁止しています。 支店間の専用線に内線電話の音声信号も乗っていて、ネットワークのトラフックが増加すると、帯域の狭い支店で通話が途中で途切れるようになるので利用を制限しているようです。 SQLServerの利用方法ですが、SQLServerのデータを支店からODBC経由で、LMHOSTにサーバーのIPアドレスを指定して、ACCESS2000から参照しようとしています。 このような、SQLServerのデータ利用法は間違っているのでしょうか? SQLServerのデータを支店間で利用するには、どんな方法が良いのでしょうか? 宜しくお願い致します。 サーバー側:Windows2000ServerSP3 SQLServer2000SP3 Windows認証 クライアント側:Windows2000Professional Access2000

  • BIのSSISで一時テーブルの作成ができない

    Ver:SQLServer2005 SQL Server Business Intelligence の SSIS の、 「SQL 実行タスク」にて、グローバル一時テーブルの 作成を試みたところ、実行結果は問題なく完了となっているのですが、 実際にテーブルの生成がされていませんでした。 また、ストアド上でグローバル一時テーブルを作成するようにし、 そのストアドを実行させて問題なく完了させても、 やはりテーブルの生成がされていませんでした。。 なお、グローバル一時テーブルの削除は問題なくできます。 これは、そもそも出来ない操作なのか、 それとも、何か解決法があるのか、どなたかご教授願えないでしょうか? 恐れ入りますが、なにとぞよろしくお願いいたします。