異なるデータベースサーバー上の 2 つのテーブルに対するクエリを選択します
-
08-06-2019 - |
質問
クラシック 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