GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

UPDATE com mais de um valor (RESOLVIDO!)


#1

Bom dia.
Gostaria de saber se consigo fazer um UPDATE da forma abaixo ou parecido.
Ex: UPDATE tabelaX SET col2 = (6,5,4,3,2,1) WHERE ID IN(1,2,3,4,5,6)


#2

Creio eu que NÃO… vc tem que fazer uma atualização por vez

UPDATE nomeTabela SET nomeColunaAlterar='3' WHERE `idRegistro`='2';

#3

Desta forma não funciona, o BD não reconhece esta sintaxe!

Ex: UPDATE tabelaX SET col2 = (6,5,4,3,2,1) WHERE ID IN(1,2,3,4,5,6);

Você pode fazer isso aqui:

UPDATE tabelaX SET col2 = 6 WHERE ID IN(1,2,3,4,5,6);
UPDATE tabelaX SET col2 = 6 WHERE ID  = 1;

#4

O que eu preciso é atualizar ao mesmo tempo vários registros porém cada um com um valor. Na mesma coluna. Na verdade eu gostaria se fosse possível. Um de cada vez já é feito.


#5

Precisa ser feito direto no BD essa atualização, ou pode ser feita via aplicação ?


#6

É via aplicação. Mas não queria usar por exemplo um for para atualizar um de cada vez e sim com uma instrução só.


#7

Vc não especificou qual DB, porém a maioria aceita uma construção semelhante a esta.

UPDATE tabelaX SET col2 = 6 WHERE ID = 1 AND (
UPDATE tabelaX SET col2 = 5 WHERE ID = 2 AND (
UPDATE tabelaX SET col2 = 4 WHERE ID = 3 AND
vc já entendeu
))))));


#8

Essa possibilidade eu nao conhecia… vivendo e aprendendo


#9

Também da pra criar uma função e colocar estes em operações separadas dentro da função.

Caso precise que só seja concluído caso todos executem sem erro vc coloca o commit após as operações e caso um de erro execute um rollback


#10

Caso seja uma operação constante vc pode colocar em uma procedure e disparar com uma trigger


#11

Cara, da forma que você quer fazer, eu desconheço recursos existentes para realizar tal tarefa, e nunca vi nada parecido em lugar nenhum!

A única forma de atualizar é com laço de repetição, tanto na aplicação como no BD, um registro por vez.


#12

MYSQL é o DB.


#13

Achei a solução!
Setar uma variável com valor 0 (SET @n = 0;)e usá-la com auto incremento (@n := @n+1) :
1. SET @n = 0;
2. UPDATE datatypetags SET ORDINE = (@n := @n+1) WHERE ID IN(1,2,3,4,5,6);

Achei a solução aqui: https://elias.praciano.com/2015/03/como-listar-resultados-das-tabelas-com-linhas-numeradas-no-mysql/