Пакет служб SSIS. Проверка существования таблиц, если не создание, если они делают Truncate

1

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

У меня есть простой запрос в самом верху пакета, чтобы вернуть все таблицы в целевой базе данных

SELECT TABLE_NAME 
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'

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

благодаря

  • 0
    Возможно, вы захотите взглянуть на задачу переноса объектов SQL Server . Вы можете настроить его так, чтобы сначала отбрасывать и воссоздавать целевые объекты, если они существуют, или просто создавать, если их нет.
  • 0
    Привет GarethD спасибо за ответ. После того, как проверки таблиц выполнены, и я хочу выполнить простую миграцию данных в таблицы этапов, мне стало интересно, встречается ли ошибка на каком-либо этапе миграции данных, откатывается ли шаг?
Показать ещё 4 комментария
Теги:
ssis

2 ответа

5

Вам нужно использовать Execute SQL Task с чистым кодом T-SQL. (Точнее: выполнить задачу SQL или выполнить задачу задания T-SQL).

В Execute SQL Task вам нужно указать, какой диспетчер подключений использовать, и SQL-код для запуска.

Код внутри задачи должен выглядеть следующим образом:

IF EXISTS(
   SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES 
   WHERE TABLE_TYPE = 'BASE TABLE')
THEN
   TRUNCATE TABLE [BASE TABLE]
ELSE
   CREATE TABLE [BASE TABLE] (...)
END

Эта задача указана в Control flow управления пакета и должна включать ограничение для ее запуска до того, как любая задача потока данных попытается использовать затронутые таблицы.

Помните, что не все таблицы могут быть усечены (если у них есть FK), и что, если вы используете PCK IDENTITY, они будут увеличиваться при каждом запуске вашего пакета. Таким образом, возможно, вы должны DROP таблицы и CREATE затем во всех исполнениях пакета. Примите во внимание, что вы все равно должны писать сценарии CREATE TABLE. (Конечно, вы должны проверить, существует ли таблица, прежде чем отбрасывать ее).

1

Я не уверен, что это отличный способ сделать это из коробки в SSIS. Однако существует альтернативное решение BIML. Он получил небольшую кривую обучения, но это действительно просто, как только вы пройдете через это.

На самом деле, этот учебник кажется именно тем, что вы пытаетесь сделать. И хорошая вещь о BIML заключается в том, что вы пишете его один раз, и если вам когда-нибудь понадобится это, просто пару быстрых обновлений для создания новых пакетов. Супер мощный. Попробуйте. Я буду вам удивлен. http://bimlscript.com/Walkthrough/Details/73

Ещё вопросы

Сообщество Overcoder
Наверх
Меню