【问题标题】:Select Query on 2 tables, on different database servers在不同的数据库服务器上选择 2 个表上的查询
【发布时间】:2010-09-06 04:44:48
【问题描述】:

我正在尝试通过在经典 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

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

用于 ODBC 驱动程序的 Microsoft OLE DB 提供程序错误“80040e37”

[DataDirect][ODBC Sybase 有线协议驱动程序][SQL Server]#temp 未找到。指定 owner.objectname 或使用 sp_help 检查对象是否存在(sp_help 可能会产生大量输出)。

谁能帮我理解问题是什么并帮我解决它?

谢谢。

【问题讨论】:

    标签: sql asp-classic vbscript sybase


    【解决方案1】:

    您的临时表超出范围,它仅在第一次连接期间“活动”,在第二次连接中不可用 只需将所有内容移动到一个代码块中并在一个连接中执行它

    【讨论】:

      【解决方案2】:

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

      尝试在两者中将其从 Into #temp From 更改为 Into databaseA.dbo.#temp From陈述。

      另外,请确保连接字符串在其他数据库上具有权限,否则这将不起作用。

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

      【讨论】:

        【解决方案3】:

        第二季度的温度超出范围。

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

        
        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
        

        【讨论】:

          猜你喜欢
          • 2011-09-15
          • 2017-11-18
          • 1970-01-01
          • 1970-01-01
          • 2016-02-24
          • 2014-01-03
          • 2021-01-29
          • 2012-04-11
          • 1970-01-01
          相关资源
          最近更新 更多