2008-08-19 144 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 

所有的工作可以在一个查询完成

相关问题