- ベストアンサー
他のデータベースとのテーブル結合は可能か?
- Windowsアプリケーションを作成中のVB.netでSQLサーバーのテーブルを参照していますが、同じデータベース内でなければ結合できないか疑問です。
- testデータベースに存在しないテーブルを結合する方法を模索していますが、うまくいきません。
- SQLクエリを使用してテーブルの追加をすると、同じデータベース内のテーブルしか表示されないため、結合はできないのか心配です。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
select * from tbl1,[aaa].[dbo].[tbl2] のように、[データベース名].[オーナー].[テーブル名]の様式で指定すれば、良いかと思います。 (当然、権限の問題がない前提ですが・・)
その他の回答 (3)
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
>エラーで >"System.DataSqlclient.SqlException"のハンドルされていない例外がsystem.data.dllで発生しました。 というのはもっと詳細に分からないものしょうか? .netについては、詳しくないのですが・・ SQL文にエラーがあるのだと推測できるので、まずは、server1でSQL文が処理できるか 処理できないかを確認した方が良いでしょう。 SQLserverのクライアントツール(何でも良い)で、SQL文を処理してみてください。
お礼
k_o_r_o_c_h_a_n色々ありがとうございました。 エンタープライズマネージャーのクエリでソースを作り 出来ましたのでご連絡いたします。 ご連絡が遅くなりましてすいません。
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
>select * from [データベース].[オーナ].[テーブル]と書き >whereの部分も[データベース].[オーナ].[テーブル].[列名]で書かないと駄目なのですよね。 「面倒だなぁ」という意味ですよね? 基本的に・・・ 列名を正しく表現するとしたら、[データベース].[オーナ].[テーブル].[列名]の表記となります。 ただし、単一のSQL文上で、同じオブジェクトを、複数回別目的で使うことがあるので、 別名なる機能があります。これを利用すると、記述の簡素化ができます。 別名(エリアス)例: select a.氏名 as オヤジの名前,b.バカ息子の名前 from 家族台帳 a,家族台帳 b where a.世帯=b.世帯 and a.続柄='オヤジ' and b.続柄='子' 先のSQLだと.. select * from tbl1,[aaa].[dbo].[tbl2] as tbl2 where tbl1.col1=tbl2.col1 のように別名を付与すれば、from以外では、データベースやオーナを意識しないで済みます。
お礼
k_o_r_o_c_h_a_n さんご回答ありがとうございました。 なかなか苦戦しております。 エラーで "System.DataSqlclient.SqlException"のハンドルされていない例外がsystem.data.dllで発生しました。 というのはもっと詳細に分からないものしょうか? っというのも 'SQL接続処理 Dim strConn As String = "Password='';User ID=sa;Initial Catalog=test;Data Source=server1" はテスト環境で本番環境はまた違うサーバーです。 Source=server1を変更したのですが上記のエラーが出ました。 サーバー接続は出来ていると思います。 データベース名、テーブルも同じレイアウトになっているはずです。 パスワードなども設定していません。 サーバー名を変えるだけでは駄目なのでしょうか? 本件のテーブルの結合時のエラーも同じところででます。 エラーの出るところは下記の部分の adapter = New SqlClient.SqlDataAdapter(strSQL, strConn) ds = New DataSet adapter.fill(ds,"Estimate") の部分です。 詳細にヒントが出てくれると助かるのですが・・・ 何か分かりますでしょうか?
- k_o_r_o_c_h_a_n
- ベストアンサー率55% (526/942)
どういう環境でなのか、良く判らないんですが.. SQLserverは、1つサーバに複数のインスタンスを作れます。 各インスタンスは、複数のデータベースを管理できます。 インスタンス内のデータベースを跨ぐような処理も可能ですし、 インスタンスを跨ぐような処理もできます。 単一インスタンス内のデータベースを跨ぐだけであれば、 [データベース].[オーナ].[テーブル]の様式で書くだけで OKです。 インスタンスを跨ぐ場合、リモートデータベースなどの仕組みを 使わないとダメだと思います。 >>(当然、権限の問題がない前提ですが・・) >同じデータベース内でも権限が違うのですか? 誰でも、全てのデータを好きに見ることができるようでは、 セキュリティに問題があると思いませんか? 詳しくは、マニュアルを読んでください。
お礼
k_o_r_o_c_h_a_nさんありがとうございます。 まだ解決はしていないのですが・・・ select * from [データベース].[オーナ].[テーブル]と書き whereの部分も[データベース].[オーナ].[テーブル].[列名]で書かないと駄目なのですよね。 すいません教えてください。
お礼
k_o_r_o_c_h_a_n さんご回答ありがとうございます。 k_o_r_o_c_h_a_n さんの通りにやったのですが、 "System.DataSqlclient.SqlException"のハンドルされていない例外がsystem.data.dllで発生しました。 と出ます。 >(当然、権限の問題がない前提ですが・・) 同じデータベース内でも権限が違うのですか? とりあえず両方とも私がインポートしたもので、特に変更はしていないのですが・・・ 新たにSQL接続する必要ありますか? Dim strConn As String = "Password='';User ID=sa;Initial Catalog=aaa;Data Source=server1" などのように。 何卒宜しくお願いします。
補足
015_dogiです。 >同じデータベース内・・・ では有りません。ごめんなさい、間違えました。 データベースも私が作ったものです。 同じサーバー内と書こうとしたものです。 データベースも特に設定はしていません。 宜しくお願いします。