Pregunta

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.

¿Fue útil?

Solución

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:relativas 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.

Otros consejos

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

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top