sábado, abril 07, 2007

Dude!, donde quedo Merge?

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.: