Команда DBCC для повторной идентификации идентификатора таблицы внутри задачи «Выполнение SQL» в службах SSIS - PullRequest
0 голосов
/ 12 октября 2018

У меня есть ситуация, в которой таблица фактов загружается каждый день.

Есть два пакета служб SSIS, которые загружают эту таблицу.

1) Package1_FullLoad.dtsx - запускается каждое воскресенье, сполное обновление

2) Package2_DailyLoad.dtsx - запускается во все дни, кроме воскресенья, удаляет и загружает данные только за последние 14 дней.

Теперь пакет с полной загрузкой (Package1_FullLoad.dtsx)) имеет задачу «Выполнение SQL», обрезает все строки таблицы фактов.

Затем поток данных загружает таблицу фактов с нуля.

В этом случае начинается значение идентификатора таблицы фактов.от 1 и увеличивается на 1, и это нормально, без проблем.

Однако для пакета ежедневной загрузки (Package2_DailyLoad.dtsx) после оператора DELETE (который удаляет данные только за последние 14 дней),в задаче «Выполнение SQL» я устанавливаю этот код:

DBCC CHECKIDENT ('dbo.FactTable', RESEED, 1) DBCC CHECKIDENT ('dbo.FactTable', RESEED)

Затем я запускаюпоток данных для загрузки тДанные, в которые вставляются только данные, соответствующие прошедшим 14 дням.

Скажем, в таблице фактов есть 10 строк после полной загрузки (возьмем в качестве примера, чтобы лучше проиллюстрировать ситуацию), и 3 удаляются сегодняи 5 должны быть вставлены сегодня (вставка и удаление должны выполняться с помощью ежедневного пакета загрузки сегодня), новое значение идентификатора должно начинаться с 8 и заканчиваться на 12. Вместо этого я вижу новое значение идентификатора, начинающееся с 11 и заканчивающееся на 15.

Я не вижу никакого влияния в этом коде DBCC в задаче SSIS «Выполнение SQL».

Этот код DBCC прекрасно работает в SSMS на стороне базы данных.

Любая идея окак решить эту проблему?

1 Ответ

0 голосов
/ 12 октября 2018

Вы можете сохранить максимальное значение из столбца идентификаторов в переменной, а затем выполнить DBCC CHECKIDENT, используя это, поскольку значение в столбце идентификаторов для следующей вставленной строки будет равно этому плюс текущее приращение.Например

DECLARE @MaxID INT

SET @MaxID = (SELECT MAX(IdentityColumn) FROM dbo.YourTable)

DBCC CHECKIDENT ('dbo.YourTable', RESEED, @MaxID);
...