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...
Atentas a sus comentarios...
1 respuesta
Respuesta de santiagomf
1
0
santiagomf
, Más de 35 años en la informática y más de 20 trabajando...
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.
- 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 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.
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.
- Compartir respuesta