Array
(
)

Erro na criação da trigger (Conversão de firebird para SQL Server 2008)

Rfb
   - 05 jul 2012

Olá amigos.
Estou adaptando um sistema de Firefox para SQL Server.
Acontece que quando tento criar esta trigger ele me retorno erros do tipo:
Msg 4104, Level 16, State 1, Procedure TAU_MOV_FINANCEIRO, Line 12
The multi-part identifier NEW.DATA_BAIXA could not be bound.
Msg 4104, Level 16, State 1, Procedure TAU_MOV_FINANCEIRO, Line 35
The multi-part identifier NEW.CODIGO_CONTA could not be bound.
Msg 4104, Level 16, State 1, Procedure TAU_MOV_FINANCEIRO, Line 36
The multi-part identifier NEW.CODIGO_AGENCIA could not be bound.
Msg 4104, Level 16, State 1, Procedure TAU_MOV_FINANCEIRO, Line 37
The multi-part identifier NEW.CODIGO_BANCO could not be bound.
ETC..
Alguém sabe onde esta o erro nas declarações?
Obrigado

CREATE TRIGGER TAU_MOV_FINANCEIRO ON MOV_FINANCEIRO
AFTER UPDATE
AS
BEGIN
/* Variável para armazenar o código do movimento. */
DECLARE @CodMovBco INTEGER;

/* Se a data da baixa não for nula. */
IF (NEW.DATA_BAIXA IS NOT NULL)
BEGIN
/* Pega o último código de movimento + 1. */
SET @CodMovBco = ( SELECT MAX(CODIGO_MOVBCO) + 1
FROM MOV_BANCARIO );
/* Adiciona o movimento bancário do título baixado. */

INSERT INTO MOV_BANCARIO(
CODIGO_MOVBCO,
CODIGO_CONTA,
CODIGO_AGENCIA,
CODIGO_BANCO,
CODIGO_UNIDADE,
RECEITA_DESPESA,
DATA_LANCAMENTO,
VALOR_LANCAMENTO,
CONCILIADO,
HISTORICO,
ORIGEM_MOVIMENTO)
VALUES(
@CodMovBco,
NEW.CODIGO_CONTA,
NEW.CODIGO_AGENCIA,
NEW.CODIGO_BANCO,
NEW.CODIGO_UNIDADE,
NEW.RECEITA_DESPESA,
NEW.DATA_BAIXA,
NEW.VALOR_BAIXA,
N,
NEW.HISTORICO,
F);
END
END

Cleber
   - 05 jul 2012

Ronaldo,

não sou grande conhecedor de SQL Server mas acredito que o mesmo não disponha das palavras reservadas OLD e NEW para referenciar os dados inseridos e alterados. No SQL Server você pode usar o inserted e o deleted, como no exemplo abaixo.

Por exemplo:

-- Você pode substituir
#Código

  IF (NEW.DATA_BAIXA IS NOT NULL) 


-- Por

#Código
DECLARE @data_baixa DATE
SET @data_baixa = (SELECT data_baixa INSERTED)

IF(@data_baixa IS NOT NULL)
BEGIN
...
END


Ronaldo como eu disse não sou um especialista no SQL Server, posso estar falando alguma bobagem.

Espero ter ajudado.