Запрос SQL для обновления базы данных, если значение не равно нулю? - PullRequest
30 голосов
/ 23 мая 2011

У меня есть таблица, которая имеет около 17 полей.Мне нужно выполнять частые обновления в этой таблице.Но проблема в каждый раз, когда я могу обновлять только несколько полей .Каков наилучший способ написать запрос на обновление в таком сценарии?Я ищу вариант, в котором значение обновляется, только если оно не равно нулю .

Например, у меня есть четыре поля в базе данных Скажи A, B, C, D.Пользователь обновляет значение, скажем D. Все остальные значения остаются прежними.Поэтому я хочу запрос на обновление, который обновляет только значение D, оставляя остальные без изменений.Поэтому, если я поставлю a, b и c как null и d со значением, предоставленным пользователем, я хочу написать запрос на обновление, который только обновляет значение d как a, b и c равно нулю.Это что-то достижимое?

Я пользуюсь базой данных SQLite.

Может кто-нибудь пролить свет на это?

Ответы [ 2 ]

58 голосов
/ 23 мая 2011

Не зная вашей базы данных, сложно быть конкретным.В SQL Server синтаксис будет выглядеть примерно так ...

UPDATE MyTable 
SET 
        Field1 = IsNull(@Field1, Field1),
        Field2 = IsNull(@Field2, Field2),
        Field3 = IsNull(@Field3, Field3)
WHERE 
     <your criteria here>

РЕДАКТИРОВАТЬ

Поскольку вы указали SQLLite ... замените мою функцию IsNull на COALESCE() или поочередно посмотрите на функцию IfNull.

2 голосов
/ 19 ноября 2015

Размещение решения SQL Server с 2 таблицами для потомков. Запрос соединяет две таблицы и обновляет имеющиеся значения. В противном случае сохраняется исходное значение.

таблицы = таблица1, таблица2, каждая из которых имеет поле1 и поле2

update t1 WITH (ROWLOCK)
set T1.Field2 = ISNULL(T2.Field2,T1.Field2)
from Table1 T1 Join Table2 T2 
    ON T1.Field1 = T2.Field1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...