miércoles, 7 de mayo de 2014

ON DUPLICATE KEY UPDATE, EQUIVALENTE EN ACCESS SQL


La sentencia On duplicate Key Update (MySql), permite insertar o actualizar registros, dependiendo de si existe o no la clave en la tabla. Me parece algo sumamente útil. Veamos como implementar algo parecido en Access, y para ello nada más elocuente que un ejemplo :

Supongamos que tenemos una tabla donde anotamos el estoc de productos :

Create Table Stocs (IdArticulo Long Primary Key, Cantidad Single);

Cuando recibimos un nuevo pedido, necesitamos anotar la cantidad del mismo en la tabla. Pero para no tener que preocuparnos en buscar si IdArticulo existe, en cuyo caso empleariamos una sentencia Insert, o en el supuesto contrario usariamos Update, podemos utilizar una sql como esta :

Update Stocs
            Right Join
            (Select Top 1 [IdArticulo ?] As IdArticulo From MSysObjects) As T
            On Stocs.IdArticulo = T.IdArticulo
Set Stocs.IdArticulo = T.IdArticulo, Stocs.Cantidad = Nz(Stocs.Cantidad,0) + 1;

... utilizamos una tabla derivada con orígen en MSysObjects para obtener un único registro con el valor que definamos en el parámetro [IdArticulo ?] . Al realizar un Update, teniendo las dos tablas relacionadas con Right Join, si en la tabla de la izquierda no hay registro coincidente con la de la derecha, el efecto práctico será la inserción de un nuevo registro, mientras que en caso contrario, la sentencia Update actuará de la forma esperada. Para modificar o insertar valores en el resto de campos, podemos utilizar valores o expresiones según nos convengan en la clausula Set. En este caso y a título de ejemplo, incrementaremos en una unidad el valor del campo Cantidad (si el registro todavia no existe el valor asignado será 1).

Ramon Poch. Terrassa a 07/05/2014.