Lilypie Primer PicLilypie Primer Ticker

lunes, 18 de febrero de 2008

Si existe: actualizar; si no: insertar

Comparto con ustedes un tip sobre BD que encontré aqui

A menudo necesitamos actualizar un registro existente en una tabla o insertarlo en caso de no existir. La forma mas simple de hacerlo es:

IF EXISTS(SELECT * FROM MiTabla WHERE MiLlave = 10) THEN
UPDATE MiTabla SET MiCampo = 100 WHERE MiLlave = 10
ELSE
INSERT INTO MiTabla (MiLlave, MiCampo) VALUES (10,100)

Este script funciona, sin embargo no es la forma más óptima de realizar esta operación, pues el motor de la BD realiza dos búsquedas en la tabla. Una para el SELECT y otra para el Update.

Una mejor forma de hacer esta operación es:

UPDATE MiTabla SET MiCampo = 100 WHERE MiLlave = 10
IF @@ROWCOUNT = 0 THEN
INSERT INTO MiTabla (MiLlave, MiCampo) VALUES (10,100)

Asi le ahorramos un poco de trabajo a nuestro servidor.

Saludos

3 comentarios:

Anónimo dijo...

Excelente inf


Gracias

J. Marcos Troncoso dijo...

Gracias a tí por visitar el blog y dejar tu comentario.

Saludos

Anónimo dijo...

todo bien pero en sql no me funciona a no ser que borre el "THEN", sin eso funciona perfecto.