Necesito una query de ejemplo que me permita unir dos tablas de las mismas características pero que se encuentran en bases de datos distintas y que el resultado de esta me las arroje en una tabla temporal... Atentas a sus comentarios...
1 respuesta
Respuesta de santiagomf
1
1
santiagomf, Más de 35 años en la informática y más de 20 trabajando con...
Por lo que comentas tienes 2 tablas en dos bases de datos distintas. Se me ocurren 2 formas de hacerlo: - Crear una nueva base de datos en Access donde adjuntes las tablas vía ODBC y trabajes sobre esta base. - A través de programa realices los accesos necesarios para simular la union de las dos tablas. La primera opción es sencilla de realizar a mano y algo más complicada para hacerla por programa, pero sería la única forma de realizar una consulta usando ambas tablas. Sobre la segunda opción, sería la más correcta a nivel de programación pero también la más complicada. Habría que saber algo de la estructura de las tablas y el gestor en que están (Access, Oracle, Sql Server, DB2, etc...) para ajustar un poco el código. Si me comentas como son las tablas y en qué gestor están puedo ponerte un ejemplo de código para hacer una simulación de un join. Respecto a la tabla de salida, también sería necesario saber en qué gestor va a estar para abrir tantas conexiones como gestores haya.
Si creo que las dos opciones me sirven.. pero prefiero la segunda opción y realizar la query por SQL Server... Te aclaro más la situación... Tengo unas Base de datos en Sql Server 2000 donde cada base de datos tiene una tabla con la misma estructura, lo único diferente es el numero de registros... Necesito unir las dos bases de datos a través de una tabla temporal con el fin de consultar la totalidad de parámetros que existen en esas tablas... Ejemplo... Existen dos bases de datos en un mismo servidor, la base de datos Cliente, que tiene una tabla llamada: Configuraciones y la base de datos de Usuarios tiene la misma tabla llamada: Configuraciones... la idea es determinar la totalidad de los parámetros existente en las tablas : Configuraciones, necesito una query que me una estas dos tablas idénticas pero con distintos numero de registro y me las pase a una tablas temporal para poder trabajar con ellas haciendo consultas. Atenta a tus comentarios... Carol
Te envío un posible código para crear una nueva tabla en la primera base de datos y añadir a ella el contenido de la tabla en la segunda base de datos. OJO: las dos tablas tienen que tener exactamente la misma estructura. De lo contrario podría dar errores el código. Option Explicit Sub unirDosTablasDistintasBD() Dim cn1 As New ADODB.Connection Dim cn2 As New ADODB.Connection Dim rs1 As New ADODB.Recordset Dim rs2 As New ADODB.Recordset Dim txtSql As String Dim i As Integer ' Supongamos que la tabla 'unionConfiguraciones' va a estar en la primera ' base de datos (la que abriremos con 'cn1') ' Abrimos la primera conexión sobre la primera base de datos cn1. Open "Cliente", "<usuario>", " <password>" ' Copiamos la tabla de configuraciones sobre la tabla de unión. ' Añadiremos un nuevo campo con la base de datos origen del registro para ' saber en cada momento de dónde ha salido ' OJO: Pongo 'Cliente ' con un blanco al final para que me cree el campo con 8 ' caracteres que serán los que necesite después para la palabra 'Usuarios' txtSql = "select 'Cliente ' as bdOrigen,* into unionConfiguraciones from configuraciones" On Error Resume Next cn1.Execute "drop table unionConfiguraciones" On Error GoTo 0 Cn1. Execute txtSql ' Abrimos en cn1 la nueva tabla Rs1. Open "unionConfiguraciones", cn1, adOpenDynamic, adLockOptimistic ' Abrimos la segunda base de datos Cn2. Open "Usuarios", "<usuario>", " <password>" ' Y abrimos una consulta de los datos añadiendo el nombre de la tabla txtSql = "select 'Usuarios' as bdOrigen,* from configuraciones" Rs2. Open txtSql, cn2 ' Ahora leeremos los datos de la tabla 2 y los iremos insertando en la 1 If Not rs2.EOF Then rs2.MoveFirst Do While Not rs2.EOF rs1.AddNew For i = 0 To rs2.Fields.Count - 1 ' Copiamos todos los campos "no nulos" If Not IsNull(rs2.Fields(i).Value) Then rs1.Fields(i).Value = rs2.Fields(i).Value Next i rs1.Update rs2.MoveNext Loop ' Cerramos todo Rs2. Close Rs1. Close Cn2. Close Cn1. Close End Sub Espero haber entendido bien lo que quieres, haber sido claro en las explicaciones y que te funcione.
Muchas gracias..! Tus explicaciones fueron muy claras y precisas, me funciono muy bien el código y era lo que yo andaba buscando... de verdad gracias. Saludos, Carol