Выборочное обновление полей - PullRequest
1 голос
/ 13 августа 2010

У меня есть хранимая процедура, необходимая для обновления существующей записи новыми данными, однако она не должна «перезаписывать» любые существующие данные.

Например, у нас может быть три поля:

 FirstName | LastName | PhoneNumber

Вызовите вышеупомянутый «TableX».

В очень простом обновлении это может выглядеть примерно так:

 Update TableX
 set    FirstName = [TableY.FirstName]
       ,LastName = [TableY.LastName]
       ,PhoneNumber = [TableY.PhoneNumer]
 etc.....

Однако мне требуется, чтобы каждый столбец обновлялся только (из TableY) если оно пустое.

Ответы [ 4 ]

4 голосов
/ 13 августа 2010
Update TableX
set    FirstName = ISNULL(FirstName, [TableY.FirstName])
      ,LastName = ISNULL(LastNastName, [TableY.LastName])
      ,PhoneNumber = ISNULL(PhoneNumber, [TableY.PhoneNumer])

...

Если 'пусто' не означает NULL, то

Update TableX
set    FirstName = case FirstName when "" then [TableY.FirstName] else FirstName end
      ,LastName = case LastName when "" then [TableY.LastName]) else LastName end
      ,PhoneNumber = case PhoneNumber when "" then [TableY.PhoneNumer] else PhoneNumber end
1 голос
/ 13 августа 2010

вам нужно использовать , тогда , чтобы сделать это.

UPDATE [AdventureWorks_DB].[dbo].[activities]
SET  [FirstName ] = case  when FirstName  is  null then 'pass First Name'
                     else  [FirstName ]
end,
LastName  = case  when LastName  is  null then 'pass Last Name'
          else  LastName 
end,
PhoneNumber = case  when PhoneNumber is  null then 'pass PhoneNumber'
        else  PhoneNumber
end
0 голосов
/ 13 августа 2010

Поскольку обновление логически является удалением, то при вставке нет никакого вреда при использовании шаблона COALESCE, хотя, вероятно, не стоит проверять все значения параметра NULL, например

UPDATE TableX
   SET FirstName = COALESCE(@FirstName, FirstName), 
       LastName = COALESCE(@LastName, LastName), 
       PhoneNumber = COALESCE(@PhoneNumber, PhoneNumer)
 WHERE COALESCE(@FirstName, @LastName, @PhoneNumber) IS NOT NULL
       AND person_X_ID = @person_X_ID;
0 голосов
/ 13 августа 2010
update
    TableX
set 
FirstName = (case when FirstName = null then  @firstname else FirstName end)
where 
Id=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...