Usuário com melhor resposta
Dúvida com Gatilho de Update em Tabela?

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
Respostas
Todas as Respostas
-
-
-
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.
-