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
Vea SQL Server 2008 - Usando Merge From SSIS . Implementé algo como esto, y fue muy fácil. Simplemente usando la página BOL Insertar, actualizar y borrar datos usando MERGE fue suficiente para ponerme en marcha.
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"
Le sugiero que eche un vistazo al blog de Mat Stephen sobre la creación de SQL Server.
SQL 2005 - UPSERT: en naturaleza pero no por nombre; ¡pero al fin!
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í.