Sql-запрос для обновления базы данных, если значение не равно null?

#sql #database #sqlite #sql-update

#sql #База данных #sqlite #sql-обновление

Вопрос:

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

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

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

Не мог бы кто-нибудь, пожалуйста, пролить немного света на это?

Комментарии:

1. Какая база данных? SQL Server, Oracle, MySQL?

2. Какую базу данных вы используете? MySQL? Oracle? SQL Server? Вы можете сделать это с помощью триггеров (перед обновлением). Если ваша база данных поддерживает это.

3. «если оно не равно null», что ЭТО такое?

4. Я использую sqlite ….. Я ищу команду sql для обновления…

Ответ №1:

Не зная вашей базы данных, сложно быть конкретным. В 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 функцию.

Комментарии:

1. Просто имейте в виду, что это означает, что вы никогда не сможете вернуть столбцу значение NULL, используя эту хранимую процедуру, как только она была установлена.

2. В MySQL @ не требуется, т.е. Field1 = IsNull(Field1Value) , похоже, работает нормально

3. @Janac Meena: Имя функции, используемой в Mysql для этих случаев, является IfNull

Ответ №2:

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

таблицы = table1, table2, каждая из которых имеет field1 и field2

 update t1 WITH (ROWLOCK)
set T1.Field2 = ISNULL(T2.Field2,T1.Field2)
from Table1 T1 Join Table2 T2 
    ON T1.Field1 = T2.Field1