• 0
Sign in to follow this  
elton07

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.

Question

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 ([email protected]_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 ([email protected]_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 
  ([email protected]_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 ([email protected]_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.

Share this post


Link to post
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this