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

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

Есть два пакета служб 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 Execute SQL Task.

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

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


person user3812887    schedule 12.10.2018    source источник


Ответы (1)


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

DECLARE @MaxID INT

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

DBCC CHECKIDENT ('dbo.YourTable', RESEED, @MaxID);
person userfl89    schedule 12.10.2018