从 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 的安全风险。

只是一些想法。

其他提示

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

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

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

凯夫发布了一个例子 在这里 实现了他的建议“在 CLR 集成程序集中执行此操作,并使用 System.Net 命名空间中的 FTP 类来构建一个简单的 FTP 客户端”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top