Usuário com melhor resposta
Aprimorando Trigger

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.
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. :)
- Editado Vinicius_Fonseca quarta-feira, 9 de agosto de 2017 22:05
-
-