SQL: Как мне сделать обновление, которое будет обновлять только те значения, которые не равны нулю? - PullRequest
2 голосов
/ 10 декабря 2011

Как я могу запустить ОБНОВЛЕНИЕ, как показано ниже, где оно только обновляет столбцы, которые не равны нулю?

UPDATE Table
   SET Name = @Name,
       Email = @Email,
       Phone = @Phone
 WHERE id = @id

Редактировать:

Так что, если я использую вышеприведенное обновление, ноназначено следующее ...

  @Name = Tom
  @Email = NULL
  @Phone = NULL

Таким образом, будет обновлено только имя, и все, что было в базе данных для электронной почты и телефона, останется в базе данных как таковое.

Ответы [ 2 ]

5 голосов
/ 10 декабря 2011

Эта базовая идея должна работать:

UPDATE Table
   SET Name = ISNULL(@Name, Name),
       Email = ISNULL(@Email, Email),
       Phone = ISNULL(@Phone, Phone)
 WHERE id = @id

Так что, если @Name равно NULL, Name не изменяется.Если @Name равно , а не NULL, ему присваивается значение Name и т. Д. *

--- EDIT ---

Конечно @clintp, вариант COALESCE будет выглядеть так:

UPDATE Table
   SET Name = COALESCE(@Name, Name),
       Email = COALESCE(@Email, Email),
       Phone = COALESCE(@Phone, Phone)
 WHERE id = @id
2 голосов
/ 10 декабря 2011

Если я правильно понял вопрос:

SET Name = CASE WHEN Name IS NULL THEN NULL ELSE @Name END  ... 
...