with update services example destination delete and sql-server sql-server-2008 ssis upsert

sql-server - services - update in ssis



UPSERT en SSIS (6)

Por lo general, prefiero dejar que el motor de SSIS administre la fusión delta. Solo se insertan y cambian los elementos nuevos se actualizan. Si su servidor de destino no tiene suficientes recursos para administrar consultas pesadas, este método le permitirá usar los recursos de su servidor SSIS.

Estoy escribiendo un paquete SSIS para ejecutar en SQL Server 2008. ¿Cómo se hace una UPSERT en SSIS?

IF KEY NOT EXISTS INSERT ELSE IF DATA CHANGED UPDATE ENDIF ENDIF



Otra forma de crear un upsert en sql (si tiene tablas de etapas o etapas):

--Insert Portion INSERT INTO FinalTable ( Colums ) SELECT T.TempColumns FROM TempTable T WHERE ( SELECT ''Bam'' FROM FinalTable F WHERE F.Key(s) = T.Key(s) ) IS NULL --Update Portion UPDATE FinalTable SET NonKeyColumn(s) = T.TempNonKeyColumn(s) FROM TempTable T WHERE FinalTable.Key(s) = T.Key(s) AND CHECKSUM(FinalTable.NonKeyColumn(s)) <> CHECKSUM(T.NonKeyColumn(s))


Usaría la tarea de "dimensión de cambio lento"



Los comandos básicos del Lenguaje de Manipulación de Datos (DML) que han estado en uso a lo largo de los años son Actualizar, Insertar y Eliminar. Hacen exactamente lo que esperaban: el inserto agrega nuevos registros, la Actualización modifica los registros existentes y Eliminar elimina los registros.

La sentencia UPSERT modifica los registros existentes, si no hay registros, INSERTA registros nuevos. La funcionalidad de la declaración UPSERT puede ser alcanzada por dos nuevos conjuntos de operadores TSQL. Estos son los dos nuevos

EXCEPT INTERSECT

Excepto:-

Devuelve cualquier valor distinto de la consulta a la izquierda del operando EXCEPT que tampoco se devuelve desde la consulta correcta

Intersecar: - Devuelve cualquier valor distinto que sea devuelto por la consulta en los lados izquierdo y derecho del operando INTERSECT.

Ejemplo: digamos que tenemos dos tablas Tabla 1 y Tabla 2

Table_1 column name(Number, datatype int) ---------- 1 2 3 4 5 Table_2 column name(Number, datatype int) ---------- 1 2 5 SELECT * FROM TABLE_1 EXCEPT SELECT * FROM TABLE_2

devolverá 3,4 ya que está presente en Table_1 no en Table_2

SELECT * FROM TABLE_1 INTERSECT SELECT * FROM TABLE_2

devolverá 1,2,5 ya que están presentes en las tablas Table_1 y Table_2.

Todos los dolores de las combinaciones complejas ahora se eliminan :-)

Para usar esta funcionalidad en SSIS, todo lo que necesita hacer es agregar una tarea "Ejecutar SQL" y colocar el código allí.