从 SQL Server 存储过程执行 FTP 命令的最佳方法是什么?我们目前使用这样的东西:
EXEC master..xp_cmdshell 'ftp -n -s:d:\ftp\ftpscript.xmt 172.1.1.1'
问题是即使 FTP 以错误结束,该命令似乎也成功了。此外,使用xp_cmdshell
需要特殊权限,可能会为安全问题留下空间。
从 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 支持更安全。