在不同数据库服务器上的2个表上选择"查询"

时间:2020-03-05 18:40:47  来源:igfitidea点击:

我试图通过在经典ASP中查询2个数据库(Sybase)来生成报告。

我创建了2个连接字符串:

connA for databaseA

  connB for 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) 

  set rstSQL = CreateObject("ADODB.Recordset")

  rstSQL.Open q1, connA

  rstSQL.Open q2, connB

当我尝试在浏览器中打开此页面时,出现错误消息:

Microsoft OLE DB Provider for ODBC Drivers error '80040e37'
  
  [DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]#temp not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).

谁能帮助我了解问题所在并帮助我解决问题?

谢谢。

解决方案

回答

临时表超出范围,它仅在第一个连接期间处于"活动"状态,而在第二个连接中将不可用
只需将所有代码移动到一个代码块中,并在一个连接内执行

回答

对于这两个查询,我们似乎都想插入#temp。 #temp位于其中一个数据库上(出于参数考虑,databaseA)。因此,当我们尝试从databaseB插入#temp时,它报告它不存在。

尝试在两个语句中将其从Into #temp From更改为Into databaseA.dbo。#temp From。

另外,请确保连接字符串对另一个数据库具有权限,否则将无法使用。

更新:与临时表超出范围有关,如果我们有一个对两个数据库都具有权限的连接字符串,则可以将其用于两个查询(同时保持连接处于活动状态)。在另一个数据库中查询表时,请确保在引用表时使用[DBName]。[Owner]。[TableName]格式。

回答

所有工作都可以在一个查询中完成:

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