Условно заданные значения в выражении UPDATE - PullRequest
5 голосов
/ 30 сентября 2010

Я хотел бы иметь хранимую процедуру, которая будет обновлять значения в строке таблицы в зависимости от того, указаны ли параметры. Например, у меня есть ситуация, когда я хочу обновить все значения, но также и ситуация, когда мне нужно обновить только два значения. Я надеялся, что смогу сделать это только с одной процедурой, а не с написанием двух, что мне не особо нравится. Лучшее, что мне удалось придумать - это что-то вроде следующего:

CREATE PROCEDURE dbo.UpdatePerson
@PersonId INT,
@Firstname VARCHAR(50) = NULL,
@Lastname VARCHAR(50) = NULL,
@Email VARCHAR(50) = NULL
AS
BEGIN
    SET NOCOUNT ON

UPDATE Person 
Set 
    Firstname = COALESCE(@Firstname, Firstname),
    Lastname = COALESCE(@LastName, Lastname),
    Email = COALESCE(@Email, Email)
    WHERE PersonId = @PersonId

END

Я понимаю, что в любом случае значения будут обновляться каждый раз, что не идеально. Это эффективный способ достижения этого, или это может быть сделано лучше?

Ответы [ 2 ]

4 голосов
/ 30 сентября 2010

SQL Server действительно имеет некоторую логику для работы с обновлениями без обновления.

Более подробная информация, чем вы, вероятно, хотели бы знать!

4 голосов
/ 30 сентября 2010

Я думаю, что ваш код в порядке.Единственное, что я хотел бы добавить, это проверка того случая, когда все три параметра равны NULL, и в этом случае обновление не требуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...