Ir ao conteúdo
  • Cadastre-se
Mlramos

SQL Server RESOLVIDO sql server - dividir 1 tabela em 2... case ?

Posts recomendados

Vamos lá...

INSERT INTO NFCE SELECT *
FROM NOTAS
WHERE RIGHT(LEFT(CHV_ACESSO,22), 2) = '65'

Resumindo, quando o "COD_MOD" da NOTA for igual '65' quero inserir o registro na tabela NFCE ...

mas quando for diferente, quero que o registro seja salvo na tabela NF.

A ideia aqui seria evitar 2 leituras... (uma com igual para popular NFCE e outra com diferente para popular NF), tem como ?

 

Imaginei que com o CASE seria possível, mas não consegui acertar a sintaxe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

É importante realizar esta operação de uma só vez? Ler apenas uma vez a tabela?

 

A maneira mais simples e natural seria mesmo realizar dois inserts, não vejo motivo pra fazer um código mais complexo para fazer um único insert desta forma.

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Gabriel Merlo Ferreira Não achei que o código seria "tão" complicado, rsrs

Mencionei o CASE, pois me pareceu simples também...

Mas a ideia de fazer apenas 1 leitura e já popular tabela X ou Y é desempenho... 

Tenho alguns milhões de registros para leitura e gravação, isso sem contar que tenho Bancos de Dados diferentes para cada ano (também ´por questão do volume de dados).

Teria algum exemplo para verificar o quão complexo é o código ?

Grato

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu dei uma pesquisada rápida aqui (pois estou no trabalho, não vou dispor de muito tempo para te ajudar, infelizmente) e acredito que não seja possível fazer este insert da forma como você planeja: duas tabelas distintas num único statement.

Então a solução é realizar dois inserts mesmo.

 

Uma sugestão que te dou é: caso você esteja mais preocupado com possíveis locks das tabelas por conta da duração deste processo (e não com o tempo do processo em si), você pode extrair todos os dados que serão inseridos nas duas tabelas para uma tabela temporária e ler esta tabela temporária nos dois inserts. Fazendo desta forma você libera mais cedo a tabela original para o restante do sistema continuar usando normalmente, mas como nem tudo na vida são flores, este processo por si só é mais lento (afinal você está alocando memória para estes dados) e você corre o risco de estar inserindo dados desatualizados pois assim que a tabela original for liberada outro processo pode ir lá e mudar o seu estado (caso não seja uma tabela muito movimentada ou não exista um sistema modificando ela, este ponto pode ser ignorado).

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...