Ajuda na Trigger
-
segunda-feira, 11 de junho de 2012 18:10
Prezados Boa tarde,
vejam se podem me ajudar.
Tenho essa Trigger abaixo:
USE [CORPORERM]
GO
/****** Object: Trigger [dbo].[ASSINATURA_DIRETORIA] Script Date: 06/06/2012 16:31:49 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[COMPRAS] ON [dbo].[TCCOTACAO]
FOR INSERT
AS
DECLARE @IDMOV INT
DECLARE CURSORMOV CURSOR FOR
SELECT T2.IDMOV FROM TCCOTACAO AS T
INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA
INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV
INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV
INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV
WHERE T.OBSERVACAO IS NOT NULL AND T2.TIPOMOVCOMPRAS = '2'AND T4.IDMOV = T2.IDMOV
OPEN CURSORMOV
FETCH NEXT FROM CURSORMOV INTO @IDMOV
WHILE @@FETCH_STATUS = 0
BEGIN
UPDATE T4 SET T4.COMPRAS = T.observacao
FROM TCCOTACAO AS T
INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA
INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV
INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV
INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV
WHERE T.OBSERVACAO IS NOT NULL AND T4.IDMOV = @IDMOVFETCH NEXT FROM CURSORMOV INTO @IDMOV
END
CLOSE CURSORMOV
DEALLOCATE CURSORMOVNao sei por qual motivo ele nao esta atualizando o Update, agradeço a ajuda de todos.
Todas as Respostas
-
segunda-feira, 11 de junho de 2012 20:09
Olá Ronnie,
não entendi muito bem, ele não esta fazendo o update???
a instrução abaixo retorna algum dado?
SELECT T2.IDMOV FROM TCCOTACAO AS T INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV WHERE T.OBSERVACAO IS NOT NULL AND T2.TIPOMOVCOMPRAS = '2'AND T4.IDMOV = T2.IDMOV
Att.
Lukas Baldan -
segunda-feira, 11 de junho de 2012 20:20
Ola Lukas!
Retorna sim, veja ai.
SELECT T2.IDMOV,T.OBSERVACAO,T4.COMPRAS FROM TCCOTACAO AS T
INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA
INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV
INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV
INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV
WHERE T.OBSERVACAO IS NOT NULL AND T2.TIPOMOVCOMPRAS = '2'AND T4.IDMOV = T2.IDMOVresultado
Idmov Observacao Compras
168338 Entregar na Obra 33
Qual a ideia da trigger e comparar os IDMOVs, e o campo COMPRAS tem que ser igual a descricao do CAMPO Observação.
-
terça-feira, 12 de junho de 2012 12:22
Ok Ronnie, porque você esta ultilizando um cursor????
da forma que esta no código,
acredito que toda vez que um registro for incluido ele vai abrir um cursor com todos os registros da tabela
tente desta forma,
USE [CORPORERM] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[COMPRAS] ON [dbo].[TCCOTACAO] FOR INSERT AS BEGIN UPDATE T4 SET T4.COMPRAS = T.observacao FROM inserted AS T INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV WHERE T.OBSERVACAO IS NOT NULL AND T2.TIPOMOVCOMPRAS = '2'AND T4.IDMOV = T2.IDMOV END
A tabela inserted possui o registro inserido.Att.
Lukas Baldan -
terça-feira, 12 de junho de 2012 12:35
Ola Lukas me desculpas, porem eu fui rodar e apareceu esse mensagem veja.
Msg 311, Level 16, State 1, Procedure COMPRAS, Line 13
Cannot use text, ntext, or image columns in the 'inserted' and 'deleted' tables.
agradeço.
-
terça-feira, 12 de junho de 2012 12:45
Ok, este erro aconteceu por causa do campo observação,
qual a chave primaria da tabela TCCOTACAO???
se for o campo CODCOTACAO
tente desta forma
USE [CORPORERM] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[COMPRAS] ON [dbo].[TCCOTACAO] FOR INSERT AS BEGIN UPDATE T4 SET T4.COMPRAS = T.observacao FROM TCCOTACAO AS T INNER JOIN INSERTED AS I ON I.CODCOTACAO = T.CODCOTACAO INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV WHERE T.OBSERVACAO IS NOT NULL AND T2.TIPOMOVCOMPRAS = '2'AND T4.IDMOV = T2.IDMOV END
Att.
Lukas Baldan -
terça-feira, 12 de junho de 2012 13:03
Ola Lukas e Chama primaria e IDMOV.
estamos quase conseguindo.
-
terça-feira, 12 de junho de 2012 13:13A Chave primária da tabela ***TCCOTACAO*** é idmov??
Att.
Lukas Baldan -
terça-feira, 12 de junho de 2012 13:24
Desculpas LUkas e isso mesmo, Chave primaria e IDMOV.
-
terça-feira, 12 de junho de 2012 13:30
Então tente desta forma
USE [CORPORERM] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[COMPRAS] ON [dbo].[TCCOTACAO] FOR INSERT AS BEGIN UPDATE T4 SET T4.COMPRAS = T.observacao FROM TCCOTACAO AS T INNER JOIN INSERTED AS I ON I.IDMOV= T.IDMOV INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV WHERE T.OBSERVACAO IS NOT NULL AND T2.TIPOMOVCOMPRAS = '2'AND T4.IDMOV = T2.IDMOV END
Att.
Lukas Baldan -
terça-feira, 12 de junho de 2012 14:08
Ola Lukas estou ficando sem graça Ja, mas ocorreu esse erro:
Msg 207, Level 16, State 1, Procedure COMPRAS, Line 10
Invalid column name 'IDMOV'.
Msg 207, Level 16, State 1, Procedure COMPRAS, Line 10
Invalid column name 'IDMOV'.
-
terça-feira, 12 de junho de 2012 14:09
Ronnie isso quer dizer que a chave primaria da tabela TCCOTACAO não é idmov
tente assim
USE [CORPORERM] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER TRIGGER [dbo].[COMPRAS] ON [dbo].[TCCOTACAO] FOR INSERT AS BEGIN UPDATE T4 SET T4.COMPRAS = T.observacao FROM TCCOTACAO AS T INNER JOIN INSERTED AS I ON I.CODCOTACAO = T.CODCOTACAO INNER JOIN TCCOTACAOITMMOV AS T2 ON T2.CODCOTACAO = T.CODCOTACAO AND T2.CODCOLIGADA = T.CODCOLIGADA INNER JOIN TITMMOV AS TT ON TT.CODCOLIGADA = T2.CODCOLMOV AND TT.IDMOV = T2.IDMOV AND TT.NSEQITMMOV = T2.NSEQITMMOV INNER JOIN TMOV AS T3 ON T3.CODCOLIGADA = TT.CODCOLIGADA AND T3.IDMOV = TT.IDMOV INNER JOIN TMOVCOMPL AS T4 ON T4.CODCOLIGADA = T3.CODCOLIGADA AND T4.IDMOV = T3.IDMOV WHERE T.OBSERVACAO IS NOT NULL AND T2.TIPOMOVCOMPRAS = '2'AND T4.IDMOV = T2.IDMOV END
Att.
Lukas Baldan- Marcado como Resposta Ronnie Von terça-feira, 10 de julho de 2012 15:01

