Microsoft SQL Server
DTS

Выполнение пакета DTS из хранимой процедуры

Опубликовано: 11 ноя 02
Рейтинг:

Автор: Брайан Моран http://osp.ru/win2000/sql/dialogs/36dia04.htm
Прислал: Glory

Q.
Мне необходимо выполнить пакет Data Transformation Services (DTS) изнутри хранимой процедуры, но я не могу найти описание синтаксиса. Как мне выполнить такой пакет?

A.
К сожалению, ни одна команда T-SQL не позволяет выполнять DTS пакет, так что вам придется пройти несколько итераций, чтобы решить проблему. Вы можете выбирать из трех возможных решений.


Решение 1. Использовать утилиту командной строки dtsrun для запуска пакетов DTS. Dtsrun не является командой T-SQL, но вы можете вызывать утилиты командной строки с помощью внешней хранимой процедуры xp_cmdshell. Xp_cmdshell выполняет заданную команду от имени командной оболочки операционной системы и возвращает результат в виде текстовых строк. Это означает, что хранимая процедура может вызывать xp_cmdshell, которая задействует dtsrun, а та, в свою очередь, запускает пакет.


Решение 2. Вы можете сформировать DTS-пакет как задание, которое будет выполняться службой управления заданиями - SQL Server Agent. Можно использовать процедуру sp_start_job из msdb, чтобы создать задание, запускаемое по требованию (on-demand job), которое выполняет данный пакет. Агент SQL-сервера просто запускает DTS-пакет, с помощью задачи, исполняемой операционной системой, которая запускает утилиту командной строки dtsrun, описанную в Решении 1. Однако несколько пользователей не могут выполнять одно и то же задание одновременно. Они получат сообщение об ошибке, если попробуют запустить задание, которое уже выполняется. Поэтому такое решение - не самое лучшее, если пользователи не могут обращаться к заданию DTS по очереди.


Решение 3. DTS-пакеты с технической точки зрения представляют собой не что иное, как COM-объекты, и вы можете легко управлять ими через обычные интерфейсы COM. Можно написать программу-оболочку COM, которая вызывает DTS-пакет и управляет им так, как нужно. После этого вы можете вызвать данную программу-оболочку из T-SQL, используя функцию sp_OACreate(), которая позволяет T-SQL создавать экземпляр COM-объекта и управлять им на SQL-сервере. Это вариант наиболее сложный, но он может обеспечить дополнительную гибкость, которую нельзя получить с помощью Решения 1 или 2.

Брайан Моран - президент группы пользователей и директор по технологиям СУБД Spectrum Technology Group. Имеет сертификаты MCSE, MCSD и MCT. Ему можно написать по адресу: brian@spectrumtech.com.

Комментарии




Необходимо войти на сайт, чтобы оставлять комментарии

Раздел FAQ: Microsoft SQL Server / DTS / Выполнение пакета DTS из хранимой процедуры