2015-02-09 3 views
0

У меня есть простой поток данных в SSIS (определенный в visual studio 2013), который использует SQL для извлечения данных из таблицы экземпляров SQL-сервера SQL, а затем добавляет их в таблицу экземпляра SQL-сервера B.Усечение таблицы в SSIS

Каков наилучший способ усечения данных в таблице B? Заявление усечения как это:

TRUNCATE TABLE B 

после оператора выбора для таблицы А - особенно если у вас есть достаточно большой стол для «передачи»?

+0

Fisrt имеет ли таблица b какие-либо ограничения внешнего ключа? и как liong, если когда-либо, таблица может быть без информации. Другими словами, нормально ли урезать и что займет 15 минут или час или что-то еще, чтобы пополнить этот стол или вы должны постоянно оставаться на месте? – HLGEM

+0

Спасибо. В этом случае нет - это просто таблица чистого измерения. В идеале это должно включать как можно меньше времени простоя B. Является ли слияние единственным решением? – cs0815

+1

Я бы сделал поток данных в промежуточную таблицу на том же сервере, что и в таблице B, а затем выполнил операцию truncate/repopulate/merge/upsert в сохраненном proc. –

ответ

1

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

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

Затем задача exec SQl усекает таблицу, которая в настоящее время не используется. Вы также можете отказаться от любых индексов на этом этапе.

Затем поток данных заполняет таблицу, которая в настоящее время не используется.

Затем воссоздайте все индексы, которые вы уронили.

Наконец, задача exec SQL падает и создает представление для использования только что заполненной таблицы, а не другой.

Общее время простоя таблицы, на которую делается ссылка? Как правило, менее секунды для капли и создания вида независимо от того, сколько времени потребуется для заполнения таблицы.

+0

Звучит интересно. Как вы помните «состояние» в этом случае (т. Е. Какую таблицу использовать)? Есть ли способ запомнить это между рабочими местами/пакетами sql-сервера? Благодарю. – cs0815

+1

У вас есть шаг, который сохраняет состояние в таблице после воссоздания представления, а затем смотрит в ту таблицу, для которой один из них активен в начале процесса в следующий раз. Вы также можете проанализировать код вида из системных таблиц, который сложнее сделать, но с меньшей вероятностью удалите рельсы, если кто-то изменит что-то за пределами процесса импорта. – HLGEM

+0

HLGEM - возможно, невозможно поделиться «кодом» для SSIS, но не могли бы вы подробно рассказать о конкретных шагах? Благодарю. – cs0815

Смежные вопросы