Мне интересно, возможно ли это вообще. Я хочу обновить столбец x, если условие истинно, иначе столбец y будет обновлен
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
Я искал повсюду, пробовал кое-что и не могу найти решения. Думаю, это невозможно, но я подумал, что спрошу здесь и посмотрю, делал ли кто это раньше. Заранее спасибо.
sql
sql-update
case
pqsk
источник
источник
Ответы:
Вы не можете использовать условие для изменения структуры вашего запроса, только задействованные данные. Вы могли сделать это:
Это семантически то же самое, но помните, что оба столбца всегда будут обновляться . Это наверное , не вызовет у вас никаких проблем, но если у вас большой объем транзакций, это может вызвать проблемы с параллелизмом.
Единственный способ сделать именно то, что вы просите, - использовать динамический SQL. Однако я бы посоветовал вам держаться от этого подальше. Приведенного выше решения почти наверняка будет достаточно для того, что вам нужно.
источник
источник
23
секунды до того, как он его опубликовал. Я один быстрый копипастер!* min ago
, он покажет вам точное время публикации.Я хочу изменить или обновить свой контактный номер до 8018070999, где 8018070777, используя оператор Case
источник
Я знаю, что это очень старый вопрос, но у меня это сработало:
С уважением
источник
Я знаю, что это очень старый вопрос, и проблема помечена как исправленная. Однако, если у кого-то есть случай, подобный моему, где таблица имеет триггер для регистрации данных при событиях обновления, это вызовет проблему. Оба столбца получат обновление, а журнал сделает бесполезные записи. Как я сделал
Теперь у этого есть еще одно преимущество, заключающееся в отсутствии ненужных записей в таблице, как в приведенных выше решениях.
источник
Я считаю, что вы можете не обновлять «нежелательные» столбцы, настроив другие ответы следующим образом:
update table set columnx = (case when condition1 then 25 end), columny = (case when condition2 then 25 end)
Насколько я понимаю, это обновится только при выполнении условия.
После прочтения всех комментариев это наиболее эффективно:
Update table set ColumnX = 25 where Condition1 Update table set ColumnY = 25 where Condition1
Образец таблицы:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
образец данных:
Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 0) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (null, null, 1) Insert into tblTest (ColX, ColY, ColConditional) values (1, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (2, null, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 1, null) Insert into tblTest (ColX, ColY, ColConditional) values (null, 2, null)
теперь я предполагаю, что вы можете написать условное выражение, которое обрабатывает значения NULL. В моем примере я предполагаю, что вы написали такое условие, которое оценивается как True, False или Null. Если вам понадобится помощь, дайте мне знать, и я сделаю все возможное.
Теперь выполнение этих двух строк кода фактически изменяет X на 25 тогда и только тогда, когда ColConditional имеет значение True (1), а Y - на 25, если и только если ColConditional имеет значение False (0)
Update tblTest set ColX = 25 where ColConditional = 1 Update tblTest set ColY = 25 where ColConditional = 0
PS Нулевой случай никогда не упоминался в исходном вопросе или каких-либо обновлениях вопроса, но, как вы можете видеть, этот очень простой ответ все равно обрабатывает их.
источник