¿Cómo puedo actualizar varios registros en una sola instrucción de este tipo con SQL ?:Actualizar varios registros en SQL
UPDATE records
SET name='abc' where id=3,
SET name='def' where id=1
¿Cómo puedo actualizar varios registros en una sola instrucción de este tipo con SQL ?:Actualizar varios registros en SQL
UPDATE records
SET name='abc' where id=3,
SET name='def' where id=1
Simplemente puede combinar una actualización con una declaración tal caso
UPDATE records
SET name =
CASE
WHEN id = 3 THEN 'abc'
WHEN id = 1 THEN 'def'
ELSE name
END
;WITH vals(id, name)
AS (SELECT 3,'abc'
UNION ALL
SELECT 1,'def')
UPDATE r
SET name = vals.name
FROM records r
JOIN vals
ON vals.id = r.id
Gracias, hecho mi trabajo desde esta consulta. –
Por tan sólo unos pocos registros, se puede utilizar:
update records
set name = case id
when 1 then 'def'
when 3 then 'abc'
end
where id in (1, 3)
un poco más flexible es crear un resultado que puede unirse a la actualización
update r
set name = x.name
from records r
inner join (
select id = 1, name = 'abc' union all
select 3, 'def' union all
select 4, 'qwe' union all
select 6, 'rty'
) x on x.id = r.id
¡Brillante! ¡Gracias! –
¿Por qué el voto a favor? Si no explica qué es lo que cree que está mal, no puede mejorar la respuesta. – Guffa
Esta debería ser la respuesta aceptada. –
estándar SQL: 2003 sintaxis (funciona en SQL Server 2008 en adelante):
MERGE INTO records
USING (
VALUES (1, 'def'),
(3, 'abc')
) AS T (id, name)
ON records.id = T.id
WHEN MATCHED THEN
UPDATE
SET name = T.name;
Tenga en cuenta que NAME
y RECORDS
son palabras reservadas de SQL.
Creo que debe tener un 'where' en eso, de lo contrario, hará una actualización en todos los registros en la tabla. – Guffa
@Guffa Tiene un punto válido y estoy de acuerdo con la cláusula 'where'. La desventaja de esto es que necesitamos asegurarnos de que las condiciones en 'case' y' where' sean las mismas. Claro, mi solución actualiza todas las filas, pero para las filas que no entran en estas condiciones, se actualizan de 'nombre' a' nombre', lo que obviamente no cambia nada –
En la mayoría de los casos, no cambia nada, pero imagine que hay un disparador en la actualización que registra todas las filas cambiadas en otra tabla ... – Guffa