none
Ajuda com Query RRS feed

  • Pergunta

  • Olá a todos,
    como construo uma query que seleccione registos duma tabela e os insira ou actualize noutra tabela conforme uma dada condição se verifique ou não, ou seja precisava de algo do genero :

    if exists (select CodPostal FROM CodigoPostal where CodPostal=i.codPostal)
      UPDATE CodigoPostal SET DesignPostal=i.designPostal  WHERE codPostal=i.codPostal
    else
     INSERT INTO CodigoPostal (CodPostal,DesignPostal) VALUES (i.codPostal ,i.designPostal)
    select * from tempCodPost i
    terça-feira, 3 de abril de 2007 14:55

Respostas

  •  

     

     Veja se assim ajuda:

     

     

      Create Table Exemplo_1 (chave int, codigo int)


     Create Table Exemplo_2 (chave int, codigo int)

     

     Insert Into Exemplo_1 (chave, codigo)
     Select Exemplo_2.chave, Exemplo_2.codigo From Exemplo_2 Left Join Exemplo_1 On Exemplo_1.Chave= Exemplo_2.Chave
     Where Exemplo_1.chave Is null

     Update Exemplo_1 Set codigo = Exemplo_2.codigo
     From Exemplo_1
     Inner Join Exemplo_2 On Exemplo_1.Chave= Exemplo_2.Chave

    vc. nao precisa contar se existe ou nao apenas execute em sequencia primeiro o insert depois o update.

     

    Abs;

    terça-feira, 3 de abril de 2007 16:20

Todas as Respostas

  • Tente isso:

     

     

    if (select count(1) from TempCodigoPostal i
        inner join CodPostal a on a.CodPostal = i.CodPostal ) > 0  
      begin
         update CodigoPostal set DesignPostal=i.DesignPostal from CodigoPostal a
         inner join TempCodigoPostal i on i.CodPostal = a.CodPostal
      end
    else
      begin
        insert into codigopostal (codpostal,designpostal)
        select i.codpostal ,i.designpostal from tempcodpost i
      end

     

    Espero ter ajudado

    terça-feira, 3 de abril de 2007 15:19
  • Parabéns Ezirraffner

     

    Exemplo simples, prático e funcional

     

     

     

    Abs

    terça-feira, 3 de abril de 2007 15:24
  • Ezirraffner,
    obrigado pela dica mas não é bem isso que pretendia.
    O que pretendia era algo parecido com isso mas que para cada registo do
    tempCodPost  fizesse o teste. Assim como sugeriste caso exista registos comuns na tabela tempCodPost  e  CodigoPostal , apenas actualiza esses valores e nao insere os restantes que nao existem.

    O que pretendia era que inserisse os dados que tem na
    tempCodPost e nao estão na CodigoPostal e que actualizasse os restantes dados que fossem comuns as duas tabelas


    terça-feira, 3 de abril de 2007 16:13
  •  

     

     Veja se assim ajuda:

     

     

      Create Table Exemplo_1 (chave int, codigo int)


     Create Table Exemplo_2 (chave int, codigo int)

     

     Insert Into Exemplo_1 (chave, codigo)
     Select Exemplo_2.chave, Exemplo_2.codigo From Exemplo_2 Left Join Exemplo_1 On Exemplo_1.Chave= Exemplo_2.Chave
     Where Exemplo_1.chave Is null

     Update Exemplo_1 Set codigo = Exemplo_2.codigo
     From Exemplo_1
     Inner Join Exemplo_2 On Exemplo_1.Chave= Exemplo_2.Chave

    vc. nao precisa contar se existe ou nao apenas execute em sequencia primeiro o insert depois o update.

     

    Abs;

    terça-feira, 3 de abril de 2007 16:20
  • Ok

     


    Agora você esclareceu melhor e a dica do Marcelo é suficiente para seu problema

     

     

    Um abraço

    terça-feira, 3 de abril de 2007 16:54