Tengo una tabla:T-SQL ACTUALIZACIÓN condicional (v2)
Message (MessageID int, Subject nvarchar(100), Body nvarchar(max))
Después de un mensaje está siendo actualizado en la interfaz de usuario, que llamo un procedimiento almacenado para actualizar esa tabla. En algunos casos, el usuario puede actualizar solo el tema, en otros casos solo cuerpo. Quiero que este procedimiento almacenado sólo para actualizar lo que ha cambiado, así que también estoy pasando símbolos que indican que si la materia o cuerpo se ha actualizado:
create proc UpdateMessage(
@MessageID int,
@Subject nvarchar(100),
@Body nvarchar(max),
@SubjectChanged bit,
@BodyChanged bit)
y ahora estoy confundido cómo construir el UPDATE
sentencia condicional. Lo primero que pensé fue utilizar CASE
:
Update [Message]
SET
CASE WHEN @SubjectChanged = 1 THEN [Subject] = @Subject ELSE 1=1 END,
CASE WHEN @BodyChanged = 1 THEN Body = @Body ELSE 1=1 END,
WHERE MessageID = @MessageID
... pero eso no parece ser una sintaxis correcta como CASE
tiene que ser el lado derecho de una assigment.
¿Alguna idea de cómo podría hacer eso? (Y tenga en cuenta que en realidad hay 6 parámetros que se pueden actualizar, no dos)
Tenga en cuenta que el cuerpo del mensaje puede ser de 5-10-50kb y, si el usuario acaba de actualizar el asunto, es extremadamente inútil enviar el cuerpo del mensaje de vuelta y realizar la actualización del campo cuando no sea necesario. El sitio web tiene mucha carga, por lo que debo asegurarme de que optimizo cuando sea posible. – Andrey
¿Por qué no usar procedimientos almacenados por separado? ¿De verdad se debe incluir en un solo sproc? Es probable que desee hacer algunas modificaciones en el futuro que arruinarán por completo su "increíble plan" –
"¿Por qué no utilizar procedimientos almacenados por separado entonces?" - para guardar en múltiples llamadas a bases de datos – Andrey