他のデータベースとのテーブル結合
いつもお世話になっております。
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のクエリを使って、テーブルの追加をすると同じデータベース内のテーブルしか出てこないので、出来ないのかなと思っていますがどうでしょうか?
わかる方がいましたら教えてください。
投稿日時 - 2005-07-19 14:55:37
select * from tbl1,[aaa].[dbo].[tbl2]
のように、[データベース名].[オーナー].[テーブル名]の様式で指定すれば、良いかと思います。
(当然、権限の問題がない前提ですが・・)
投稿日時 - 2005-07-20 01:42:16
015_dogiです。
>同じデータベース内・・・
では有りません。ごめんなさい、間違えました。
データベースも私が作ったものです。
同じサーバー内と書こうとしたものです。
データベースも特に設定はしていません。
宜しくお願いします。
投稿日時 - 2005-07-20 12:55:57
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"
などのように。
何卒宜しくお願いします。
投稿日時 - 2005-07-20 12:50:29
このQ&Aは役に立ちましたか?
1人が「このQ&Aが役に立った」と投票しています
回答(4)
>エラーで
>"System.DataSqlclient.SqlException"のハンドルされていない例外がsystem.data.dllで発生しました。
というのはもっと詳細に分からないものしょうか?
.netについては、詳しくないのですが・・
SQL文にエラーがあるのだと推測できるので、まずは、server1でSQL文が処理できるか
処理できないかを確認した方が良いでしょう。
SQLserverのクライアントツール(何でも良い)で、SQL文を処理してみてください。
投稿日時 - 2005-07-29 02:41:38
k_o_r_o_c_h_a_n色々ありがとうございました。
エンタープライズマネージャーのクエリでソースを作り
出来ましたのでご連絡いたします。
ご連絡が遅くなりましてすいません。
投稿日時 - 2005-08-11 16:57:10
>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以外では、データベースやオーナを意識しないで済みます。
投稿日時 - 2005-07-24 04:46:58
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")
の部分です。
詳細にヒントが出てくれると助かるのですが・・・
何か分かりますでしょうか?
投稿日時 - 2005-07-28 11:15:07
どういう環境でなのか、良く判らないんですが..
SQLserverは、1つサーバに複数のインスタンスを作れます。
各インスタンスは、複数のデータベースを管理できます。
インスタンス内のデータベースを跨ぐような処理も可能ですし、
インスタンスを跨ぐような処理もできます。
単一インスタンス内のデータベースを跨ぐだけであれば、
[データベース].[オーナ].[テーブル]の様式で書くだけで
OKです。
インスタンスを跨ぐ場合、リモートデータベースなどの仕組みを
使わないとダメだと思います。
>>(当然、権限の問題がない前提ですが・・)
>同じデータベース内でも権限が違うのですか?
誰でも、全てのデータを好きに見ることができるようでは、
セキュリティに問題があると思いませんか?
詳しくは、マニュアルを読んでください。
投稿日時 - 2005-07-20 14:47:39
k_o_r_o_c_h_a_nさんありがとうございます。
まだ解決はしていないのですが・・・
select * from [データベース].[オーナ].[テーブル]と書き
whereの部分も[データベース].[オーナ].[テーブル].[列名]で書かないと駄目なのですよね。
すいません教えてください。
投稿日時 - 2005-07-22 15:23:49