Me pregunto si esto es posible. Quiero actualizar la columna x si una condición es verdadera; de lo contrario, la columna y se actualizaría
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
He buscado por todas partes, he probado algunas cosas y no he podido encontrar una solución. Creo que no es posible, pero pensé en preguntar aquí y ver si alguien lo ha hecho antes. Gracias por adelantado.
sql
sql-update
case
pqsk
fuente
fuente
Respuestas:
No puede usar una condición para cambiar la estructura de su consulta, solo los datos involucrados. Podrías hacer esto:
Esto es semánticamente igual, pero tenga en cuenta que ambas columnas siempre se actualizarán . Esto probablemente no le cause ningún problema, pero si tiene un volumen transaccional alto, esto podría causar problemas de concurrencia.
La única forma de hacer específicamente lo que está pidiendo es utilizar SQL dinámico. Sin embargo, esto es algo de lo que le animo a que se mantenga alejado. Es casi seguro que la solución anterior será suficiente para lo que busca.
fuente
fuente
23
segundos antes de que la publicara. ¡Soy un copista rápido!* min ago
, le mostrará la hora exacta en que se publicó.Quiero cambiar o actualizar mi ContactNo a 8018070999 donde hay 8018070777 usando la declaración de caso
fuente
Sé que esta es una pregunta muy antigua, pero funcionó para mí:
Saludos
fuente
Sé que esta es una pregunta muy antigua y el problema está marcado como solucionado. Sin embargo, si alguien con un caso como el mío donde la tabla tiene un disparador para el registro de datos en eventos de actualización, esto causará problemas. Ambas columnas recibirán la actualización y el registro hará entradas inútiles. La forma en que lo hice
Ahora bien, esto tiene otro beneficio de que no tiene escrituras innecesarias en la mesa como las soluciones anteriores.
fuente
Creo que puede omitir la actualización de las columnas "no deseadas" ajustando las otras respuestas de la siguiente manera:
update table set columnx = (case when condition1 then 25 end), columny = (case when condition2 then 25 end)
Según tengo entendido, esto se actualizará solo cuando se cumpla la condición.
Después de leer todos los comentarios, este es el más eficiente:
Update table set ColumnX = 25 where Condition1 Update table set ColumnY = 25 where Condition1
Tabla de muestra:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
Datos de muestra:
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (1, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (2, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 1, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 2, null)
ahora supongo que puede escribir un condicional que maneje valores nulos. Para mi ejemplo, supongo que ha escrito un condicional que se evalúa como Verdadero, Falso o Nulo. Si necesita ayuda con esto, hágamelo saber y haré todo lo posible.
Ahora, al ejecutar estas dos líneas de código, de hecho cambia X a 25 si y solo si ColConditional es True (1) e Y a 25 si y solo si ColConditional es False (0)
Update tblTest set ColX = 25 where ColConditional = 1 Update tblTest set ColY = 25 where ColConditional = 0
PD: El caso nulo nunca se mencionó en la pregunta original ni en ninguna actualización de la pregunta, pero como puede ver, esta respuesta muy simple los maneja de todos modos.
fuente