none
Dúvida com Gatilho de Update em Tabela? RRS feed

  • Pergunta

  • Tenho duas tabelas, perguntas e respostas, é gostaria de atualiza as mesmas de acordo com o que for selecionado: Banco Sql Server 2005

    Problema:

    --usuário excluindo a pergunta (não está gravando a data da exclusão é não está excluindo as respostas)
    update TB_PERGUNTA set EXCLUIR_PERGUNTA = 'S' where IDPERGUNTA = 4 and IDUSUARIO = 1
    
    
    --moderador excluindo a pergunta (não está gravando a data da exclusão é não está excluindo as respostas)
    update TB_PERGUNTA set BLOQUEIO_PERGUNTA = 'S' where IDPERGUNTA = 4 and IDMODERADOR = 7

    Create table [TB_PERGUNTA]
    (
        [IDPERGUNTA] Integer NOT NULL, UNIQUE ([IDPERGUNTA]),
        [IDCATEGORIA] Integer NOT NULL,
        [IDUSUARIO] Integer NOT NULL,
        [IDMODERADOR] Integer NOT NULL,
        [TITULO_PERGUNTA] Text NULL,
        [DESCRICAO_PERGUNTA] Text NULL,
        [BLOQUEIO_PERGUNTA] Char(1) NULL,
        [DESCRICAO_BLOQUEIO] Text NULL,
        [EXCLUIR_PERGUNTA] Char(1) NULL,
        [DATA_PERGUNTA] Datetime NULL,
        [DATA_EXCLUIR] Datetime NULL,
    Primary Key ([IDPERGUNTA])
    ) 
    go
    
    Create table [TB_RESPOSTA]
    (
        [IDRESPOSTA] Integer NOT NULL, UNIQUE ([IDRESPOSTA]),
        [IDPERGUNTA] Integer NOT NULL,
        [IDUSUARIO] Integer NOT NULL,
        [IDMODERADOR] Integer NOT NULL,
        [RESPOSTA] Text NULL,
        [RESPOSTA_SELECIONADA] Char(1) NULL,
        [NOTA_RESPOSTA] Numeric(3,2) NULL,
        [BLOQUEIO_RESPOSTA] Char(1) NULL,
        [DESCRICAO_BLOQUEIO] Text NULL,
        [DATA_RESPOSTA] Datetime NULL,
        [DATA_EXCLUIR] Datetime NULL,
    Primary Key ([IDRESPOSTA],[IDPERGUNTA])
    ) 
    go

    Tenho a Trigger:

    --gatilho para atualiza a tabela de pergunta é resposta no caso de exclusão pelo usuário
    --ou pelo moderador
    CREATE TRIGGER TGR_TB_PERGUNTA_UPDATE
     ON [dbo].[TB_PERGUNTA]
     FOR UPDATE
    AS
    BEGIN
       DECLARE @EXCLUIRPERGUNTA CHAR
       DECLARE @BLOQUEIOPERGUNTA CHAR
       DECLARE @IDPERGUNTA INT
       DECLARE @IDUSUARIO INT
       DECLARE @IDMODERADOR INT
    
       --se o excluirpergunta receber (S) então o usuário está bloqueando a pergunta se (N) está abrindo a pergunta
       SELECT  @EXCLUIRPERGUNTA  = EXCLUIR_PERGUNTA  FROM TB_PERGUNTA INSERTED
       --se o bloqueiopergunta receber (S) então o moderador está bloqueando a pergunta se (N) está abrindo a pergunta
       SELECT  @BLOQUEIOPERGUNTA = BLOQUEIO_PERGUNTA FROM TB_PERGUNTA INSERTED
       --pega o ID da pergunta
       SELECT  @IDPERGUNTA       = IDPERGUNTA        FROM TB_PERGUNTA INSERTED
       --pega o id do usuário
       SELECT  @IDUSUARIO        = IDUSUARIO         FROM TB_PERGUNTA INSERTED
       --pega o id do moderador
       SELECT  @IDMODERADOR      = IDMODERADOR       FROM TB_PERGUNTA INSERTED   
    
        --pergunta excluida pelo usuário 
       IF ( @EXCLUIRPERGUNTA = 'S')
        BEGIN
          --excluir a pergunta
         UPDATE TB_PERGUNTA  SET  EXCLUIR_PERGUNTA = 'S', 
                DESCRICAO_BLOQUEIO = 'Excluido pelo usuário' ,
                DATA_EXCLUIR = CONVERT(VARCHAR, GETDATE(), 20)
                WHERE IDPERGUNTA = @IDPERGUNTA AND IDUSUARIO =  @IDUSUARIO 
    
              --excluir todas as respostas referente a pergunta
         UPDATE TB_RESPOSTA SET BLOQUEIO_RESPOSTA = 'S', 
                DATA_EXCLUIR = CONVERT(VARCHAR, GETDATE(), 20),
                DESCRICAO_BLOQUEIO = 'Excluido pelo usuário'  WHERE IDPERGUNTA = @IDPERGUNTA          
        END
    
        --pergunta bloqueada pelo moderador
       IF ( @BLOQUEIOPERGUNTA = 'S')
        BEGIN
         --excluir pergunta
         UPDATE TB_PERGUNTA  SET BLOQUEIO_PERGUNTA = 'S', 
              DESCRICAO_BLOQUEIO = 'Está pergunta foi bloqueada pelo moderador',  
              DATA_EXCLUIR = CONVERT(VARCHAR, GETDATE(), 20)
              WHERE IDPERGUNTA = @IDPERGUNTA AND IDMODERADOR =  @IDMODERADOR
    
              --excluir respostas
         UPDATE TB_RESPOSTA SET BLOQUEIO_RESPOSTA = 'S', 
             DATA_EXCLUIR = CONVERT(VARCHAR, GETDATE(), 20),
             DESCRICAO_BLOQUEIO = 'Excluido pelo moderador'  
             WHERE IDPERGUNTA = @IDPERGUNTA  
    
        END
    
        --pergunta aberta pelo usuário 
       IF ( @EXCLUIRPERGUNTA = 'N')
        BEGIN
          --pergunta aberta pelo usuário 
         UPDATE TB_PERGUNTA  SET  EXCLUIR_PERGUNTA = 'N', 
                DESCRICAO_BLOQUEIO = 'Excluido pelo usuário' , 
                DATA_EXCLUIR = null
                WHERE IDPERGUNTA = @IDPERGUNTA 
                AND IDUSUARIO =  @IDUSUARIO  
    
           --abre todas as respostas    
         UPDATE TB_RESPOSTA SET BLOQUEIO_RESPOSTA = 'N',
               DATA_EXCLUIR =null,
               DESCRICAO_BLOQUEIO = null 
               WHERE IDPERGUNTA = @IDPERGUNTA          
        END
    
        --pergunta aberta pelo moderador
       IF ( @BLOQUEIOPERGUNTA = 'N')
        BEGIN
         --abre a pergunta pelo moderador
         UPDATE TB_PERGUNTA  SET BLOQUEIO_PERGUNTA = 'N', 
                DESCRICAO_BLOQUEIO =null, 
                DATA_EXCLUIR =null
                WHERE IDPERGUNTA = @IDPERGUNTA 
                AND IDMODERADOR =  @IDMODERADOR
    
          --abre todas as respostas pelo moderador
         UPDATE TB_RESPOSTA SET BLOQUEIO_RESPOSTA = 'N', 
               DATA_EXCLUIR = null, 
               DESCRICAO_BLOQUEIO =null  
               WHERE IDPERGUNTA = @IDPERGUNTA  
               AND IDMODERADOR =  @IDMODERADOR  
        END
    
    END

    segunda-feira, 6 de julho de 2015 17:21

Respostas

Todas as Respostas

  • Deleted
    segunda-feira, 6 de julho de 2015 17:36
  • Deleted
    segunda-feira, 6 de julho de 2015 18:00
  • Agradeço a resposta

    De acordo com a lógica, se um usuário faz uma pergunta, ele precisa  informar o IDUSUARIO é o IDPERGUNTA porque o campo EXCLUIR_PERGUNTA está sendo usado por ele para excluir a pergunta correspondente ou para abri a pergunta. O código que postei esta fazendo isso, mais não está atualizando de forma correta, eu preciso também atualizar a DATA_EXCLUIR é depois atualizar a tabela de respostas onde o IDPERGUNTA seja igual ao da pergunta excluída.

    segunda-feira, 6 de julho de 2015 20:25
  • Deleted
    • Marcado como Resposta Marcos SJ sexta-feira, 10 de julho de 2015 19:35
    segunda-feira, 6 de julho de 2015 22:00