none
ERRO NO TRIGGRE COM VARIAVEIS RRS feed

  • Pergunta

  • GALERA, ESTOU DESENVOLVENDO UMA TRIGGRE POREM ESTA OCORRENDO ERRO NO 'SELECT'.

    SEGUE O CODIGO.

    CREATE trigger [dbo].[Calcula_Tempo_Permanencia]
    on [dbo].[Movimentacao]
    for insert
    as
    declare @DataEntrada datetime
    declare @DataSaida datetime
    declare @Permanencia varchar
    declare @Codigo int


    set @Permanencia=SELECT cast(DATEDIFF(HOUR, @DataEntrada, @DataSaida) as nvarchar(max)) + right( convert(nchar(12), cast(cast(@DataSaida as float) - cast(@DataEntrada as float)  as datetime),   114), 10)

    select @Codigo = Mov_Cod from inserted
    update Movimentacao set Mov_Perman=@Permanencia where Mov_Cod=@Codigo 

    sábado, 2 de fevereiro de 2013 19:10

Respostas

  • Consegui gente. Era uma um " '('   ')' " que passou batido...

    USE [Dados]
    GO
    /****** Object:  Trigger [dbo].[Calcula_Tempo_Permanencia]    Script Date: 02/04/2013 13:43:10 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[Calcula_Tempo_Permanencia]
    on [dbo].[Movimentacao]
    for update
    as
    declare @DataEntrada datetime
    declare @DataSaida datetime
    declare @Permanencia TIME
    declare @Codigo int

    select @DataEntrada = Mov_DataEnt from Movimentacao
    select @DataSaida = Mov_DataSaid from Movimentacao

    set @Permanencia=(SELECT cast(DATEDIFF(HOUR, @DataEntrada, @DataSaida) as nvarchar(max)) + right( convert(nchar(12), cast(cast(@DataSaida as float) - cast(@DataEntrada as float)  as datetime),   114), 10))


    select @Codigo = Mov_Cod from inserted
    update Movimentacao set Mov_Perman=@Permanencia where Mov_Cod=@Codigo


    • Editado Nelson_lucas segunda-feira, 4 de fevereiro de 2013 15:42
    • Marcado como Resposta Nelson_lucas segunda-feira, 4 de fevereiro de 2013 15:43
    segunda-feira, 4 de fevereiro de 2013 15:42

Todas as Respostas

  • Boa tarde,

    Experimente remover o Select para depois executar o Update desta forma:

    update m
    set Mov_Perman = @Permanencia 
    from Movimentacao as m
    join Inserted as i
        on i.Mov_Cod = m.Mov_Cod 

    Espero que ajude.


    Assinatura: http://www.imoveisemexposicao.com.br

    sábado, 2 de fevereiro de 2013 20:03
  • Nelson,

    O retorno da coluna Mov_Cod é do mesmo tipo de dados da variável @Codigo?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 4 de fevereiro de 2013 13:36
  • Consegui gente. Era uma um " '('   ')' " que passou batido...

    USE [Dados]
    GO
    /****** Object:  Trigger [dbo].[Calcula_Tempo_Permanencia]    Script Date: 02/04/2013 13:43:10 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[Calcula_Tempo_Permanencia]
    on [dbo].[Movimentacao]
    for update
    as
    declare @DataEntrada datetime
    declare @DataSaida datetime
    declare @Permanencia TIME
    declare @Codigo int

    select @DataEntrada = Mov_DataEnt from Movimentacao
    select @DataSaida = Mov_DataSaid from Movimentacao

    set @Permanencia=(SELECT cast(DATEDIFF(HOUR, @DataEntrada, @DataSaida) as nvarchar(max)) + right( convert(nchar(12), cast(cast(@DataSaida as float) - cast(@DataEntrada as float)  as datetime),   114), 10))


    select @Codigo = Mov_Cod from inserted
    update Movimentacao set Mov_Perman=@Permanencia where Mov_Cod=@Codigo


    • Editado Nelson_lucas segunda-feira, 4 de fevereiro de 2013 15:42
    • Marcado como Resposta Nelson_lucas segunda-feira, 4 de fevereiro de 2013 15:43
    segunda-feira, 4 de fevereiro de 2013 15:42