Inserir dados se não exisitir
Oi gente, estou tendo problema com uma query que sei é simples, mas deu uma bugada aqui. Preciso inserir dados de uma tabela em outra, desde que os dados já não existam na tabela que ira receber, está dando erro.
No caso, seria inserção de batidas de ponto, então a principio terei as informações: funcionário, data, entrada. Ai preciso inserir saida almoço, retorno almoço e saída.
Meu script:
Mensagem 2627, Nível 14, Estado 1, Linha 59
Violação da restrição PRIMARY KEY 'PK_batidas'. Não é possível inserir a chave duplicada no objeto 'dbo.batidas'. O valor de chave duplicada é (Nov 1 2019 12:00AM, 1).
A instrução foi finalizada.
No caso, seria inserção de batidas de ponto, então a principio terei as informações: funcionário, data, entrada. Ai preciso inserir saida almoço, retorno almoço e saída.
Meu script:
if exists (select id, data, entrada, almoco, retorno, saida from ponto) insert into ponto iid, data, entrada, almoco, retorno, saida from ponto) select id, data, entrada, almoco, retorno, saida from ponto from #dados
Mensagem 2627, Nível 14, Estado 1, Linha 59
Violação da restrição PRIMARY KEY 'PK_batidas'. Não é possível inserir a chave duplicada no objeto 'dbo.batidas'. O valor de chave duplicada é (Nov 1 2019 12:00AM, 1).
A instrução foi finalizada.
Laura
Curtidas 0
Respostas
Gustavo
29/11/2019
Laura, boa noite.
Ficou um pouco confusa a sua pergunta. Pelo que entendi, você tem vários dados em uma tabela (vou chamar de tbl1) e quer passar esses dados para (tbl2), mas se o valor estiver duplicado na tbl1, você quer passar apenas uma vez para tbl2.
Pelo que entendi do seu erro, o fato de você estar listando a chave-primária e tentando inserir com o mesmo código está gerando uma duplicidade na chave-primária.
Agora não consigo ver isso para você, mas uma solução possível é utilizar um select distinct (que faz a consulta completa removendo informações duplicadas) para gerar um relatório e com base nesse relatório criar um insert.
Espero ter ajudado.
Gustavo
Ficou um pouco confusa a sua pergunta. Pelo que entendi, você tem vários dados em uma tabela (vou chamar de tbl1) e quer passar esses dados para (tbl2), mas se o valor estiver duplicado na tbl1, você quer passar apenas uma vez para tbl2.
Pelo que entendi do seu erro, o fato de você estar listando a chave-primária e tentando inserir com o mesmo código está gerando uma duplicidade na chave-primária.
Agora não consigo ver isso para você, mas uma solução possível é utilizar um select distinct (que faz a consulta completa removendo informações duplicadas) para gerar um relatório e com base nesse relatório criar um insert.
Espero ter ajudado.
Gustavo
GOSTEI 0
Bruno Pardim
29/11/2019
Boa tarde,
um exemplo:
um exemplo:
/*Inicialmente para ver se uma batida já existe seria legal só comparar esses campos entrada, almoco, retorno, saida o id é primario pelo que vi e deve ser autoincremento */ DECLARE @id int = 0 /* Não sei se considera segundos tbm, é só um exemplo*/ IF (SELECT COUNT(*) FROM saida where entrada = '00:00:00' and almoco = '00:00:00' and retorno = '00:00:00' and saida = '00:00:00') = 0 BEGIN INSERT INTO ponto (data, entrada, almoco, retorno, saida) values( '00:00:00', '00:00:00', '00:00:00', '00:00:00', '00:00:00') set @id = scope_identity() select * from ponto where id = @id END
GOSTEI 0