Обновление таблицы во время выполнения и столбец не известен во время компиляции - PullRequest
0 голосов
/ 16 сентября 2011

Я пытаюсь написать SQL для обновления нескольких столбцов на основе некоторого условия кода для таблицы в коде.

Например, сделать его самым простым из двух столбцов

UPDATE table set A = valueA where conditionA..

ИЛИ UPDATE table set B=valueB where conditionA..

ИЛИ UPDATE table set A=valueA, B=valueB where conditionA..

Условие такое же, но значение A / значение B может отсутствовать в зависимости от кода

Есть ли какой-нибудь удобный способ объединить их в один SQL, такой как select WHERE 1=1 and <condition>, чтобы я мог добавить условия независимо от одного или нескольких условий?

Надеюсь, это имеет смысл.

Ответы [ 2 ]

0 голосов
/ 27 сентября 2011

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

Если у вас небольшое количество столбцов, вы можете создать отдельный оператор SQL для каждой интересующей их комбинации . В противном случае вам, вероятно, придется динамически создавать текст SQL и заполнять предложение SET вашего оператора, чтобы оно содержало именно те столбцы, которые вам нужны.

Ничто из этого не должно служить оправданием для пропуска правильной привязки всех параметров!

0 голосов
/ 16 сентября 2011

если вы используете то же условие, вы можете написать запрос просто так:

UPDATE [table] SET A = valueA, B=valueB, C=valueC WHERE <condition>

Но если вам нужны разные условия для всех полей, вы можете использовать оператор CASE, например:

UPDATE [table] SET A = CASE WHEN <cond_for_A> THEN valA ELSE A END, 
  CASE WHEN <cond_for_B> THEN valB ELSE B END,
  CASE WHEN <cond_for_C> THEN valC ELSE C END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...