如何快速实现SFTP与SQL Server Integration Services(SSIS)集成?
简便SSIS+SFTP ETL实现方案
针对你的需求,最快捷的实现方式是通过SSIS脚本任务调用WinSCP命令行完成SFTP文件下载,再衔接原有数据加载逻辑,全程无需复杂组件配置,步骤如下:
1. 准备WinSCP环境
- 下载WinSCP客户端并安装到SSIS服务器的固定路径(比如
C:\Program Files (x86)\WinSCP\) - 创建WinSCP脚本文件(例如
GetSFTPData.txt),写入SFTP连接及文件下载命令:# 连接SFTP服务器(替换为实际信息) open sftp://[用户名]:[加密密码]@[SFTP服务器地址]/ -hostkey="[服务器公钥指纹]" # 下载供应商指定路径下的文件到本地目录 get /供应商文件目录/*.csv C:\SSIS\RawData\ # 退出WinSCP exit提示:避免明文密码,可通过WinSCP生成加密密码:打开命令行执行
WinSCP.com /command "open sftp://[用户名]:[明文密码]@[服务器]" "call echo !session!.Password" "exit",复制输出的加密密码替换脚本中的[加密密码]
2. 在SSIS包中添加SFTP下载任务
- 拖入脚本任务到控制流界面,编辑脚本选择C#(或VB.NET)
- 在
Main方法中添加调用WinSCP命令行的代码:using System.Diagnostics; public void Main() { ProcessStartInfo winScpStartInfo = new ProcessStartInfo { FileName = @"C:\Program Files (x86)\WinSCP\WinSCP.com", Arguments = "/script=C:\\SSIS\\Scripts\\GetSFTPData.txt", WindowStyle = ProcessWindowStyle.Hidden, UseShellExecute = false }; using (Process winScpProcess = Process.Start(winScpStartInfo)) { winScpProcess.WaitForExit(); // 根据WinSCP退出码判断任务成功/失败 Dts.TaskResult = winScpProcess.ExitCode == 0 ? (int)ScriptResults.Success : (int)ScriptResults.Failure; } }
3. 衔接原有数据加载逻辑
- 在脚本任务的成功分支后,添加原有的数据流任务,直接读取本地
C:\SSIS\RawData\下的文件,按照之前FTP方案的逻辑加载到SQL Server数据库即可,无需修改原有加载逻辑。
4. 优化与维护
- 将SFTP连接参数(用户名、加密密码、服务器地址)存入SSIS包配置或环境变量,避免硬编码,方便后续修改
- 为脚本任务添加错误处理分支,记录错误日志或触发告警机制,保障ETL流程稳定性
内容的提问来源于stack exchange,提问作者Radma Sigma
相关产品推荐
相关产品推荐

