- PR -

SQL文

1
投稿者投稿内容
のりちゃん
会議室デビュー日: 2007/09/19
投稿数: 15
投稿日時: 2007-09-19 13:05
SQL文で質問があります。
ストアドを作成するSQLサーバーと、
参照するデータベースが存在しているSQLサーバーが異なる時の
データベース名の記述として、
[リンクサーバー名]..[所有者名].[テーブル名]
と記述すると思います。
単純にテーブルAからA1、A2という項目を参照するという記述なら
SELECT A1,A2 FROM [リンクサーバー名]..[所有者名].A
となると思うのですが、
LEFTOUTER JOINなどでAとは別のテーブルBを連結させ
データを取得する記述方法がわかりません。
単純に
「LEFT OUTER JOIN [リンクサーバー名]..[所有者名].B ON (A1 = [リンクサーバー名]..[所有者名].B)」
と記述すると
「数値 名 '[リンクサーバー名]..[所有者名].B' は、プレフィックスの最大数を超えています。最大数は 3 です。」というようなエラーがかえってきてうまくいきません。
どのような記述方法が適切でしょうか?
どなたかご存知の方がいらっしゃいましたら教えてください。お願いいたします。
未記入
会議室デビュー日: 2007/08/28
投稿数: 8
投稿日時: 2007-09-19 13:24
はじめまして。

参考になるかわかりませんが、以下2パターンの何れかにて、
回避できそうな気がします。

#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#
 @エイリアスを利用する
 Aエイリアスを利用してwhere文にてテーブル連結を行う。
  =>SQL Server で JOIN 演算子 を使うのは
    あまり使用しませんけど…(^^ゞ
    ※ ACCESS とかをご利用なのでしょうか??
#+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#

Ex.@
select a1, a2 from [リンクサーバー名]..[所有者名].A linkA
left outer join [リンクサーバー名]..[所有者名].b linkB
on (linkA.a1=linkB.a1)

Ex.A
select a1, a2 from
[リンクサーバー名]..[所有者名].A linkA
, [リンクサーバー名]..[所有者名].b linkB
where linkA.a1=linkB.a1


単純に[リンクサーバー名]..[所有者名].[テーブル名] の
構文解析で許容されている箇所以外にて、
のりちゃんさんがご利用なのが問題っぽいだけの様な……。






よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2007-09-19 21:02
こんにちは。
回答ではないです。すみません。
バージョンは2000ですよね?回答はおそらく未記入さんの書かれたので良いと思います。

引用:

未記入さんの書き込み (2007-09-19 13:24) より:
  =>SQL Server で JOIN 演算子 を使うのは
    あまり使用しませんけど…(^^ゞ
    ※ ACCESS とかをご利用なのでしょうか??



これは初耳なのですが、どうしてなのでしょうか?
私はむしろJOINを使いますが・・・
Fabulous
ベテラン
会議室デビュー日: 2007/08/11
投稿数: 51
投稿日時: 2007-09-19 22:23
引用:

よっしーさんの書き込み (2007-09-19 21:02) より:
引用:

未記入さんの書き込み (2007-09-19 13:24) より:
  =>SQL Server で JOIN 演算子 を使うのは
    あまり使用しませんけど…(^^ゞ
    ※ ACCESS とかをご利用なのでしょうか??


これは初耳なのですが、どうしてなのでしょうか?
私はむしろJOINを使いますが・・・


昔の名残りです。

SQLServerではANSI構文に主流が移り始めたのがバージョン6.5くらいからだったと思います。OracleもSQLServerも方言主体の中、Access(というかJET)のJOIN句は異彩を放っていた印象があります。

私もその当時の慣れからJOIN句はあまり使わず外部結合がある時だけ使っていますが、今となってはJOIN句を使わない方が邪道だと思います。
よっしー
大ベテラン
会議室デビュー日: 2007/05/17
投稿数: 143
投稿日時: 2007-09-19 22:52
Fabulousさん

私もOracle8からSQLServerに移ったばかりのときは、WHERE句に書いていました。
外部結合は(*)で。

今はJOINを使っており、こちらの方がわかりやすく主流だと思っていたのでちょっとだけ気になりました。
未記入
会議室デビュー日: 2007/08/28
投稿数: 8
投稿日時: 2007-09-20 13:17
返答させていただいた、未記入です。

なんだか、どうでも良い話で盛り上がっているみたいですけど、
一応返信しておきますね。

昔から開発している感覚から申し上げると、SQL Server で、
敢えて JOIN 演算子を使用するのは、プロっぽくないからです。
=>MSDN 的には、JOIN 推奨っぽく感じ取れましたけど…今更?って感じです。
  そもそもマイクロソフトの製品では無かったし。。。

SQL Server は、基本的に SP (ストアードプロシージャ)ってイメージで。。。
…まっ、言ってしまえば、Fabulousさんの仰る通り、古いだけかもしれませんけど。

構文的に許されていなければ、仕方なく JOIN を使用します。

SQL 文の解りやすさを取るか、
DBサーバの特徴まで勉強して使用方法を分けるかの
単純な違いだけではないでしょうか?
のりちゃん
会議室デビュー日: 2007/09/19
投稿数: 15
投稿日時: 2007-09-25 11:15
返信がかなり遅くなって申し訳ございませんでした。
本件、無事に解決いたしました。
いろいろと勉強させていただきました。ありがとうございます。
1

スキルアップ/キャリアアップ(JOB@IT)