Как лучше всего использовать FTP из хранимой процедуры SQL Server 2005?

Каков наилучший метод выполнения команд FTP из хранимой процедуры SQL Server? в настоящее время мы используем что-то вроде этого:

EXEC master..xp_cmdshell 'ftp -n -s:d:\ftp\ftpscript.xmt 172.1.1.1'

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

Ответов (3)

Решение

Если вы используете SQL 2005, вы можете сделать это в сборке интеграции CLR и использовать классы FTP в пространстве имен System.Net для создания простого FTP-клиента.

Вы выиграете от возможности перехватывать и обрабатывать исключения и снизить риск безопасности, связанный с использованием xp_cmdshell.

Просто мысли.

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

Другой вариант - написать приложение командной строки, которое считывает базу данных для выполнения команд. Затем вы можете определить запланированную задачу для вызова этого приложения командной строки каждую минуту или в любой другой период опроса. Это было бы более безопасно, чем включение поддержки CLR на сервере базы данных.

Другая возможность - использовать DTS или службы интеграции (DTS для SQL Server 7 или 2000, SSIS для 2005 или выше). Оба они от Microsoft, включены в установку Sql Server (по крайней мере, в стандартной версии), имеют задачу FTP и предназначены для заданий импорта / экспорта из Sql Server.