Inserir dados se não exisitir

29/11/2019

7

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:

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.
Responder

Posts

01/12/2019

Gustavo

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
Responder

03/12/2019

Bruno Pardim

Boa tarde,

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
Responder