none
Cálculo de tempo de execução RRS feed

  • Pergunta

  • tenho uma tabela simples onde atualizo a data de atualização de algumas rotinas criadas no SSIS, com a seguinte estrutura:

    CREATE TABLE [u2628].[Tbl_StatusSistema](
        [id] [smallint] IDENTITY(1,1) NOT NULL,
        [subSistema] [varchar](100) NOT NULL,
        [nomeTabela] [varchar](200) NOT NULL,
        [dataAtualizacao] [date] NOT NULL,
        [dataInclusao] [datetime] NULL,
        [dataInicioAtualizacao] [datetime] NULL,
        [dataFimAtualizacao] [datetime] NULL

    )

    Gostaria de incluir nessa tabela um campo calculado (duracao) onde ele mostrasse o tempo total de execução das rotinas, usando os campos dataInicioAtualizacao e dataFimAtualizacao.

    A ideia é ele mostrar algo assim: 1d 14h 38m 14s 560ms

    Tentei de várias formas calcular precisamente o tempo mas, não consegui....

    Minha primeira tentativa mostra o tempo mas, os campos acumulam o tempo... ou seja, se a rotina demorou 40 horas, o campo mostra 1 d 40h 2400m ....

    Alguém fez algo parecido...??

    [duracao]  AS (case when isnull(datediff(second,[dataInicioAtualizacao],[dataFimAtualizacao]),(0))>=(0) then ((((((((CONVERT([varchar](20),isnull(datediff(day,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0)+'d ')+CONVERT([varchar](20),isnull(datediff(hour,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'h ')+CONVERT([varchar](20),isnull(datediff(minute,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'m ')+CONVERT([varchar](20),isnull(datediff(second,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'s ')+CONVERT([varchar](20),isnull(datediff(millisecond,[dataInicioAtualizacao],[dataFimAtualizacao]),(0)),0))+'ms '  end),

    quinta-feira, 1 de fevereiro de 2018 14:08

Respostas

Todas as Respostas

  • Deleted
    quinta-feira, 1 de fevereiro de 2018 15:56
  • Valeu José!

    Abaixo o código para o campo:

    alter table [u2628].[Tbl_StatusSistema]
        add
       [duracao]
    AS (
           case when
                  isnull(datediff(second, dataInicioAtualizacao, dataFimAtualizacao),0)>=0
           then
    		 	convert(varchar(20), (datediff(second, dataInicioAtualizacao, dataFimAtualizacao) / 86400)) + 'd ' +
    			convert(varchar(20), ((datediff(second, dataInicioAtualizacao, dataFimAtualizacao) % 86400) / 3600)) + 'h ' +
    			convert(varchar(20), ((datediff(second, dataInicioAtualizacao, dataFimAtualizacao) % 3600) / 60)) + 'm ' +
    			convert(varchar(20), (datediff(second, dataInicioAtualizacao, dataFimAtualizacao) % 60)) + 's'
           end
    )

    sexta-feira, 2 de fevereiro de 2018 19:23
  • Deleted
    sexta-feira, 2 de fevereiro de 2018 20:33