2008-08-19 143 views
4

我試圖通過查詢經典ASP中的2個數據庫(Sybase)來生成報告。在不同數據庫服務器上的2個表上選擇查詢

我已經建立2個連接字符串:

connA爲databaseA
connB爲databaseB

兩個數據庫存在於同一臺服務器上(不知道是不是這個問題)

查詢:

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)
組rstSQL =的CreateObject( 「ADODB.Recordset」)
rstSQL.Open Q1,connA
rstSQL.Open Q2,connB

當我嘗試在瀏覽器中打開這個頁面,我得到錯誤信息:

Microsoft OLE DB提供程序的ODBC驅動程序錯誤 '80040e37'

[DataDirect的] [ODBC的Sybase線協議驅動程序] [SQL Server]找不到#temp。指定owner.objectname或使用sp_help檢查對象是否存在(sp_help可能會產生大量輸出)。

任何人都可以請幫我理解問題是什麼,並幫助我解決它?

謝謝。

回答

4

對於這兩個查詢,它看起來像你試圖插入#temp。 #temp位於其中一個數據庫上(爲了參數,databaseA)。所以當你嘗試從數據庫B插入#temp時,它會報告它不存在。

嘗試在這兩個語句從改變成#TEMP進入databaseA.dbo。#臨時

此外,請確保連接字符串對其他數據庫有權限,否則這將無法正常工作。

更新:與臨時表超出範圍相關 - 如果您有一個連接字符串對兩個數據庫都有權限,那麼您可以將它用於這兩個查詢(同時保持連接處於活動狀態)。查詢其他數據庫中的表時,請務必在引用表時使用[DBName]。[Owner]。[TableName]格式。

4

你的臨時表超出範圍,它是第一個連接中只有「活着」,並在第二個連接 將無法​​使用只需推動這一切在一個代碼塊並執行一個連接如內部

2

temp在q2範圍之外。


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 

所有的工作可以在一個查詢完成

相關問題