Здравствуйте.
Ситуация такая:
Есть таблица разбитая на партишены.
create partition function bls_sdpf (int) as range right for values (20010100);
create partition scheme bls_sdps as partition bls_sdpf all to ([PRIMARY]);
go
-- Create a partitioned table.
create table series_data
(
id bigint not null IDENTITY,
series_id bigint not null,
point_date int not null,
point_value float
)
on bls_sdps(point_date);
go
ALTER TABLE [dbo].[series_data] ADD CONSTRAINT [PK_series_data] PRIMARY KEY CLUSTERED ([id],point_date) on bls_sdps(point_date)
-- Create a partition-aligned columnstore index on the table.
create nonclustered columnstore index bls_sdncci on series_data(point_date);
Я делаю insert записей в эту таблицу следующим образом:
1. Создаю staging table (series_stg)
2. Делаю switch out раздела в эту табличку
alter table series_data switch partition $partition.bls_sdpf(20010200) to series_stg;
3. Заполняю series_stg данными
insert into series_stg(series_id,point_date,point_value)
select series_id,point_date,point_value
from source_data
where point_date = 20010100
4. Делаю switch in в основную таблицу
alter table series_stg switch to series_data partition $partition.bls_sdpf(20010200) ;
При первом заполнении раздела всё отрабатывает и данные попадают в основную таблицу (series_data). Затем операция повторяется. Я делаю switch out того же раздела (заполненного) и пытаюсь дописать в раздел данные (за следующий месяц например):
insert into series_stg(series_id,point_date,point_value)
select series_id,point_date,point_value
from source_data
where point_date = 20010200
В результате получаю ошибку:
Msg 2627, Level 14, State 1, Line 1
Violation of PRIMARY KEY constraint 'PK_series_stg'. Cannot insert duplicate key in object 'dbo.series_stg'. The duplicate key value is (1, 20020100).
The statement has been terminated.Не пойму откуда может браться duplicate key если поле id в series_stg autoincrement ? Как с таким бороться ?
Заметил следующее:
Если вставлять записи курсором , то большинство записей добавляются и только на некоторых возникает ошибка. Причём обязательно с последовательными ключами. Например (39, 20030700) и (40, 20030800)
Заранее благодарю за ответы.