คำตอบ 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 =  @IDMOV

    FETCH NEXT FROM CURSORMOV INTO @IDMOV
    END
    CLOSE CURSORMOV
    DEALLOCATE CURSORMOV

    Nao 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
     
      Contém Código

    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.IDMOV

    resultado

    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
     
      Contém Código

    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
     
      Contém Código

    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:13
     
     
    A 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
     
      Contém Código

    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
     
     Respondido Contém Código

    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
    •