Какова наилучшая практика для 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 требует специальных разрешений и может оставлять место для проблем с безопасностью.

Ответ 1

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

Вам будет полезно улавливать и обрабатывать исключения и уменьшать риск безопасности при использовании xp_cmdshell.

Только некоторые мысли.

Ответ 2

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

Ответ 3

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

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

Ответ 4

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