MERGE

10/02/2009 - 18:58 por José Antonio Muñoz | Informe spam
Hola al grupo,

necesito realizar un procedimiento que actualiza un conjunto de tablas a
partir de una base de datos externa, He observado que la función MERGE
realiza muy bien el proceso pero ¿como puedo actualizar sin conocer los
campos de las tablas?, es decir, actualizar automáticamente todos los campos
que coinciden en las tablas origen y destino. Y también ¿como puedo
actualizar aquellos campos que son de un tipo determinado, por ejemplo,
"integer" y tranformar los datos en otro tipo según la tabla destino,
"boolean"?.

Gracias de antemano y saludos,
José Antonio Muñoz.

Preguntas similare

Leer las respuestas

#11 José Antonio Muñoz
13/02/2009 - 12:19 | Informe spam
¡¡¡Ha funcionado!!!. Ahora tengo que ponerme a construir el script
correspondiente utilizando Connection.GetSchema

Muchas gracias Jesús por tu colaboración. Saludos,
José Antonio Muñoz

"Jesús" escribió en el mensaje de
noticias news:
Lo de las fechas y la contraseña lo puedes solucionar usando el proveedor
oledb para ODBC. Aquí tienes un ejemplo

SELECT *
FROM OPENROWSET(
N'MSDASQL',
N'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\prueba.mdb;Pwd=la
contraseña',
N'
SELECT
T.idTabla1,
T.Campo1,
CDate(IIF(T.CampoFecha < #1/1/1753#, #1/1/1753#, T.CampoFecha)) AS
CampoFecha,
T.Campo3
FROM
tabla1 T'
)

Lo de generar la instrucción update o merge, puedes basarte en información
de equema: Connection.GetSchema(..)


Saludos:

Jesús

"José Antonio Muñoz" escribió en el mensaje de
noticias news:udJA$
La base de datos externa esta en formato Microsoft Access y estoy
utilizando OLE db provider para acceder a ella. Los campos se llaman
igual en una base de datos y en otra y no tienen el mismo número de
campos, es decir, existen campos en la base origen que no existen en
destino y viceversa. En cuanto a la clave primaria es la misma en ambas
bases de datos. Los tipos de campos en campos que son equivalentes son
los mismos. Y por último es necesario actualizar todas las tablas.

He probado hacerlo con la instrucción MERGE y con solo una tabla y en el
USING he utilizado la cláusula OpenDataSource con el proveedor
"Microsoft.Jet.OLEDB.4.0", pero me da un error al transformar un campo
que contiene una fecha anterior al 01/01/1753, supuestamente incorrecta,
y la instrucción se aborta. Puedo corregir la fecha en la base origen
pero me surge la duda ¿y si hay otro dato incorrecto? ¿como puedo
controlar este error sin tener que corregir la base de datos de origen?.
He probando con la instrucción OpenRowSet para convertir la fecha origen
en otro tipo de campo en la consulta de origen pero la base de datos
tiene una clave y no puedo utilizar "Jet OleDb: Database password=xxx" en
la cadena de conexión. Estoy atascado. ¡necesito ayuda!

saludos,
José Antonio Muñoz

"Jesús" escribió en el mensaje
news:
Yo lo que haría sería un script generador de script. El script generado
sería un script que creara los 50 procedimientos almacenados para las 50
tablas.

Podríamos ayudarte a crear ese script generador de script, pero no das
la suficiente información para poder hacerlo. Necesitaría más detalles.

¿La base de datos externa está en el mismo servidor? ¿Es una base de
datos de SQL Server? ¿Cómo se llama la base de datos externa?
¿Los campos se llaman igual en la tabla de origen y destino? ¿Tienen el
mismo número de campos?
¿La tabla de origen y la de destino tienen la misma clave primaria?
¿Qué hacer cuando hay diferencia de tipos entre los campos coincidentes?
¿Qué pasa cuando los tipos no son convertibles?
¿Qué tablas son las que hay que actualizar?

Yo necesitaría toda esa información y más para poder hacer el script.



"José Antonio Muñoz" escribió en el mensaje
de noticias news:%
Hola al grupo,

necesito realizar un procedimiento que actualiza un conjunto de tablas
a partir de una base de datos externa, He observado que la función
MERGE realiza muy bien el proceso pero ¿como puedo actualizar sin
conocer los campos de las tablas?, es decir, actualizar automáticamente
todos los campos que coinciden en las tablas origen y destino. Y
también ¿como puedo actualizar aquellos campos que son de un tipo
determinado, por ejemplo, "integer" y tranformar los datos en otro tipo
según la tabla destino, "boolean"?.

Gracias de antemano y saludos,
José Antonio Muñoz.











email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida