none
Aprimorando Trigger RRS feed

  • Pergunta

  • Olá pessoal,

    Fiz a trigger abaixo, mas gostaria de aprimorá-la. Como posso melhorar essa trigger?

    CREATE TRIGGER TGR_NOMES_EM_CAIXA_ALTA_INSERT
    ON PPESSOA
    FOR INSERT
    AS
    BEGIN
    	DECLARE
    	@CODIGO			INT,
    	@CPF			VARCHAR(11),
    	@NOME			VARCHAR(120),
    	@NOMESOCIAL		VARCHAR(120),
    	@APELIDO		VARCHAR(40),
    	@RUA			VARCHAR(140),
    	@COMPLEMENTO	VARCHAR(60),
    	@BAIRRO			VARCHAR(80),
    	@ESTADO			VARCHAR(2),
    	@CIDADE			VARCHAR(32),
    	@PAIS			VARCHAR(60),
    	@EMAIL			VARCHAR(60)
    	
    	SELECT @CODIGO = CODIGO, @CPF = CPF,
    	@NOME = NOME, @NOMESOCIAL = NOMESOCIAL, @APELIDO = APELIDO, @RUA = RUA,
    	@COMPLEMENTO = COMPLEMENTO, @BAIRRO = BAIRRO, @ESTADO = ESTADO,
    	@CIDADE = CIDADE, @PAIS = PAIS, @EMAIL = EMAIL
    	FROM INSERTED
    	
    	
    	UPDATE PPESSOA SET
    	NOME =			UPPER(LTRIM(RTRIM(@NOME))),
    	NOMESOCIAL =	UPPER(LTRIM(RTRIM(@NOMESOCIAL))),
    	APELIDO =		UPPER(LTRIM(RTRIM(@APELIDO))),
    	RUA =			UPPER(LTRIM(RTRIM(@RUA))),
    	COMPLEMENTO =	UPPER(LTRIM(RTRIM(@COMPLEMENTO))),
    	BAIRRO =		UPPER(LTRIM(RTRIM(@BAIRRO))),
    	ESTADO =		UPPER(LTRIM(RTRIM(@ESTADO))),
    	CIDADE =		UPPER(LTRIM(RTRIM(@CIDADE))),
    	PAIS =			UPPER(LTRIM(RTRIM(@PAIS))),
    	EMAIL =			LOWER(LTRIM(RTRIM(@EMAIL)))
    	WHERE CPF = @CPF
    	
    	
    	UPDATE PPESSOA SET NOMESOCIAL = NULL
    	WHERE LTRIM(RTRIM(NOMESOCIAL)) = '' AND CPF = @CPF
    	
    	UPDATE PPESSOA SET APELIDO = NULL
    	WHERE LTRIM(RTRIM(APELIDO)) = '' AND CPF = @CPF
    
    	UPDATE PPESSOA SET RUA = NULL
    	WHERE LTRIM(RTRIM(RUA)) = '' AND CPF = @CPF
    	
    	UPDATE PPESSOA SET NUMERO = NULL
    	WHERE LTRIM(RTRIM(NUMERO)) = '' AND CPF = @CPF
    		
    	UPDATE PPESSOA SET COMPLEMENTO = NULL
    	WHERE LTRIM(RTRIM(COMPLEMENTO)) = '' AND CPF = @CPF
    	
    	UPDATE PPESSOA SET BAIRRO = NULL
    	WHERE LTRIM(RTRIM(BAIRRO)) = '' AND CPF = @CPF
    
    	UPDATE PPESSOA SET ESTADO = NULL
    	WHERE LTRIM(RTRIM(ESTADO)) = '' AND CPF = @CPF
    
    	UPDATE PPESSOA SET CIDADE = NULL
    	WHERE LTRIM(RTRIM(CIDADE)) = '' AND CPF = @CPF
    
    	UPDATE PPESSOA SET PAIS = NULL
    	WHERE LTRIM(RTRIM(PAIS)) = '' AND CPF = @CPF
    
    	UPDATE PPESSOA SET EMAIL = NULL
    	WHERE LTRIM(RTRIM(EMAIL)) = '' AND CPF = @CPF
    	
    END
    GO

    Grato,

    Ilano.

    quarta-feira, 9 de agosto de 2017 20:11

Respostas

Todas as Respostas

  • Olá,

    não entrando no contexto de porque a trigger foi construída,

    você pode melhorar um pouco substituindo os últimos updates por uma cláusula case when no update principal.

    Segue o exemplo.

    UPDATE PPESSOA SET
    	NOME =			UPPER(LTRIM(RTRIM(case LTRIM(RTRIM(@NOME)) = '' then null else LTRIM(RTRIM(@NOME)) end))),
    NOMESOCIAL =	UPPER(LTRIM(RTRIM(case LTRIM(RTRIM(@NOMESOCIAL)) = '' then null else LTRIM(RTRIM(@NOMESOCIAL)) end))),
    	-- Você pode fazer os demais
    	APELIDO =		UPPER(LTRIM(RTRIM(@APELIDO))),
    	RUA =			UPPER(LTRIM(RTRIM(@RUA))),
    	COMPLEMENTO =	UPPER(LTRIM(RTRIM(@COMPLEMENTO))),
    	BAIRRO =		UPPER(LTRIM(RTRIM(@BAIRRO))),
    	ESTADO =		UPPER(LTRIM(RTRIM(@ESTADO))),
    	CIDADE =		UPPER(LTRIM(RTRIM(@CIDADE))),
    	PAIS =			UPPER(LTRIM(RTRIM(@PAIS))),
    	EMAIL =			LOWER(LTRIM(RTRIM(@EMAIL)))
    	WHERE CPF = @CPF


    Vinicius Fonseca - MCP | MCTS | MCDBA | MCITP | MCTS | MCT | ITIL Foundation - DGA SISTEMAS - Se minha resposta for útil, classifique-a. :)



    quarta-feira, 9 de agosto de 2017 22:04
  • Deleted
    • Marcado como Resposta ilanocf quinta-feira, 10 de agosto de 2017 10:53
    quarta-feira, 9 de agosto de 2017 23:07
  • Por isso que eu gosto desse fórum. Muito bom!

    Obrigado galera, vou implementar a sua dica José Diniz, vejo que ela trata melhor o script e tornando-o bem mais enxuto.

    Obrigado a todos.

    quinta-feira, 10 de agosto de 2017 10:53