Boa noite pessoal.
Desenvolvi uma Trigger para atualizar valor de frete da cotação, baseado em uma tabela Z. Porém quando starto o gatilho com um Update na tabela em questão (TCORCAMENTO), ele traz o valor e grava corretamente, porém quando altero a cotação para simular o gatilho, ele grava valor NULL incorretamente e não gera nenhum erro. Já testei se era a sub-select, parâmetros, tempo de execução, mas detectei na verdade que ocorre quando uso relacionamento. Já retirei os Inner Join e também não resolveu.
Alguém sabe se o RM tem alguma limitação neste sentido, ou necessita de algum tratamento no código?
Sintetizei os blocos para simulação, segue exemplo abaixo das sentenças simplificadas com RELACIONAMENTO (não funciona) e SEM RELACIONAMENTO (funciona ok).
Em resumo, necessitarei relacionar tabelas para compor o valor do frete e posteriormente levar também o ST baseado no MVA. Anexo a SELECT completa caso necessário.
Obrigado pela ajuda,
Flávio.
****** Object: Trigger [dbo].[Calculo_ST_Cotacao2] Script Date: 07/11/2013 15:59:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[Calculo_ST_Cotacao2]
ON [dbo].[TCORCAMENTO]
AFTER INSERT, UPDATE--
DECLARE @CODCOLIGADA INT
DECLARE @CODCOTACAO VARCHAR(11)
DECLARE @CODCFO VARCHAR (11)
DECLARE @NSEQITMMOV INT
DECLARE @TIPOFRETE VARCHAR (5)
DECLARE @VALORFRETE NUMERIC(15,4)
SET @CODCOLIGADA = 1
SET @CODCOTACAO = (SELECT CODCOTACAO FROM INSERTED )
SET @CODCFO = (SELECT CODCFO FROM INSERTED )
SET @TIPOFRETE = (SELECT FRETECIFOUFOB FROM INSERTED )
SET @VALORFRETE =
---select traz resultado NULL, quando gatilho é acionado 'via RM'. Porém com gatilho acionado 'via SQL', funciona corretamente.
(SELECT 100 as 'teste' FROM TCORCAMENTO(NOLOCK), TCITMORCAMENTO(NOLOCK) WHERE
TCORCAMENTO.CODCOTACAO = TCITMORCAMENTO.CODCOTACAO AND
TCORCAMENTO.CODCOLIGADA = TCITMORCAMENTO.CODCOLIGADA AND
TCORCAMENTO.CODCFO = TCITMORCAMENTO.CODCFO AND
TCORCAMENTO.CODCOTACAO like '2013%237%' AND
TCORCAMENTO.CODCFO = 'F001160' )
---select traz RESULTADO CORRETO, quando gatilho é acionado via RM e via SQL
/*
(SELECT 100 as 'teste' FROM TCORCAMENTO(NOLOCK) WHERE
TCORCAMENTO.CODCOTACAO like '2013%237%' AND
TCORCAMENTO.CODCFO = 'F001160')
*/
--- grava resultado da select
UPDATE TCORCAMENTO SET TCORCAMENTO.VALORFRETE = @VALORFRETE
WHERE
TCORCAMENTO.CODCOTACAO like '2013%237%' AND
TCORCAMENTO.CODCFO = 'F001160'
Select_valor_frete.txt