異なるデータベースサーバー上の 2 つのテーブルに対するクエリを選択します

StackOverflow https://stackoverflow.com/questions/16447

質問

クラシック ASP で 2 つのデータベース (Sybase) にクエリを実行してレポートを生成しようとしています。

2 つの接続文字列を作成しました。

データベースAのconnA
データベースBのconnB

両方のデータベースが同じサーバー上に存在します (これが重要かどうかはわかりません)

クエリ:

q1 = SELECT column1 INTO #temp FROM databaseA..table1 WHERE xyz="A"

q2 = SELECT columnA,columnB,...,columnZ FROM table2 a #temp b WHERE b.column1=a.columnB

に続く:

response.Write(rstsql) <br>
set rstSQL = CreateObject("ADODB.Recordset")<br>
rstSQL.Open q1, connA<br>
rstSQL.Open q2, connB

ブラウザでこのページを開こうとすると、次のエラー メッセージが表示されます。

Microsoft OLE DB Provider for ODBC Drivers エラー '80040e37'

[DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]#temp が見つかりません。owner.objectname を指定するか、sp_help を使用してオブジェクトが存在するかどうかを確認します (sp_help は大量の出力を生成する場合があります)。

問題が何であるかを理解し、解決するのを手伝ってくれる人はいますか?

ありがとう。

役に立ちましたか?

解決

どちらのクエリでも、#temp に挿入しようとしているように見えます。#temp はデータベースの 1 つ (引数として、databaseA) にあります。そのため、databaseB から #temp に挿入しようとすると、それが存在しないと報告されます。

から変更してみてください の中へ #温度 からの中へ データベースA.dbo.#temp から どちらのステートメントでも。

また、接続文字列に他の DB に対する権限があることを確認してください。そうでない場合、これは機能しません。

アップデート:スコープ外になる一時テーブルに関連して - 両方のデータベースに対するアクセス許可を持つ 1 つの接続文字列がある場合、これを両方のクエリに使用できます (接続を維持したまま)。他の DB 内のテーブルをクエリする場合、テーブルを参照するときは必ず [DBName].[Owner].[TableName] 形式を使用してください。

他のヒント

温度テーブルは範囲外であり、最初の接続中に「生きている」だけで、2番目の接続では利用できません。すべてをコードの1つのブロックに移動し、1つの接続内で実行するだけです

temp は q2 の範囲外です。

すべての作業は 1 つのクエリで実行できます。


SELECT a.columnA, a.columnB,..., a.columnZ
FROM table2 a
INNER JOIN (SELECT databaseA..table1.column1 
            FROM databaseA..table1
            WHERE databaseA..table1.xyz = 'A') b
  ON a.columnB = b.column1
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top