Creo que de alguna manera estoy cerca para que funcione, pero por alguna razón sigo teniendo errores.
Tengo la siguiente consulta de ACTUALIZACIÓN:
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' THEN @Accessories
WHEN 'Description' THEN @Description
WHEN 'Specification' THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
Los parámetros son completados por diferentes usuarios. El problema al que me enfrento ahora es que, incluso cuando desea actualizar un solo campo, debe completar con los datos antiguos los otros parámetros. Por lo tanto, me gustaría establecer la opción SI @parameter IS NULL THEN LUEGO mantener el valor que ya está almacenado en la base de datos. Traté de encontrar alguna solución y algo como la siguiente consulta parece ser la solución, pero no puedo hacer que funcione:
UPDATE DeviceAttribute
SET Details = CASE Name
WHEN 'Accessories' IS NOT NULL THEN @Accessories
WHEN 'Description' IS NOT NULL THEN @Description
WHEN 'Specification' IS NOT NULL THEN @Specification
ELSE Details
END
WHERE DeviceID = 10
THE DB se almacena en SQL Server 2008
Gracias de antemano por la ayuda.
EDITAR para aclarar:
La mesa original se ve así
DeviceID|Name |Details |
10 |Accessories |earplugs |
10 |Description |protectors|
10 |Specification|BeatsByDre|
Por razones de publicación, hice una consulta para cambiar las tablas. Entonces, cuando se ejecuta la consulta Seleccionar, la tabla de retorno tiene el siguiente aspecto
DeviceID|Accessories|Description|Specification|
10 |earplugs |protectors |BeatsByDre |
Creé una interfaz de usuario para permitir a los usuarios del sistema actualizar los diferentes campos como Accesorios, Descripción, Especificación. La actualización funciona si actualizo todos los campos con la consulta que se muestra en la parte superior. Sin embargo, cuando dejo un cuadro de texto vacío, aparece un error de que al parámetro @ le falta un valor. Así que tratando de encontrar una solución para actualizar solo el campo donde está escrito algo. Entonces, si @parameter IS NULL, mantenga el valor original en la base de datos. Encontré otra solución que está muy cerca de lo que quiero pero no puedo hacer que funcione. Aquí está la otra solución: /programming/9387839/mysql-if-not-null-then-display-1-else-display-0
UPDATE
declaración envía la IU a la base de datos?'@'Accessories
no tiene sentido para mí.Respuestas:
Creo que esto resolverá el problema:
o esto (para evitar actualizaciones redundantes):
o esto, usando un constructor de valores de tabla:
fuente