プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
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のクエリを使って、テーブルの追加をすると同じデータベース内のテーブルしか出てこないので、出来ないのかなと思っていますがどうでしょうか?

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

A 回答 (4件)

select * from tbl1,[aaa].[dbo].[tbl2]


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

この回答への補足

015_dogiです。
>同じデータベース内・・・
では有りません。ごめんなさい、間違えました。
データベースも私が作ったものです。
同じサーバー内と書こうとしたものです。

データベースも特に設定はしていません。

宜しくお願いします。

補足日時:2005/07/20 12:55
    • good
    • 0
この回答へのお礼

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

どういう環境でなのか、良く判らないんですが..



SQLserverは、1つサーバに複数のインスタンスを作れます。
各インスタンスは、複数のデータベースを管理できます。

インスタンス内のデータベースを跨ぐような処理も可能ですし、
インスタンスを跨ぐような処理もできます。

単一インスタンス内のデータベースを跨ぐだけであれば、
[データベース].[オーナ].[テーブル]の様式で書くだけで
OKです。
インスタンスを跨ぐ場合、リモートデータベースなどの仕組みを
使わないとダメだと思います。

>>(当然、権限の問題がない前提ですが・・)
>同じデータベース内でも権限が違うのですか?

誰でも、全てのデータを好きに見ることができるようでは、
セキュリティに問題があると思いませんか?
詳しくは、マニュアルを読んでください。
    • good
    • 0
この回答へのお礼

k_o_r_o_c_h_a_nさんありがとうございます。
まだ解決はしていないのですが・・・

select * from [データベース].[オーナ].[テーブル]と書き
whereの部分も[データベース].[オーナ].[テーブル].[列名]で書かないと駄目なのですよね。

すいません教えてください。

お礼日時:2005/07/22 15:23

>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以外では、データベースやオーナを意識しないで済みます。
    • good
    • 0
この回答へのお礼

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

>エラーで


>"System.DataSqlclient.SqlException"のハンドルされていない例外がsystem.data.dllで発生しました。
というのはもっと詳細に分からないものしょうか?

.netについては、詳しくないのですが・・
SQL文にエラーがあるのだと推測できるので、まずは、server1でSQL文が処理できるか
処理できないかを確認した方が良いでしょう。
SQLserverのクライアントツール(何でも良い)で、SQL文を処理してみてください。
    • good
    • 0
この回答へのお礼

k_o_r_o_c_h_a_n色々ありがとうございました。
エンタープライズマネージャーのクエリでソースを作り
出来ましたのでご連絡いたします。

ご連絡が遅くなりましてすいません。

お礼日時:2005/08/11 16:57

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

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

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


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