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
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.
Pergunta
elton07
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
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.