1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
create table t_time
(
id int not null primary key identity,
[time] datetime not null,
col_a char(8) not null,
col_b int not null,
col_c decimal(10,2) not null,
col_d varbinary(8) not null
);
go
declare @i int;
declare @dte datetime;
select @i = 100000, @dte = getdate();
while @i > 0
begin
with tmp ([time])
as
(
select dateadd(second, @i * -1000, @dte)
union all
select dateadd(second, 1, tmp.[time])
from tmp
where tmp.time < dateadd(second, ((@i - 1) * -1000) - 1, @dte)
)
insert into t_time ([time], col_a, col_b, col_c, col_d)
select [time], DATENAME(weekday, [time]), DATEPART(month, [time]), DATEPART(minute, [time]) + cast(DATEPART(second, [time]) as decimal) / 100, cast(DATEPART(nanosecond, [time]) as varbinary(8))
from tmp
option (maxrecursion 0);
set @i = @i - 1;
end;
go
create index ix_time on t_time ([time]);
go |