Ir para conteúdo
Fórum Script Brasil
  • 0

TRIGGER e Procedure instrução DML não pode ter gatilhos habilitados se a instrução contém uma cláusula OUTPUT sem cláusula INTO.


elton07

Pergunta

Boa noite!

Estou com uma situação, tenho uma tabela chamada

alm_entrada_produto_item a qual é inserida pela procedure [prc_ALM_InsertEntradaProdutoItem]           

ALTER PROCEDURE [prc_ALM_InsertEntradaProdutoItem]
   @p_id_entidade int,
   @p_id_entrada_produto_item int,
   @p_id_entrada_produto_itemSaida int OUTPUT,
   @p_id_produto int,
   @p_qtde_produto int,
   @p_valor_unitario decimal(10, 2),
   @p_data_validade datetime,
   @p_numero_lote nvarchar(45),
   @p_id_entrada_produto int,
   @p_id_almoxarifado int,
   @p_observacao_entrada varchar(3000),
   @p_tipo_entrada varchar(45),
   @p_id_transferencia int,
   @p_id_estorno int
AS 

BEGIN TRANSACTION
   BEGIN try
      DECLARE
         @contador int

      SELECT @contador = count_big(*)
      FROM dbo.alm_entrada_produto_item
      WHERE (id_entidade=@p_id_entidade) and alm_entrada_produto_item.id_entrada_produto_item = @p_id_entrada_produto_item

      IF @contador > 0
         UPDATE dbo.alm_entrada_produto_item
            SET 
id_produto = @p_id_produto, 
               qtde_produto = @p_qtde_produto, 
               valor_unitario = @p_valor_unitario, 
               data_validade = @p_data_validade, 
               numero_lote = @p_numero_lote, 
               id_almoxarifado = @p_id_almoxarifado, 
               observacao_entrada = @p_observacao_entrada, 
               tipo_entrada = @p_tipo_entrada

      WHERE (id_entidade=@p_id_entidade) and alm_entrada_produto_item.id_entrada_produto_item = @p_id_entrada_produto_item
      ELSE 
         BEGIN

             INSERT dbo.alm_entrada_produto_item(
id_entidade,
            id_produto, 
            qtde_produto, 
            valor_unitario, 
            data_validade, 
            numero_lote, 
            id_entrada_produto, 
            id_almoxarifado, 
            observacao_entrada, 
            tipo_entrada, 
            id_transferencia, 
            id_estorno)
            VALUES (
@p_id_entidade,
               @p_id_produto, 
               @p_qtde_produto, 
               @p_valor_unitario, 
               @p_data_validade, 
               @p_numero_lote, 
               @p_id_entrada_produto, 
               @p_id_almoxarifado, 
               @p_observacao_entrada, 
               @p_tipo_entrada, 
               @p_id_transferencia, 
               @p_id_estorno)
         END
     COMMIT TRANSACTION -- Efetivando alterações na base
         SET @p_id_entrada_produto_itemSaida=SCOPE_IDENTITY()
return @p_id_entrada_produto_itemSaida
   END try
   BEGIN CATCH

    PRINT ERROR_MESSAGE()
    ROLLBACK TRANSACTION -- Desfazendo as alterações na base

END CATCH

----------------------------------

e a Tabela alm_entrada_produto_item contém um trigger que atualiza o saldo do estoque na tabela

 

 

alter TRIGGER [tr_ObterIDAlmAtualizarSaldoEstoque]
ON [dbo].[alm_entrada_produto_item]
AFTER INSERT AS

DECLARE
   @p_id_entidade int

SELECT @p_id_entidade  = (select top 1 id_entidade FROM inserted)

IF (@p_id_entidade is null)
begin
    RAISERROR ('Informe a entidade antes de prosseguir', 11,1);
Rollback;
end
ELSE
begin

EXECUTE prc_ALM_AtualizarEstoque 
SELECT
id_entidade, 
            id_entrada_produto,
            id_produto, 
            qtde_produto, 
            id_almoxarifado, 
            valor_unitario, 
            data_validade, 
            numero_lote
FROM INSERTED
END

 

que por sua vez chama a procedure prc_ALM_AtualizarEstoque  para atualizar o saldo

   

ALTER PROCEDURE prc_ALM_AtualizarEstoque  
   @p_id_entidade int,
   @p_id_entrada_produto int,
   @p_id_produto int,
   @p_qtde_produto int,
   @p_id_almoxarifado int,
   @p_valor_unitario decimal(10, 2),
   @p_data_validade datetime,
   @p_numero_lote nvarchar(45)
AS 
   BEGIN
      DECLARE
         @contador int

      SELECT @contador = count_big(*)
      FROM alm_estoque
      WHERE 
  (id_entidade=@p_id_entidade) AND
         id_produto = @p_id_produto AND 
         id_almoxarifado = @p_id_almoxarifado AND 
         numero_lote = @p_numero_lote AND 
         data_validade = @p_data_validade AND 
         id_entrada_produto = @p_id_entrada_produto

      IF @contador > 0
  begin
         UPDATE alm_estoque
            SET 
               qtde_produto = qtde_produto + @p_qtde_produto, 
               id_almoxarifado = @p_id_almoxarifado
         WHERE (id_entidade=@p_id_entidade) AND
            id_produto = @p_id_produto AND 
            id_almoxarifado = @p_id_almoxarifado AND 
            numero_lote = @p_numero_lote AND 
            data_validade = @p_data_validade AND 
            id_entrada_produto = @p_id_entrada_produto
      end
  ELSE
  begin 
         INSERT dbo.alm_estoque(
    id_entidade, 
            id_entrada_produto,
            id_produto, 
            qtde_produto, 
            id_almoxarifado, 
            valor_unitario, 
            data_validade, 
            numero_lote)
            VALUES (
   @p_id_entidade, 
               @p_id_entrada_produto,
               @p_id_produto, 
               @p_qtde_produto, 
               @p_id_almoxarifado, 
               @p_valor_unitario, 
               @p_data_validade, 
               @p_numero_lote)
   end
   END

 

Porém quando tento incluir na tabela alm_entrada_produto_item me aparece essa mensagem

A tabela de destino 'alm_entrada_produto_item' da instrução DML não pode ter gatilhos habilitados se a instrução contém uma cláusula OUTPUT sem cláusula INTO.

Já tentei de todas as formas, se alguém puder me ajudar, agradeço.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...