none
TRIGGER IF(UPDATE) RRS feed

  • Pergunta

  • Olá todo mundo.. tenho a seguinte trigger 

    SELECT * FROM TRIGGER_TESTE
    
    INSERT INTO TRIGGER_TESTE (CPF_DEV, NASC_DEV) VALUES ('45256', '') 
    INSERT INTO TRIGGER_TESTE (CPF_DEV, NASC_DEV, VIRCOBWEBSENHA_DEV) VALUES ('85258', '0', '456454564') 
    INSERT INTO TRIGGER_TESTE (CPF_DEV, NASC_DEV) VALUES ('8552', '13/12/2012') 
    INSERT INTO TRIGGER_TESTE (CPF_DEV, NASC_DEV) VALUES ('5858', '13-05-2018') 
    
    UPDATE TRIGGER_TESTE
    SET nasc_dev = '15/11/1999'
    WHERE cpf_dev = '5858'
    
    
    ALTER TRIGGER [DBO].[TT_TESTE] ON [DBO].[TRIGGER_TESTE]
    FOR UPDATE, INSERT
    AS 
    	IF (UPDATE(NASC_DEV) OR UPDATE(DTNASC_DEV))  
    	BEGIN
    		UPDATE 
    			TT
    		SET
    			TT.DTNASC_DEV = 
    						CASE WHEN
    								EXISTS (SELECT * FROM INSERTED AS INS1
    											WHERE 
    											-- SE A DATA FOR VÁLIDA (1) E MAIOR QUE A DATA ATUAL OU ''
    												((ISDATE(SRC_DEV.DBO.FUN_VALIDACHARTODATE(INS1.NASC_DEV)) = 1) AND
    												 (((SRC_DEV.DBO.FUN_VALIDACHARTODATE(INS1.NASC_DEV)) = '') OR
    												 (SRC_DEV.DBO.FUN_VALIDACHARTODATE(INS1.NASC_DEV)) > GETDATE())
    												 AND INS1.CPF_DEV = TT.CPF_DEV))
    								THEN '01/01/1900'
    								WHEN
    									EXISTS (SELECT * FROM INSERTED AS INS2
    											 -- SE A DATA FOI INVÁLIDA (0)
    											 WHERE (ISDATE(SRC_DEV.DBO.FUN_VALIDACHARTODATE(INS2.NASC_DEV)) = 0)
    											 AND INS2.CPF_DEV = TT.CPF_DEV)
    								THEN '01/01/1900' 
    								ELSE 
    									SRC_DEV.DBO.FUN_VALIDACHARTODATE(INS.NASC_DEV)
    		FROM AUXSRC.DBO.TRIGGER_TESTE AS TT
    		JOIN INSERTED AS INS ON INS.CPF_DEV = TT.CPF_DEV
      
    
    END
    

    Ela vê se as datas do campo nasc_dev estão corretas ou não, colocando, caso for incorreta o numero 01/01/1900. 

    Ela faz isso porém não esta colocando o valor quando o mesmo está correto. Alguém pode me ajudar?! 

    sexta-feira, 27 de junho de 2014 17:59

Respostas

Todas as Respostas

  • Veja o formato de data que o seu banco aceita, tem bancos SQL Server (normalmente em inglês) que insere datetime assim por exemplo ( '1998-01-02 00:00:00.000' ).

    Se a resposta foi útil marcar 'como resposta'.

    sábado, 28 de junho de 2014 00:08