Pular para o conteúdo principal

Postagens

Mostrando postagens de 2016
Esses dias estava precisando montar algo para apresentar o tempo que uma determinada rotina, uma parte eu pesquisei e consegui um função pronta, outra parte foi montada. Compartilhando abaixo a idéia. /*/{Protheus.doc} TempRest Exemplo de chamada da função. ** Fonte não compilado, pode haver erros de sintaxe. /*/ User Function APrefHR() Local nTimeIni := Seconds() Local nI := 1 Local nFim = 50000 For Ni := 1 To nFIm conout(U_TempRest(nI, nFim,nTimeIni)[4]) Next Return Nil /*/{Protheus.doc} TempRest Faz o calculo de tempo restante para um processo @author TSC679 - CHARLES REITZ @since 12/07/2016 @param nTotaisP, numeric, descricao @param nIncrement, numeric, descricao @param nTimeIni, numeric, descricao @return return, return_description /*/ User Function TempRest(nTotaisP,nIncrement,nTimeIni) Local cTempoRest := "" Local nHoraRest := 0 LOcal nSecAtual := seconds() Local aRetFun := {nil,nil,nil,ni
Outro exemplo de exclusão de registro duplicado, buscando o maior registro. BEGIN TRAN DECLARE @ID VARCHAR(500) DECLARE @CONT int DECLARE CUR_DELETE CURSOR FOR SELECT A1_FILIAL+A1_CGC FROM SA1200 WHERE D_E_L_E_T_ = ' ' GROUP BY A1_FILIAL+A1_CGC HAVING COUNT(*) > 1 OPEN CUR_DELETE FETCH NEXT FROM CUR_DELETE INTO @ID WHILE @@FETCH_STATUS = 0 BEGIN UPDATE SA1200 SET D_E_L_E_T_ = '*' WHERE R_E_C_N_O_ = (Select max(R_E_C_N_O_) From SA1200 t2 Where A1_FILIAL+A1_CGC = @ID ) FETCH NEXT FROM CUR_DELETE INTO @ID END

MSSQL - Remover itens duplicados

Muitas vezes, faz necessário eliminar informações duplicadas, existe algumas formas de realizar essa tarefa. Abaixo segue uma forma de fazer. Explicação rápida, ele conta o total de duplicados, deixando sempre 1 (TOP(@CONT -1)). Esse script foi testando no MSSQL 2008, 2012 e 2014. DECLARE @ID VARCHAR(500) DECLARE @CONT int DECLARE CUR_DELETE CURSOR FOR SELECT N4_FILIAL+N4_CBASE+N4_ITEM+N4_TIPO+N4_OCORR+N4_TIPOCNT+N4_CONTA+N4_DATA+N4_SEQREAV, COUNT(*) FROM SN4010 WHERE D_E_L_E_T_ = ' ' AND N4_FILIAL = '01' --AND N4_ITEM = '07' AND N4_CBASE = 'BR0016 ' AND N4_DATA = '20100831' GROUP BY N4_FILIAL+N4_CBASE+N4_ITEM+N4_TIPO+N4_OCORR+N4_TIPOCNT+N4_CONTA+N4_DATA+N4_SEQREAV HAVING COUNT(*) > 1 OPEN CUR_DELETE FETCH NEXT FROM CUR_DELETE INTO @ID,@CONT WHILE @@FETCH_STATUS = 0 BEGIN UPDATE TOP(@CONT -1) SN4010 SET D_E_L_E_T_ = '*' WHERE N4_FILIAL+N4_CBASE+N4_ITEM+N4_TIPO+N4_OCORR+N4_TIPOCNT+N4_CONTA+N4_DATA+N4_SEQREAV = @ID FETCH NEXT