Ir ao conteúdo

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


Ir à solução Resolvido por Gabriel Merlo Ferreira,

Posts recomendados

Postado

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.

Postado

@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

  • Solução
Postado

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

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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 comunidades sobre tecnologia do Brasil. Leia mais

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...