USP_POPULATETIMEDIM

Definition

Copy

create procedure BBDW.[USP_POPULATETIMEDIM] as

declare @TIME datetime
set @TIME = convert(varchar, '12:00:00 AM', 108)

if (select count(1) from BBDW.[DIM_TIME]) <> 1441

  begin

    truncate table BBDW.[DIM_TIME]

    begin

      set identity_insert BBDW.[DIM_TIME] on

      insert into BBDW.[DIM_TIME]([TIMEDIMID], [TIME], [TIMESTRING], [HOUR], [HOURSTRING], [MILITARYHOUR], [MILITARYHOURSTRING], [MINUTE], [MINUTESTRING], [AMPM], [AMPMCODE], [STANDARDTIME], [MILITARYTIME], [ETLCONTROLID], [SOURCEDIMID], [ISINCLUDED])
        select
          0,
          null,
          '',
          0,
          '',
          0,
          '',
          0,
          '',
          '',
          0,
          '',
          '',
          0,
          1,
          0

      set identity_insert BBDW.[DIM_TIME] off

    end

    while @TIME <= '11:59:59 PM'

     begin

       insert into BBDW.[DIM_TIME]([TIME], [HOUR], [MILITARYHOUR], [MINUTE], [AMPM], [AMPMCODE], [ETLCONTROLID], [SOURCEDIMID], [ISINCLUDED])
         select 
           convert(time, @TIME, 108) as  [TIME],
           case 
            when datepart(hour, @TIME) > 12 then datepart(hour, @TIME) - 12
            else datepart(hour, @TIME
            end as [HOUR],
           cast(substring(convert(varchar, @TIME, 108), 1,2 ) as tinyint) [MILITARYHOUR],
           datepart(minute, @TIME) [MINUTE],
           case 
            when datepart(hour, @TIME) >= 12 then 'PM'
            else 'AM'
            end as [AMPM],
           case 
            when datepart(hour, @TIME) >= 12 then 1
            else 0
            end as [AMPMCODE],
           0 as [ETLCONTROLID],
           1 as [SOURCEDIMID],
           1 as [ISINCLUDED];

       select @TIME = dateadd(minute, 1, @TIME)

     end

    update BBDW.[DIM_TIME]
      set 
        [HOURSTRING] = 
          case when [HOUR] <> '00'
            then cast([HOUR] as nvarchar(2))
            else '12'
          end,
        [MINUTESTRING] = 
          case when len(cast([MINUTE] as nvarchar(2))) = 2
            then cast([MINUTE] as nvarchar(2))
            else '0' + cast([MINUTE] as nvarchar(2))
            end,
        [MILITARYHOURSTRING] = 
          case when len(cast([MILITARYHOUR] as nvarchar(2))) = 2
          then cast([MILITARYHOUR] as nvarchar(2))
          else '0' + cast([MILITARYHOUR] as nvarchar(2))
          end
    where [TIMEDIMID] > 0;

    update BBDW.[DIM_TIME]
      set 
        [TIMESTRING] = 
          case when len([HOURSTRING]) = 1 
            then '0' + cast([HOURSTRING] as nchar(1))+ [MINUTESTRING]
            else [HOURSTRING] + [MINUTESTRING]
            end,
        [STANDARDTIME] = rtrim([HOURSTRING]) + ':' + [MINUTESTRING] + ' ' + [AMPM],
        [MILITARYTIME] = [MILITARYHOURSTRING] + ':' + [MINUTESTRING]
    where [TIMEDIMID] > 0;

  end;