Estoy tratando de generar un informe de consulta de 2 bases de datos (Sybase) en ASP clásico.

He creado 2 cadenas de conexión:

connA para databaseA

connB para databaseB

Ambas bases de datos están presentes en el mismo servidor (no sé si esto es importante)

Consultas:

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

seguido por:

response.Write(rstsql) <br>
set rstSQL = CreateObject("ADODB.Recordset")<br>
rstSQL.Open q1, connA<br>
rstSQL.Open q2, connB

Cuando intento abrir esta página en un navegador, me sale mensaje de error:

Microsoft OLE DB Provider for ODBC Drivers error ‘80040e37’

[DataDirect][ODBC Sybase Wire Protocol driver][SQL Server]#temp no se encuentra. Especificar propietario.objectname o uso sp_help para comprobar si el objeto existe (sp_help pueden producir gran cantidad de salida).

Podría alguien por favor me ayude a entender cuál es el problema y ayudar a arreglarlo?

Gracias.

InformationsquelleAutor Pascal | 2008-08-19

3 Comentarios

  1. 4

    Con ambas consultas, parece que usted está tratando de insertar en #temp. #temp está situado en una de las bases de datos (para el bien de los argumentos, databaseA). Así que cuando intenta insertar en #temp de databaseB, informa de que no existe.

    Pruebe a cambiar de En #temp De a En databaseA.dbo.#temp De en ambas declaraciones.

    También, asegúrese de que la conexión de las cadenas de tener permisos en la otra DB, de lo contrario no funcionará.

    Actualización: relativo a la tabla temporal fuera del ámbito – si usted tiene una cadena de conexión que tiene permisos en ambas bases de datos, entonces usted podría utilizar esto para ambas consultas (mientras se mantiene la conexión activa). Al consultar la tabla en la otra DB, asegúrese de usar [DBName].[Propietario].[TableName] formato cuando se hace referencia a la tabla.

  2. 4

    su tabla temporal está fuera de alcance, es sólo «en vivo» durante la primera conexión y no estará disponible en la 2ª conexión
    Sólo mover todo en un solo bloque de código y ejecutarlo dentro de una conexión

  3. 2

    temp está fuera de alcance en la q2.

    Todo su trabajo se puede realizar en una consulta:

    
    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

Dejar respuesta

Please enter your comment!
Please enter your name here