Para quizas una de las instrucciones mas interesantes que SQL 2005 introducia en T-SQL era la instruccion Merge, la cual tambien es conocida como "Upsert". La funcionalidad de Merge permitia el mezclar los cambios de una tabla en otra existente, pudiendo generarse casos en donde el registro ya existia en la tabla destino, en ese caso solo se actualizaba el registro existente y cuando no existia, se insertaba el registro faltante todo con una instruccion.
En el libro "Introduccion Microsoft SQL 2005 for developers" se habla sobre esta instruccion, pero en la version final al parecer fue excluida, la pregunta clave es, porque?; de acuerdo con los ejemplos del libro mencionado la forma de escribirla era:
MERGE INTO MyTable
USING MyTempTable
ON MyTempTable.MatchingField1 = MyTable.MatchingField1
WHEN MATCHED THEN
UPDATE UpdateField1 = MyTempTable.UpdateField1
WHEN NOT MATCHED THEN
INSERT VALUES(MyTempTable.MatchingField1, MyTempTable.UpdateField1)
Sin esa instruccion la pieza de T-SQL que produce el mismo efecto es:
UPDATE m
SET UpdateField1 = t.UpdateField1
FROM MyTable m
INNER JOIN MyTempTable t
ON m.MatchingField1 = t.MatchingField1
INSERT INTO MyTable (MatchingField1, UpdateField1)
SELECT t.MatchingField1, t.UpdateField1
FROM MyTempTable t
LEFT JOIN MyTable m
ON m.MatchingField1 = t.MatchingField1
WHERE m.MatchingField1 IS NULL
A mi parecer era una instrccion muy util - y mas ahora que la estoy necesitando -, pero por alguna razon desconocida - no he encontrado referencia en Internet del porque ya no existe -, la instruccion desaparecio. Ahora si quiero usar esa misma instruccion en mi base de datos, solo me queda migrarme a Oracle, que la implemento desde la version 9i hace ya algunos años.
No hay comentarios.:
Publicar un comentario