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

#6 José Antonio Muñoz
11/02/2009 - 08:41 | Informe spam
¿Que es el SSIS? ¿Lo trae incorporado SQL express 2008'

saludos,
José Antonio Muñoz

"Jose Mariano Alvarez"
escribió en el
mensaje de noticias
news:
Por que no usas el SSIS que al seleccionar los distintos task te ayuda y
no tienes que escribir tanto.
.

En el caso del MERGE no es muy dificir modifical o hacer con un generador
de codigo las sentencias necesarias si las columnas en la tabla externa e
interna tienen el mismo nombre y por supuesto hay una PK.



Saludos


Ing. Jose Mariano Alvarez
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase.
Por favor tratar de indicar la versión de SQL y Service Pack. La inclusión
de (CREATE, INSERTS, etc.) para poder reproducir el problema también
ayuda.










"José Antonio Muñoz" wrote in message
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.

Respuesta Responder a este mensaje
#7 Carlos Sacristan
11/02/2009 - 12:35 | Informe spam
SSIS es Integration Services, los antiguos DTS de la versión 2000. Es una
herramienta ETL, pero no viene con la versión Express de SQL Server


Un saludo
-
www.navento.com
Servicios de Localización GPS


"José Antonio Muñoz" wrote:

¿Que es el SSIS? ¿Lo trae incorporado SQL express 2008'

saludos,
José Antonio Muñoz

"Jose Mariano Alvarez"
escribió en el
mensaje de noticias
news:
> Por que no usas el SSIS que al seleccionar los distintos task te ayuda y
> no tienes que escribir tanto.
> .
>
> En el caso del MERGE no es muy dificir modifical o hacer con un generador
> de codigo las sentencias necesarias si las columnas en la tabla externa e
> interna tienen el mismo nombre y por supuesto hay una PK.
>
>
>
> Saludos
>
>
> Ing. Jose Mariano Alvarez
> SQLTotal Consulting
>
> (Cambia los ceros por O y saca lo que sobra)
>
> Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase.
> Por favor tratar de indicar la versión de SQL y Service Pack. La inclusión
> de (CREATE, INSERTS, etc.) para poder reproducir el problema también
> ayuda.
>
>
>
>
>
>
>
>
>
>
> "José Antonio Muñoz" wrote in message
> 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.
>>


Respuesta Responder a este mensaje
#8 Jesús
12/02/2009 - 17:59 | Informe spam
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.

Respuesta Responder a este mensaje
#9 José Antonio Muñoz
12/02/2009 - 18:24 | Informe spam
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.




Respuesta Responder a este mensaje
#10 Jesús
12/02/2009 - 20:40 | Informe spam
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.








Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida