none
update com case RRS feed

  • Pergunta

  • tenho numa tabela duas linhas onde um coluna possui o mesmo valor. exemplo:

    id       name         valor       id_aux
    1        name1        10000       1
    2        name2        -10000      1

    e assim por diante

    o que preciso é fazer um update onde na coluna name onde o id_aux seja 1 (neste caso. o valor virá como parametro) sem alterar o campo valor.

    é possível eu fazer uma espécie de update com case?
    quinta-feira, 4 de julho de 2013 20:29

Respostas

  • Rafa, acredito que seria assim;

    update tabela
    set coluna1 = case when flag is null and id_Aux = 1 then @col1 end,
    	coluna2 = case when id_aux = 1 and flag = 1 then @col2 end


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta rafa-martin quinta-feira, 4 de julho de 2013 21:17
    quinta-feira, 4 de julho de 2013 21:12

Todas as Respostas

  • Boa tarde,

    Rafa, não consegui entender a questão... considerando a tabela que você postou, como deveriam ficar os dados após o Update e quais parâmetros seriam fornecidos?


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 4 de julho de 2013 20:37
  • na verdade me expressei mal.

    nessa tabela eu tenho uma coluna que é uma flag. nela tem o valor 1 ou 0.

    preciso atualizar apenas algumas colunas de acordo com essa flag. só que nessa minha tabela (como citei no primeiro posto) eu posso ter duas linhas com o mesmo id_aux. porque quando quando eu fizer esse update preciso saber qual da linhas tem a flag igual a 1, por exemplo para eu saber quais colunas eu atualizo. pois no meu where será id = @id_aux. ou seja, posso atualizar todas as colunas das duas linhas. quem vai me dizer quais eu posso atualizar ou não é a flag.

    entendeu?

    quinta-feira, 4 de julho de 2013 20:52
  • Rafa, não seria basicamente colocar um where onde o seu campo for igual a 1 ?

    Alexandre Matayosi Conde Mauricio.

    quinta-feira, 4 de julho de 2013 21:00
  • Supondo que a ColunaA deve ser atualizada quando a flag é igual a 0, e que a ColunaB deve ser atualizada quando é igual a 1, acho que poderia ser utilizado um Update conforme segue:

    update Tabela
    set 
        ColunaA = case when Flag = 0 then @ColunaA else ColunaA end,
        ColunaB = case when Flag = 1 then @ColunaB else ColunaB end
    where Id = @Id

    Espero que seja útil.


    Assinatura: http://www.imoveisemexposicao.com.br

    quinta-feira, 4 de julho de 2013 21:03
  • não.  como eu vou saber qual coluna eu vou atualizar? não quero fazer dois updates. do jeito normal seria assim:

    update tabela set coluna1 = @col1, coluna2 = @col2 where id_aux = 1 and flag = 1

    como eu tenho duas linhas na tabela com a coluna id_aux igual 1, irá atualizar as duas colunas, certo? o problema, é que quando minha flag é igual a 1, não posso atualizar as duas colunas do id_aux igual a 1. ou seja, preciso atualizar apenas na coluna 2. e quando minha flag for nulo ou zero aí eu atualizo as duas colunas. na prática seria assim:

    update tabela set coluna2 = @col2 where id_aux = 1 and flag = 1

    update tabela set coluna1 = @col1, coluna2 = @col2 where id_aux = 1 and flag is null

    só que não quero fazer dois updates. por isso perguntei sobre o case no update, para esse caso.

    entendeu agora?

    quinta-feira, 4 de julho de 2013 21:07
  • Rafa, acredito que seria assim;

    update tabela
    set coluna1 = case when flag is null and id_Aux = 1 then @col1 end,
    	coluna2 = case when id_aux = 1 and flag = 1 then @col2 end


    Alexandre Matayosi Conde Mauricio.

    • Marcado como Resposta rafa-martin quinta-feira, 4 de julho de 2013 21:17
    quinta-feira, 4 de julho de 2013 21:12
  • eu pensei nisso. só que minha flag nao vem como parâmetro. como eu faria esse case sem ter o valor? esse valor só está na tabela
    quinta-feira, 4 de julho de 2013 21:14
  • consegui fazer. no exemplo só tirei o di_aux. 

    vlw

    quinta-feira, 4 de julho de 2013 21:17