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