Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как поэлегантней/эффективней получить список версий из system-versioned temporal tables ?  [new]
vikkiv
Member

Откуда: London
Сообщений: 2622
Как поэлегантней и эффективней получить список версий из system-versioned temporal tables ?
например создаю такую таблицу (в Adventure Works Data Warehouse) для версий,
(допустим что строк там по 100 миллионов в на каждый snapshot)
и вставляю туда 3 версии:
use AW17DW;
go
create schema tmp;
go

create table tmp.sales_track(
dat int not null
,qty int
,validfrom datetime2 (2) generated always as row start hidden not null
,validto datetime2 (2) generated always as row end hidden not null
,period for system_time(validfrom,validto)
,constraint sls_hist_pk primary key(dat,validfrom,validto)
)with(system_versioning=on(history_table=tmp.sales_hist));
go
insert into tmp.sales_track(dat,qty)
select[OrderDateKey]dat,
sum([OrderQuantity])qty from dbo.[FactInternetSales]
group by[OrderDateKey];
go
waitfor delay '00:00:01';
insert into tmp.sales_track(dat,qty)
select[OrderDateKey]dat,
10+sum([OrderQuantity])qty from dbo.[FactInternetSales]
group by[OrderDateKey];
go
waitfor delay '00:00:01';
insert into tmp.sales_track(dat,qty)
select[OrderDateKey]dat,
100+sum([OrderQuantity])qty from dbo.[FactInternetSales]
group by[OrderDateKey];
go
/*
alter table tmp.sales_track set(system_versioning=off);
go
drop table if exists tmp.sales_track;
go
drop table if exists tmp.sales_hist;
go
drop schema if exists tmp;
go
*/
21 июн 19, 07:23    [21912580]     Ответить | Цитировать Сообщить модератору
 Re: Как поэлегантней/эффективней получить список версий из system-versioned temporal tables ?  [new]
vikkiv
Member

Откуда: London
Сообщений: 2622
ой, т.е. первый insert только, остальные update
update dbo.sls_trk set q=q+10 ...
waitfor ...
update dbo.sls_trk set q=q+100 ...

естественно запрос через: ... for system_time as of ...
use AW17DW;
go
create schema tmp;
go

create table tmp.sales_track(
dat int not null
,qty int
,validfrom datetime2 (2) generated always as row start hidden not null
,validto datetime2 (2) generated always as row end hidden not null
,period for system_time(validfrom,validto)
,constraint sls_hist_pk primary key(dat,validfrom,validto)
)with(system_versioning=on(history_table=tmp.sales_hist));
go
insert into tmp.sales_track(dat,qty)
select[OrderDateKey]dat,
sum([OrderQuantity])qty from dbo.[FactInternetSales]
group by[OrderDateKey];
go
waitfor delay '00:00:01';
update tmp.sales_track set qty=qty+10;
go
waitfor delay '00:00:01';
update tmp.sales_track set qty=qty+100;
go

/*
select sum(qty)from tmp.sales_track
for system_time as of
--'2019-06-21 04:30:57.66'
--'2019-06-21 04:30:58.68'
*/

/*
alter table tmp.sales_track set(system_versioning=off);
go
drop table if exists tmp.sales_track;
go
drop table if exists tmp.sales_hist;
go
drop schema if exists tmp;
go
*/
21 июн 19, 07:35    [21912585]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить