Развертывание и резервное копирование хранимых процедур с помощью служб SSIS - PullRequest
1 голос
/ 20 марта 2019

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

  1. Читать все имена файлов по одному
  2. Найти определение каждой хранимой процедуры, если она существует в базе данных
  3. Если существует, то сохранить определение с тем же именем в другой папке (в моем случае это папка ROLLBACK)
  4. Для всех новых SP он сохраняется в том же файле с именем DropNewSp.sql с помощью команды DROP STORED PROCEDURE.
  5. После завершения процесса резервного копирования выполните все файлы в целевой базе данных.

У меня есть возможность создавать файлы .sql для желаний, но я столкнулся со следующей проблемой 1. Пакет также сгенерировал нежелательный пустой файл .sql для всех новых хранимых процедур. 2. Процесс выполнения завершился неудачно, если хранимая процедура имеет некоторую зависимость от последующего хранимого процесса

Буду очень признателен за любые советы или рекомендации .. !!

1 Ответ

1 голос
/ 20 марта 2019

в этом ответе я предоставлю основные шаги с некоторыми ссылками, чтобы получить больше информации о том, как выполнить каждый шаг. Даже если я согласен с вышеупомянутыми комментариями, это не работа SSIS.

  1. Добавить контейнер цикла foreach, который зацикливает файлы .sql и сохраняет имя файла внутри переменной:

  2. Добавление задачи выражения в получение имени файла из полного пути к файлу (переменная)

    @{User::FileNameWithoutExtension] = SUBSTRING (@[User::FullFilePath], LEN( @[User::FullFilePath] ) - FINDSTRING( REVERSE( @[User::FullFilePath] ), "\\", 1) + 2,  LEN (RIGHT( @[User::FullFilePath], FINDSTRING( REVERSE( @[User::FullFilePath] ), "\\", 1 ) - 1 ) ) - FINDSTRING( REVERSE( @[User::FullFilePath] ), ".", 1 )  )
    
  3. Добавьте задачу «Выполнение SQL» внутри контейнера цикла foreach, чтобы проверить, найдена ли хранимая процедура в базе данных:

    SELECT COUNT(*) FROM sys.objects WHERE type = 'P' AND name = ?)
    
  4. Используя приоритет ограничения с выражениями добавляют 2 пути из задачи «Выполнить sql»

    • первое использование выражения @[User::Count] == 0
    • второе с использованием выражения @[User::Count] > 0

Другие ссылки:

И сохранить результат в переменной, используя набор результатов.

  1. Добавить Задача сценария, чтобы записать определение процедуры в файл назначения

  2. В первом пути добавьте File system task, чтобы переместить файл в указанный каталог

  3. Добавьте еще один цикл foreach для чтения новых файлов и выполнения содержимого.

...