从SQL Server 2005存储过程进行FTP的最佳做法是什么?

时间:2020-03-05 18:38:13  来源:igfitidea点击:

从SQL Server存储过程执行FTP命令的最佳方法是什么?我们目前使用的是这样的:

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

问题是即使FTP错误终止,命令似乎也可以成功执行。另外,使用xp_cmdshell需要特殊权限,并可能为安全问题留出空间。

解决方案

回答

如果运行的是SQL 2005,则可以在CLR集成程序集中执行此操作,并使用System.Net命名空间中的FTP类来构建简单的FTP客户端。

我们将受益于能够捕获和处理异常并减少必须使用xp_cmdshell的安全风险。

只是一些想法。

回答

如果我们需要从数据库中进行FTP,那么我将按照Kevin的建议使用.NET程序集。这样可以最大程度地控制流程,此外,我们还可以将有意义的错误消息记录到表中进行报告。

另一个选择是编写一个命令行应用程序,该应用程序读取数据库以运行命令。然后,我们可以定义一个计划的任务,以每分钟或者需要的轮询时间每分钟调用该命令行应用程序。这比在数据库服务器中启用CLR支持更安全。

回答

另一种可能性是使用DTS或者Integration Services(对于SQL Server 7或者2000,为DTS,对于2005年或者更高版本,为SSIS)。两者均来自Microsoft,并包含在Sql Server安装中(至少在标准版中),并且具有FTP任务,并且设计用于Sql Server的导入/导出作业。

回答

Kev在此处发布了一个示例,该示例实现了他的建议:"在CLR集成程序集中执行此操作,并使用System.Net命名空间中的FTP类来构建简单的FTP客户端。"