none
Como melhorar esse update? RRS feed

  • Pergunta

  • Olá pessoal,

    Há um tempo atrás, peguei uma estrutura de insert aqui no fórum e, desde então utilizei essa estrutura para vários inserts que continham valores padrões e deixei pronto numa trigger, pois eram tabelas que jamais alterariam sua forma de alimentação. Agora estou usando o UPDATE abaixo em uma tabela, mas em determinado momento é como se ela estivesse repetindo o que havia feito no registro anterior. Como posso corrigir isso?

    CREATE TRIGGER [dbo].[TGR_ETAPAS_UPDATE]
           on [dbo].[SETAPAS]
           after UPDATE as
    BEGIN
    
    -- encerra o processamento se não há linha para tratar
    IF not exists (SELECT * from INSERTED) return;
    	
    --
    UPDATE P
    	SET DTINICIO = CASE WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 2)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 3)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 4)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 5)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 6)
    		WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 8)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 9)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 10)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 11)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 12)
    		ELSE I.DTINICIO END,
    	DTFIM = CASE WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 2)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 3)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 4)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 5)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 6)
    		WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 8)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 9)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 10)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 11)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTFIM IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 12)
    		ELSE I.DTFIM END,
    	DTINICIODIGITACAO = CASE WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 2)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 3)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 4)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 5)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 6)
    		WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 8)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 9)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 10)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 11)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTINICIODIGITACAO IS NULL THEN
    		dbo.fnPrimeiroDiaUtil(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 12)
    		ELSE I.DTINICIODIGITACAO END,
    	DTLIMITEDIGITACAO = CASE WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 2)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 3)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 4)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 5)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 6)
    		WHEN I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 8)
    		WHEN I.CODETAPA = 2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 9)
    		WHEN I.CODETAPA = 3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 10)
    		WHEN I.CODETAPA = 4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 11)
    		WHEN I.CODETAPA = 5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 AND I.DTLIMITEDIGITACAO IS NULL THEN
    		dbo.fnUltimoDiaUtilSabados(CAST(SUBSTRING(K.CODPERLET, 1, 4) AS INTEGER), 12)
    		ELSE I.DTLIMITEDIGITACAO END,
    	FREQMIN = CASE WHEN I.TIPOETAPA = 'F' THEN 75 ELSE NULL END,
    	DESCRICAO = CASE WHEN I.TIPOETAPA = 'F' AND I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 THEN 'FEVEREIRO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 THEN 'MARÇO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 THEN 'ABRIL'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 THEN 'MAIO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 1 THEN 'JUNHO'
    				
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA = 1 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 THEN 'AGOSTO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  2 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 THEN 'SETEMBRO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  3 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 THEN 'OUTUBRO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  4 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 THEN 'NOVEMBRO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  5 AND SUBSTRING(K.CODPERLET, LEN(K.CODPERLET), 1) = 2 THEN 'DEZEMBRO'
    				WHEN I.TIPOETAPA = 'F' AND I.CODETAPA =  6 THEN 'TOTAL DE FALTAS'
    				
    				WHEN I.TIPOETAPA = 'N' AND I.CODETAPA = 1 THEN 'AV1'
    				WHEN I.TIPOETAPA = 'N' AND I.CODETAPA = 2 THEN 'AV2'
    				WHEN I.TIPOETAPA = 'N' AND I.CODETAPA = 3 THEN 'AV3'
    				WHEN I.TIPOETAPA = 'N' AND I.CODETAPA = 4 THEN 'NAF'
    				WHEN I.TIPOETAPA = 'N' AND I.CODETAPA = 5 THEN 'MÉDIA'
    				WHEN I.TIPOETAPA = 'N' AND I.CODETAPA = 6 THEN 'MÉDIA FINAL'
    				ELSE '' END,
    	DIGAULASDADAS = CASE WHEN I.TIPOETAPA = 'F' AND I.CODETAPA < 6 THEN 'S'
    					WHEN I.TIPOETAPA = 'F' AND I.CODETAPA = 6 THEN 'N'
    					ELSE NULL END,
    	EXIBENAWEB = 'S',
    	PERMITEDIGITACAO = 'S',
    	ETAPAFINAL = CASE WHEN I.TIPOETAPA = 'N' AND I.CODETAPA < 6 THEN 'N'
    				WHEN I.TIPOETAPA = 'N' AND I.CODETAPA = 6 THEN 'S'
    				ELSE NULL END,
    	CODFORMULANOTA = CASE WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 1 AND I.CODFORMULANOTA IS NULL THEN 'FRM001'
    					 WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 2 AND I.CODFORMULANOTA IS NULL THEN 'FRM002'
    					 WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 3 AND I.CODFORMULANOTA IS NULL THEN 'FRM001'
    					 WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 4 AND I.CODFORMULANOTA IS NULL THEN NULL
    					 WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 5 AND I.CODFORMULANOTA IS NULL THEN 'FRM002'
    					 WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 6 AND I.CODFORMULANOTA IS NULL THEN 'FRM002'
    					 WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 7 AND I.CODFORMULANOTA IS NULL THEN 'FRM002'
    					 WHEN I.TIPOETAPA = 'N' AND L.CODTIPOCURSO = 8 AND I.CODFORMULANOTA IS NULL THEN 'FRM002'
    					 WHEN I.TIPOETAPA = 'F' THEN NULL
    					 ELSE I.CODFORMULANOTA END,
    	CODFORMULAFALTA = CASE WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 1 AND I.CODFORMULAFALTA IS NULL THEN 'FRM001'
    					  WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 2 AND I.CODFORMULAFALTA IS NULL THEN 'FRM002'
    					  WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 3 AND I.CODFORMULAFALTA IS NULL THEN 'FRM001'
    					  WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 4 AND I.CODFORMULAFALTA IS NULL THEN NULL
    					  WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 5 AND I.CODFORMULAFALTA IS NULL THEN 'FRM002'
    					  WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 6 AND I.CODFORMULAFALTA IS NULL THEN 'FRM002'
    					  WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 7 AND I.CODFORMULAFALTA IS NULL THEN 'FRM002'
    					  WHEN I.TIPOETAPA = 'F' AND L.CODTIPOCURSO = 8 AND I.CODFORMULAFALTA IS NULL THEN 'FRM002'
    					  WHEN I.TIPOETAPA = 'N' THEN NULL
    					  ELSE I.CODFORMULAFALTA END,
    	CONCEITOGRAFICO = NULL,
    	EXIBENOGRAFICO = NULL,
    	MEDIA = CASE WHEN L.CODTIPOCURSO = 1 AND I.TIPOETAPA = 'N' THEN 7
    			WHEN L.CODTIPOCURSO = 2 AND I.TIPOETAPA = 'N' THEN 6
    			WHEN L.CODTIPOCURSO = 3 AND I.TIPOETAPA = 'N' THEN 7
    			WHEN L.CODTIPOCURSO = 5 AND I.TIPOETAPA = 'N' THEN 6
    			WHEN L.CODTIPOCURSO = 6 AND I.TIPOETAPA = 'N' THEN 6
    			WHEN L.CODTIPOCURSO = 7 AND I.TIPOETAPA = 'N' THEN 6
    			WHEN L.CODTIPOCURSO = 8 AND I.TIPOETAPA = 'N' THEN 6
    			ELSE NULL END,
    	PONTDIST = CASE WHEN I.TIPOETAPA = 'N' THEN 10 ELSE NULL END
    	
    	FROM SETAPAS P
    	INNER JOIN INSERTED AS I ON I.IDTURMADISC = P.IDTURMADISC
    								AND I.CODETAPA = P.CODETAPA
    								AND I.CODCOLIGADA = P.CODCOLIGADA
    	INNER JOIN STURMADISC AS J ON J.IDTURMADISC = I.IDTURMADISC
    								AND J.CODCOLIGADA = I.CODCOLIGADA
    	INNER JOIN SPLETIVO AS K ON K.IDPERLET = J.IDPERLET
    	INNER JOIN SHABILITACAOFILIAL AS L ON L.IDHABILITACAOFILIAL = J.IDHABILITACAOFILIAL
    								AND L.CODCOLIGADA = J.CODCOLIGADA
    	
    END;


    Grato,

    Ilano.

    sexta-feira, 23 de março de 2018 14:00

Respostas

  • IlanoCF,

    Inicialmente você precisa definir com quais dados deseja trabalhar, ou seja, os valores que devem ser consultados para servir como base de análise, com isso, você terá a possibilidade de definir o que deverá ser identificado como resultado.

    Independente de armazenar em uma tabela temporária, CTE ou até mesmo tabela física, estabelecer suas regras para apresentar os dados não necessariamente precise ser feita na mesma query, muito menos em um trigger, alias analisem bem este tipo de implementação pois você poderá gerar um impacto violento no que diz respeito a processamento em seu ambiente fazendo uso de trigger aninhados ou recursivos.

    O que você poderia fazer é pegar este código colocar dentro de uma stored procedure, definindo exatamente o que deve ser processamento e condicionado e através do seu trigger fazer a chamada para execução da mesma.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 27 de março de 2018 11:58

Todas as Respostas

  • Olá Luiz,

    Tudo bem, meu amigo. Primeiramente, agradeço sua atenção. Certo, vou tentar fazer aqui e retorno assim que testar.


    • Editado ilanocf sexta-feira, 23 de março de 2018 16:26
    sexta-feira, 23 de março de 2018 16:26
  • Opinião minha, entender isso vai te demandar muito tempo, jogue isso fora , escreva o que vc tem de entrada , e o que vc quer na saida, e post  aqui ,para juntos conseguirmos te dar uma solução melhor,

    por que te falo isso ? 

    vc tem uma query extremamente ,super ,mega hard query não entendível , que estará dentro de uma trigger em produção ,  ou seja , um prato repleto para o caos.

    dicas

    escreva o que vc precisa, escreva o que vc já tem e a sua saída que vc quer.

    Wesley Neves - Brasilia-DF     

    https://wesleyneves.wordpress.com/

    SELECT Tab.[that's me:]

    FROM

    (

        VALUES

            ('Wesley Neves'),

            ('Analista.NET'),

            ('Pós Graduando em Banco de Dados com ênfase em BI'),

            ('MTA -SQL Server'),

            ('MTA -Web Developed')

    ) AS Tab ("that's me:");


    "Se a resposta for útil ou ajudar ,não esqueça de marcar"





    Wesley Neves

    sexta-feira, 23 de março de 2018 19:46
  • IlanoCF,

    Inicialmente você precisa definir com quais dados deseja trabalhar, ou seja, os valores que devem ser consultados para servir como base de análise, com isso, você terá a possibilidade de definir o que deverá ser identificado como resultado.

    Independente de armazenar em uma tabela temporária, CTE ou até mesmo tabela física, estabelecer suas regras para apresentar os dados não necessariamente precise ser feita na mesma query, muito menos em um trigger, alias analisem bem este tipo de implementação pois você poderá gerar um impacto violento no que diz respeito a processamento em seu ambiente fazendo uso de trigger aninhados ou recursivos.

    O que você poderia fazer é pegar este código colocar dentro de uma stored procedure, definindo exatamente o que deve ser processamento e condicionado e através do seu trigger fazer a chamada para execução da mesma.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 27 de março de 2018 11:58