4

従来の 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 ワイヤ プロトコル ドライバー][SQL Server]#temp が見つかりません。owner.objectname を指定するか、sp_help を使用して、オブジェクトが存在するかどうかを確認します (sp_help は大量の出力を生成する場合があります)。

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

ありがとう。

4

3 に答える 3

4

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

于 2008-08-19T15:58:06.463 に答える
4

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

両方のステートメントで、 Into #temp FromからInto databaseA.dbo.#temp Fromに変更してみてください。

また、接続文字列が他の DB に対するアクセス許可を持っていることを確認してください。そうしないと、これは機能しません。

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

于 2008-08-19T15:59:47.833 に答える
2

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
于 2008-08-19T16:03:52.160 に答える