sql - unir - Seleccione Query en 2 tablas, en diferentes servidores de bases de datos
unir dos tablas sql (3)
la temperatura está fuera del alcance en q2.
Todo su trabajo se puede hacer 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
Intento generar un informe consultando 2 bases de datos (Sybase) en ASP clásico.
He creado 2 cadenas de conexión:
connA para la base de datosA
connB para databaseB
Ambas bases de datos están presentes en el mismo servidor (no sé si esto importa)
Consultas:
q1 = SELECCIONAR columna1 EN #temp FROM databaseA..table1 WHERE xyz = "A"
q2 = SELECCIONE la columnaA, columnaB, ..., columnaZ FROM table2 a #temp b DONDE b.column1 = a.columnB
seguido por:
response.Write (rstsql)
establecer rstSQL = CreateObject ("ADODB.Recordset")
rstSQL.Open q1, connA
rstSQL.Open q2, connB
Cuando trato de abrir esta página en un navegador, recibo un mensaje de error:
Proveedor OLE DB de Microsoft para errores de controladores ODBC ''80040e37''
[DataDirect] [Controlador de ODBC Sybase Wire Protocol] [SQL Server] #temp no encontrado. Especifique owner.objectname o use sp_help para verificar si el objeto existe (sp_help puede generar muchos resultados).
¿Alguien podría ayudarme a entender cuál es el problema y ayudarme a solucionarlo?
Gracias.
Con ambas consultas, parece que estás intentando insertar en #temp. #temp se encuentra en una de las bases de datos (por los argumentos, base de datos A). Por lo tanto, cuando intenta insertar en #temp desde databaseB, informa que no existe.
Intente cambiarlo de Into #temp From a Into databaseA.dbo. # Temp De ambas sentencias.
Además, asegúrese de que las cadenas de conexión tengan permisos en la otra base de datos, de lo contrario, esto no funcionará.
Actualización: en relación con la tabla temporal que está fuera del alcance: si tiene una cadena de conexión que tiene permisos en ambas bases de datos, puede usarla para ambas consultas (manteniendo la conexión activa). Mientras consulta la tabla en el otro DB, asegúrese de usar el formato [DBName]. [Owner]. [TableName] cuando consulte la tabla.
su tabla temporal está fuera de alcance, solo está ''viva'' durante la primera conexión y no estará disponible en la segunda conexión Simplemente mueva todo en un bloque de código y ejecútelo dentro de una conexión