Consulta de selección en 2 tablas, en diferentes servidores de bases de datos
-
08-06-2019 - |
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.
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