Perguntas trigger - deadlock

Mais
10 anos 1 mês atrás #25499 por jleee
trigger - deadlock foi criado por jleee
Caros, estou com problema no gatilho abaixo, após qualquer movimentação na tabela SB2, o sistema replica o saldo de estoque para o banco MP_IFS, a rotina funciona, porém tem dado erro de DeadLock ao atualizar a tabela SB2.

SB2010: DB error (Update): -29 File: SB2010 - Error : 1205 (40001) (RC=-1) - [Microsoft][ODBC SQL Server Driver][SQL Server]Transaction (Process ID 51) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. ( From tISAMFile::Update )


Trigger abaixo:


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

Por favor Acessar ou Registrar para participar da conversa.

Tempo para a criação da página:0.068 segundos
Joomla templates by a4joomla