Ir para conteúdo
Fórum Script Brasil

jleeestevam

Membros
  • Total de itens

    2
  • Registro em

  • Última visita

Sobre jleeestevam

jleeestevam's Achievements

0

Reputação

  1. 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
  2. Caroa. Tenho a seguinte situação, servidor SRV-APP03, banco de dados origem (MP-OFC), Tabela SB2010, e outro banco, sevidor SRV-HML, banco de dados destino (MP-IFC), tabela C_INVENTORY_QUANT_INT. Fiz 3 trigger (insert, update e delete), que ao atualizar o estoque na tabela "SB2", replica a informação para a tabela "C_INVENTORY_QUANT_INT". Fiz os testes com utilizando o mesmo servidor, tudo ok, porem em servidores diferentes não consegui. alguém pode me ajudar: abaixo a trigger de update. OBS: Aqui está usando o banco MP11-SUP que está no mesmo servidor do MP-IFS, quando eu copio essa trigger para o outro servidor "SRV-APP03", atualizando no servidor "SRV-HML", gera um erro, pois não encontra o servidor destino. USE [MP11-SUP] GO /****** Object: Trigger [dbo].[trgAlteraEstoqueIFS] Script Date: 09/18/2014 11:10:28 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO -- ============================================= -- Author: João -- 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 [MP11-SUP].[dbo].[sB2010] AFTER UPDATE AS BEGIN SET NOCOUNT ON DECLARE @RECNO INT SELECT @RECNO = R_E_C_N_O_ FROM inserted -- Verifica se o saldo em estoque para o Produto e Almoxarifado já existe na tabela do IFS IF (SELECT COUNT(*) FROM [sRV-HML].[MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] WHERE INT_RECNO = @RECNO) = 0 -- Se não existir, cria o registro na tabela C_INVENTORY_QUANT_INT BEGIN INSERT INTO [sRV-HML].[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 INNER JOIN dbo.SB1010 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 [sRV-HML].[MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] SET INT_QTD_ONHAND = B2_QATU, INT_INVENTORY_VALUE = B2_CM1, INT_TYPE = '2' FROM [sRV-HML].[MP-IFS].[dbo].[C_INVENTORY_QUANT_INT] INNER JOIN dbo.SB2010 ON dbo.SB2010.R_E_C_N_O_ = INT_RECNO INNER JOIN dbo.SB1010 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
×
×
  • Criar Novo...