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

时间:2008-08-19 15:53:19

标签: sql asp-classic vbscript sybase

我试图通过在经典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) <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驱动程序] [SQL Server]找不到#temp。指定owner.objectname或使用sp_help检查对象是否存在(sp_help可能会产生大量输出)。

有谁可以请帮助我了解问题所在并帮助我解决问题?

感谢。

3 个答案:

答案 0 :(得分:4)

你的临时表超出范围,它在第一次连接时只是“活着”,在第二次连接时不可用 只需在一个代码块中移动所有代码并在一个连接内执行

答案 1 :(得分:4)

对于这两个查询,看起来您正试图插入#temp。 #temp位于其中一个数据库上(为了参数,databaseA)。因此,当您尝试从databaseB插入#temp时,它会报告它不存在。

尝试将其从转换为 #temp 更改为进入 databaseA.dbo。#temp 来自声明。

另外,请确保连接字符串对其他数据库具有权限,否则无效。

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

答案 2 :(得分: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