Te presento mi nuevo sitio web: "El Futuro de los Datos"

Aunque SQL Server Si!, seguirá activo, iré bajando la frecuencia de publicación.
Si quieres conocer todas las novedades que vaya publicando, te recomiendo que lo visites y te suscribas. Tengo un regalito para mi audiencia:

Tu primer Dashboard en "piloto automático" listo en 30 minutos
Sólo para suscriptores.
.

14 oct. 2011

Sincronizando tablas con Integration Services–Buenas Practicas

La sincronización de tablas entre dos servidores es un tema muy tratado, y con cierta frecuencia aparecen preguntas sobre él en los foros de SQL Server.

Por su puesto que esta situación tiene varias soluciones. De ellas, una de las que recomiendo es la propuesta por mi compañero y amigo Miguel Egea en su blog (www.portalsql.com), donde ha escrito un excelente artículo titulado

Sincronizando tablas con SQL Server Integration Services

En él se muestran diferentes técnicas que evitan tener que leer del origen más de lo necesario, y sobre todo no tener que sobreescribir algo que no ha cambiado, lo que tiene enormes beneficios.

Además nos muestra su maestría con el uso de Transact SQL mostrandonos una serie de scripts con los que automatiza la creación de cierto código tedioso de escribir en SSIS. Te muestro un ejemplo publicado en el post para que veas el gran potencial que esto puede tener:

SELECT COLUMN_NAME +' as ORIGEN_' + COLUMN_NAME + ', ' from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='DimCustomer'


Una forma original de generar la instrucción SELECT a incluir en SSIS, tan sólo tendrás que cambiar el nombre de la tabla en el código anterior para obtener el resultado de la tabla que desees:



SELECT CustomerKey as ORIGEN_CustomerKey, GeographyKey as ORIGEN_GeographyKey, AddressLine1 as ORIGEN_AddressLine1, …, CommuteDistance as ORIGEN_CommuteDistance FROM dbo.DimCustomer


Si quieres conocer más detalles de el por qué de esa SELECT y esos alias creados para cada columna, en el post tienes una explicación detallada :)

4 comentarios:

Alonzo dijo...

Que tal Salvador, he seguido los pasos que menciona Miguel se ha ejecutado sin error pero no me ha insertado los registros nuevos en la tabla destino, ¿que puede ser? de antemano gracias por la ayuda.

Salvador Ramos dijo...

Hola,

Pues la verdad que habría que revisar tu paquete, se me ocurren dos sitios donde puede estar el problema, uno es que en el merge join tengas un inner join y lugar de un full join y otro algun error en el conditional split.

Es cuestion de que pongas Data viewers, revises lo que has hecho lo entiendas y lo soluciones. Desde aquí poco más puedo hacer :(

Alonzo dijo...

estoy utilizando full join, lo que vi es que mi campo key no acepta null y en la condicion de nuevos registros utiliza ISNULL, que otra condicion pudiera utilizar en el split, gracias por contestar.

Salvador Ramos dijo...

Full join devuelve Null para las filas no coincidentes enter ambas tablas, de ahí que en el conditional split pregunte por ese Null.

El ejercicio que propone Miguel es sencillo y está explicado con detalle. A raiz de la pregunta que has hecho, creo que lo que necesitas es una mayor formación en el producto y en SQL para entender lo que se está haciendo, y eso no lo podemos solucionar a través de los comentarios de un blog.
Siento no serte de mayor ayuda.

Google