Estou me perguntando se isso é possível. Quero atualizar a coluna x se uma condição for verdadeira, caso contrário, a coluna y seria atualizada
UPDATE table SET
(CASE (CONDITION) WHEN TRUE THEN columnx
ELSE columny
END)
= 25
Procurei por todo o lado, experimentei algumas coisas e não consigo encontrar uma solução. Acho que não é possível, mas pensei em perguntar aqui e ver se alguém já fez isso antes. Desde já, obrigado.
sql
sql-update
case
pqsk
fonte
fonte
Respostas:
Você não pode usar uma condição para alterar a estrutura da sua consulta, apenas os dados envolvidos. Você poderia fazer isso:
Isso é semanticamente igual, mas lembre-se de que ambas as colunas sempre serão atualizadas . Isso provavelmente não causará problemas, mas se você tiver um alto volume transacional, poderá causar problemas de simultaneidade.
A única maneira de fazer especificamente o que você está pedindo é usar SQL dinâmico. No entanto, isso é algo que eu encorajo você a ficar longe. A solução acima quase certamente será suficiente para o que você procura.
fonte
fonte
23
segundos antes de ele postar. Sou um redator rápido!* min ago
, ele mostrará a hora exata em que foi postado.Quero alterar ou atualizar meu ContactNo para 8018070999, onde há 8018070777 usando a declaração Case
fonte
Eu sei que esta é uma questão muito antiga, mas funcionou para mim:
Saudações
fonte
Eu sei que esta é uma questão muito antiga e o problema está marcado como corrigido. Porém, se alguém com um caso como o meu em que a tabela possui gatilho para registro de dados em eventos de atualização, isso causará problema. Ambas as colunas obterão a atualização e o registro criará entradas inúteis. Do jeito que eu fiz
Agora, isso tem outro benefício de não ter gravações desnecessárias na tabela, como as soluções acima.
fonte
Acredito que você pode omitir a atualização das colunas "não desejadas" ajustando as outras respostas da seguinte forma:
update table set columnx = (case when condition1 then 25 end), columny = (case when condition2 then 25 end)
Pelo que entendi, isso só será atualizado quando a condição for atendida.
Depois de ler todos os comentários, este é o mais eficiente:
Update table set ColumnX = 25 where Condition1 Update table set ColumnY = 25 where Condition1
Tabela de amostra:
CREATE TABLE [dbo].[tblTest]( [ColX] [int] NULL, [ColY] [int] NULL, [ColConditional] [bit] NULL, [id] [int] IDENTITY(1,1) NOT NULL ) ON [PRIMARY]
Dados de amostra:
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)
Agora suponho que você possa escrever uma condicional que lida com nulos. Para meu exemplo, estou assumindo que você escreveu uma condicional que avalia como True, False ou Null. Se precisar de ajuda com isso, me avise e eu farei o meu melhor.
Agora, a execução dessas duas linhas de código altera de fato X para 25 se e somente se ColConditional for True (1) e Y para 25 se e somente se ColConditional for False (0)
Update tblTest set ColX = 25 where ColConditional = 1 Update tblTest set ColY = 25 where ColConditional = 0
PS O caso nulo nunca foi mencionado na pergunta original ou em qualquer atualização da pergunta, mas como você pode ver, esta resposta muito simples trata disso de qualquer maneira.
fonte