У меня есть таблица:
Message (MessageID int, Subject nvarchar(100), Body nvarchar(max))
После обновления сообщения в пользовательском интерфейсе я вызываю сохраненный процесс для обновления этой таблицы. В некоторых случаях пользователь может обновить только тему, в других случаях только тело. Я хочу, чтобы этот сохраненный процесс обновлял только то, что изменилось, поэтому я также передаю флаги, показывающие, был ли обновлен предмет или текст:
create proc UpdateMessage(
@MessageID int,
@Subject nvarchar(100),
@Body nvarchar(max),
@SubjectChanged bit,
@BodyChanged bit)
И теперь я запутался, как построить условный оператор UPDATE
. Моей первой мыслью было использовать 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
... но это, похоже, неправильный синтаксис, так как CASE
должен быть правой стороной задания.
Есть идеи, как я мог это сделать? (И имейте в виду, что в действительности существует шесть параметров, которые можно обновить, а не два)