PDA

Ver la Versión Completa : Actualizar el contenido de las primeras celdas UPDATE TOP


tiagor64
27-01-2005, 09:31:32
Hola foro:

Necesitaria q alguien me saque d un apuro, necesito actualizar el valor de los 15 primeros registros q saca una consulta, pero no se como hacerlo.
La consulta que funciona es esta:

SELECT TOP 15 REGISTRE.ORDEN_FABRICACION, REGISTRE.ACABADOS, REGISTRE.FECHA, REGISTRE.PRIORIDAD
FROM REGISTRE
WHERE (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD;

pero no se como hacer para que me modifique el valor del campo acabados de estos registros.

con la consulta:

update registre
set acabados = "0"
where (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD

entonces me actualiza el valor de todos los registros y solo necesitaria los 15 o 10 primeros.

Alguien puede ayudarme??
Gracias por adelantado.

Neftali [Germán.Estévez]
27-01-2005, 10:52:58
Si la tabla REGISTRE tiene "clave primaria" puedes utilizar un IN. Algo así (te lo pongo sin probar, así que ya dirás si me he dejado algo); Como mínimo te servirá para coger la idea...

(suponiendo por ejemplo que el campo ORDEN_FABRICACION fuera la primary key)


update registre
set acabados = "0"
where ORDEN_FABRICACION IN (
SELECT TOP 15 REGISTRE.ORDEN_FABRICACION
FROM REGISTRE
WHERE (((REGISTRE.ACABADOS) Is Null)))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD


Se trata de usar el SELECT..IN para seleccionar los 15 primeros y luego hacer el update sólo sobre esos.

NOTA: El ORDER BY para el Update no es necesario

tiagor64
27-01-2005, 12:37:06
Muchas, muchisimas gracias.

si que ha servido para pillar la idea, me has sacado de un buen atasco mental.

la sentencia me a qedado asi:

UPDATE registre SET acabados = "0"
WHERE ORDEN_FABRICACION IN
(SELECT TOP 1 REGISTRE.ORDEN_FABRICACION FROM REGISTRE
WHERE (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD);

Lo que me pasaba era q la tenia asi y me devolvia demasiados campos, y no entendia el problema

update registre
set acabados = "0"
where
( SELECT TOP 15 * FROM REGISTRE
WHERE (((REGISTRE.ACABADOS) Is Null))
ORDER BY REGISTRE.FECHA, REGISTRE.PRIORIDAD)

muchas gracias de nuevo.