Pesquisar na Comunidade
Mostrando resultados para as tags ''DEADLOCK trigger''.
Encontrado 1 registro
-
Utilizamos o Microsiga aqui na Empresa, e compramos um sistema para Manutenção de Ativo (IFS), acontece que tenho que enviar o saldo de estoque de materiais em tempo real do microsiga para o IFS. A saída que encontrei foi criar um banco paralelo com uma tabela de estoque em que eu atualizasse os saldos a cada modificação, ficando assim: tenho uma tabela de Saldos em Estoque no microsiga "SB2010" - nome do banco [MP-OFC] tenho uma tabela de Saldos em Estoque: "C_INVENTORY_QUANT_INT" - nome do banco [MP-IFS] A cada movimentação de estoque no microsiga, o sistema atualiza os saldo nesta tabela SB2, assim criei um Gatilho nesta tabela, pelo SQL que atualiza a tabela C_INVENTORY_QUANT_INT com o saldo atual. Acontece que está dando erro de DEADLOCK no microsiga, parando o sistema (causando muitos problemas), Acredito, que em teoria não deveria dar erro, pois estou atualizando a tabela SB2 pelo microsiga e somente lendo os dados atualizados pela trigger para atualizar a tabela C_INVENTORY_QUANT_INT. USE [MP-OFC] GO /****** Object: Trigger [dbo].[trgAlteraEstoqueIFS] Script Date: 10/03/2014 10:43:54 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: João Lucas Esteves e Estevam -- Create date: 04/06/2014 -- Description: Altera um registro na tabela C_INVENTORY_QUANT_INT Banco MP-IFS quando um registro for -- alterado na tabela SB2010 -- ============================================= ALTER TRIGGER [dbo].[trgAlteraEstoqueIFS] ON [MP-OFC].[dbo].[sB2010] AFTER UPDATE AS BEGIN SET NOCOUNT ON DECLARE @RECNO INT SELECT @RECNO = R_E_C_N_O_ FROM inserted WITH (NOLOCK) IF NOT @RECNO IS NULL BEGIN -- Verifica se o saldo em estoque para o Produto e Almoxarifado já existe na tabela do IFS IF (SELECT COUNT(*) FROM [MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] WITH (NOLOCK) WHERE INT_RECNO = @RECNO) = 0 -- Se não existir, cria o registro na tabela C_INVENTORY_QUANT_INT BEGIN INSERT INTO [MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] ([iNT_PART_NO] ,[iNT_DESCRIPTION] ,[iNT_QTD_ONHAND] ,[iNT_LOCAL_NO] ,[iNT_SERIAL_NO] ,[iNT_LOT_BATCH_NO] ,[iNT_INVENTORY_VALUE] ,[iNT_TYPE] ,[iNT_RECNO]) SELECT dbo.SB1010.B1_COD, dbo.SB1010.B1_DESC, dbo.SB2010.B2_QATU, dbo.SB2010.B2_LOCAL, '', '', dbo.SB2010.B2_CM1, '1', dbo.SB2010.R_E_C_N_O_ FROM dbo.SB2010 WITH (NOLOCK) INNER JOIN dbo.SB1010 WITH (NOLOCK) ON dbo.SB1010.B1_COD=dbo.SB2010.B2_COD WHERE dbo.SB2010.D_E_L_E_T_ <> '*' AND dbo.SB1010.D_E_L_E_T_ <> '*' AND dbo.SB2010.R_E_C_N_O_ = @RECNO END ELSE -- Se exitir Efetua a atualização do Estoque e Custo médio no Item BEGIN UPDATE [MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] SET INT_QTD_ONHAND = B2_QATU, INT_INVENTORY_VALUE = B2_CM1, INT_TYPE = '2' FROM [MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] INNER JOIN dbo.SB2010 WITH (NOLOCK) ON dbo.SB2010.R_E_C_N_O_ = INT_RECNO INNER JOIN dbo.SB1010 WITH (NOLOCK) ON dbo.SB1010.B1_COD=dbo.SB2010.B2_COD WHERE dbo.SB2010.D_E_L_E_T_ <> '*' AND dbo.SB1010.D_E_L_E_T_ <> '*' AND dbo.SB2010.R_E_C_N_O_ = @RECNO END END END