「夫を成功」へ導く妻の秘訣 座談会

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

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

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

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

>エラーで


>"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

>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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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データ同士を結合するには?

全く違うサーバに載っているDBのデータ同士を結合するいい手段はないでしょうか?
DBは両者ともOracleですが9と10という違いがあります。
SERVER1に載っているDBは商品管理のためのものです。主キーは「品ID」です。
SVR2に載っているDBは、保証期間の管理をするためのものです。主キーは「品ID&メーカーID」です。

唯一データのつながりを作れそうなのは両者の主キーのみです。
あとのデータには何にもつながりはありません。
どちらかのサーバに片方のDBのテーブルを作るとかビューを作ればいいかと思いましたが、その方法についてはNGとされています。
(とりあえずその方法でやる場合できますでしょうか???)
DBに何かを作ることなくデータの結合をさせれないでしょうか?
SQLplusなりSQLクリエイトツールなりどんな方法でもDB自体汚さない限り問題はありません。

Aベストアンサー

「CREATE DATABASE LINK」でデータベースリンクを作成すれば可能だと思います
サーバー1上で
「CREATE DATABASE LINK link2
CONNECT TO ユーザー名 IDENTIFIED BY password
USING 'サービス名' 」
を実行しデータベースリンクを作成し
http://download.oracle.com/docs/cd/E16338_01/server.112/b56299/statements_5005.htm

FROM テーブル名 INNER JOIN テーブル名2@link2
on テーブル名.項目名 = テーブル名2@link2.項目名

でJOINできます。

QあるDBから別のDBのテーブルをselectしたい

mysqlのデータベースAとBが存在するとして、
Aをuseしている状態で、Bのデータベースのテーブルをselectするには、どのような構文でSQLを実行すればよいでしょうか。

Aベストアンサー

現在ログイン中ユーザー名で、B のデータベースへのアクセス権を持っているなら、table名の前にデータベース名を付けるだけですよ。
select * from B.tablename

show databases;
で、表示されるデータベースなら可能でしょう。

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

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 に追加してください。」
というエラーになってします。
宜しくお願いします。

Aベストアンサー

「リンクサーバー」を設定します。
http://msdn2.microsoft.com/ja-jp/library/ms188279.aspx
設定すれば
SELECT a.*,b.* FROM [データベース名1].[dbo].[テーブル名1] AS a
INNER JOIN [リンクサーバー名].[データベース名2].[dbo].[テーブル名2] AS b
ON a.ID=b.ID
と書けます。

Qテーブルの参照方法

よろしくお願いします。
SQLServer2005についての質問です。
(OS:Windows Server 2003 SP1)

サーバが2台あり、どちらにもSQL Server 2005 がインストールされ
ています。一方のサーバ(サーバA)に存在するテーブルを他方の
サーバ(サーバB)からTSQLで参照するにはどのようにすれば良い
でしょうか?

各サーバで必要な設定と、実行するTSQLのイメージを教えてください。

基本的なことかもしれませんが、調べてもさっぱり判らず困っています。
(sqlcmdを使うようだというところはなんとなく判りました)
どうぞよろしくお願い致します。

Aベストアンサー

リンクサーバを構築しないでもできますよ。
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

リンクサーバを構築しないでもできますよ。
Management Studioから、リンク元のサーバを右Clickし、
サーバのプロパティを表示させます。
そこに、「接続」というタブがあるんで、
「このサーバへのリモート接続を許可する」をCheckONにしておく
ことと、

SQL Serverをインストールすると、
[構成ツール]の配下に「SQL Server セキュリティ構成」もインストールされるので、「サービスと接続のセキュリティ構成」を
選んで、SQL Server 2005 Surface Area Configuration を
起動させます。

[リモー...続きを読む

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.顧客

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

QSELECTで1件のみ取得するには?

こんにちわ。
いまORACLE9iを使用している者です。

ACCESSでは
SELECT TOP 1 項目名 FROM テーブル名
ORDER BY 項目名;
で並べ替えたデータ群のうち,先頭の1件だけを
取ることができますが,
ORACLEでそのような機能(SQL)はあるでしょうか?
教えてください。
よろしくお願いします。

Aベストアンサー

order by と rownum を併用する場合は注意が必要です。

[tbl01]
cola | colb
------------
1000 | aaaa
1001 | bbbb

というデータがある場合、
select cola from tbl01 where rownum < 1 order by cola desc;
とすると、「1001」ではなく、「1000」が返されます。
これは、order by の前に rownum < 1 が適用されてしまうからです。

解決するには、
select aaa from (select cola aaa from tbl01 order by cola desc) where rownum = 1;
とすれば良いです。

QSQLで違うテーブルの値を比較して値に差があるレコードを抽出したいので

SQLで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。
下に例を作ってみました。(テキストに貼りなおしてもらうと見易くなると思います)
<Aテーブル>
A1A2A3A4A5
------- ------- ------- ------- ----------
XXXXXXX XX1ABC32009/05/08
WWCWWCW WW2CCB12008/03/21
DDDDDDD DD1JPN52007/08/08
GGGGGGG GX9SOX21977/01/04
FFFFFFF USJNPB32001/09/11


<Bテーブル>
B1B2B3B4B5
------- ------- ------- ------- ----------
XXXXXXX XX1ibichaoshimu2002/07/05
XXXXXXX XX1takeshiokada2005/07/15
XXXXXXX XX1kamoshu1857/09/25
WWCWWCW WW2waowao2008/10/22
DDDDDDD DD1uihhh2006/06/30
DDDDDDD DD1jojoj x5xx1999/09/09
DDDDDDD DD1momohara2005/03/07
DDDDDDD DD1itaiu-2003/12/22
DDDDDDD DD1komanogoal2007/04/26
GGGGGGG GX9 damerecord2009/11/14
FFFFFFF USJ ikitai1995/08/15
FFFFFFF USJ sstebuspi2004/01/05
FFFFFFF USJ bbpp2009/08/23

A1とB1は主キー、A2とB2は副キーです。
Aテーブルの「A4」カラムにはBテーブルのレコード数を持っています。(主キー、副キーが同じものの)
しかし、よくよく見るとAテーブルの「GGGGGGG」のA4には「2」のはずなのにBテーブルには実際にレコードは1つしかありません。
こういう状態になってしまっているのを割り出したいのですがどのようにA4とBテーブルで数があってないものを抽出できるでしょうか。
よろしくお願いいたします。

SQLで違うテーブルの値を比較して値に差があるレコードを抽出したいのですがヒントをいただけないでしょうか。
下に例を作ってみました。(テキストに貼りなおしてもらうと見易くなると思います)
<Aテーブル>
A1A2A3A4A5
------- ------- ------- ------- ----------
XXXXXXX XX1ABC32009/05/08
WWCWWCW WW2CCB12008/03/21
DDDDDDD DD1JPN52007/08/08
GGGGGGG GX9SOX21977/01/04
FFFFFFF USJNPB32001/09/11


<Bテーブル>
B1B2B3B4B5
------- ------- ------- ------- ----------
XXXXXXX XX1ibichaoshimu200...続きを読む

Aベストアンサー

SELECT A.* FROM Aテーブル A
INNER JOIN
TABLE(SELECT B1,B2,COUNT(*) SU
FROM Bテーブル GROUP BY B1,B2) B
ON A.A1=B.B1 AND A.A2=B.B2
AND A.A4<>B.SU

または

WITH B(B1,B2,SU) AS
(SELECT B1,B2,COUNT(*) SU
FROM Bテーブル GROUP BY B1,B2)
SELECT A.* FROM Aテーブル A
INNER JOIN B ON A.A1=B.B1
AND A.A2=B.B2 AND A.A4<>B.SU

こんなのでどうでしょうか?
後者の方が標準的(他のDBシステムでも
使える可能性が高い)かと思います。

Q3つの表の外部結合

表A、B、Cの3つがあり、Aのすべての行を出力したいと考えています。
外部結合を用いるのだとは思うのですが、3つの表に対して行う場合の
書き方がわからず困っています。
ご教授いただけないでしょうか?
select * from a,b,c
where a.商品ID =b.商品ID (+) and b.商品ID (+) =c.商品ID (+)
としてみましたが、うまくいきませんでした。

Aベストアンサー

ansi構文の趣旨からいえば、結合条件と絞り込み条件は分けて書くので・・

select *
from a
left join b on (a.商品ID =b.商品ID)
left join c on (b.商品ID =c.商品ID)
where a.年月 = 任意の値

と書くのが一般的でしょうね。


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

人気Q&Aランキング