SQL Server- Union de Tablas de distintas BD´s

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
1
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

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas