使用SQL和命令行下载和上传FTP文件

在处理文件传输时,经常需要从FTP服务器下载或上传文件。虽然可以通过编写大量的编程代码来实现这一功能,但使用SQL命令行可以更高效地完成这一任务。本文将介绍如何使用SQL和命令行工具来下载和上传FTP服务器上的文件。

要实现这一功能,只需要掌握基本的SQL语法和一些命令行语法。通过编写简单的脚本,可以轻松地从FTP服务器下载或上传文件。

使用代码

要从FTP服务器下载文件,可以使用SQL服务器的'Mput'命令,这比编写大量代码要简单得多,并且下载时间也会更短。同样,也可以使用'MPut'方法将文件上传到FTP服务器。

以下是使用MGET命令从FTP服务器下载文件的脚本示例。只需要替换为实际属性,文件就会被下载到本地目录。

-- 声明变量 DECLARE @FTPServer VARCHAR(128), @FTPUserName VARCHAR(128), @FTPPassword VARCHAR(128), @SourcePath VARCHAR(128), @SourceFiles VARCHAR(128), @DestinationPath VARCHAR(128), @FTPMode VARCHAR(10); -- 设置属性 SET @FTPServer = 'ftpserver'; SET @FTPUserName = 'username'; SET @FTPPassword = 'password'; SET @SourcePath = ''; -- 文件夹路径/根目录留空 SET @SourceFiles = '*.csv'; SET @DestinationPath = 'D:\Husen\Download'; -- 目标路径 SET @FTPMode = 'binary'; -- 二进制模式,也可以是ascii或留空为默认模式 -- 生成工作文件 DECLARE @Command VARCHAR(1000), @workfile VARCHAR(128), @nowstr VARCHAR(25); DECLARE @tempdir VARCHAR(128); CREATE TABLE #tempvartable(info VARCHAR(1000)); INSERT #tempvartable EXEC master..xp_cmdshell 'echo %temp%'; SET @tempdir = (SELECT top 1 info FROM #tempvartable); IF RIGHT(@tempdir, 1) <> '\' SET @tempdir = @tempdir + '\'; DROP TABLE #tempvartable; -- 生成工作文件名 SET @nowstr = REPLACE(REPLACE(CONVERT(VARCHAR(30), GETDATE(), 121), ' ', '_'), ':', '-'); SET @workfile = 'FTP_SPID' + CONVERT(VARCHAR(128), @@spid) + '_' + @nowstr + '.txt'; -- 构建FTP脚本文件 SELECT @FTPServer = REPLACE(REPLACE(REPLACE(@FTPServer, '|', '^|'), '<', '^<'), '>', '^>'); SELECT @FTPUserName = REPLACE(REPLACE(REPLACE(@FTPUserName, '|', '^|'), '<', '^<'), '>', '^>'); SELECT @FTPPassword = REPLACE(REPLACE(REPLACE(@FTPPassword, '|', '^|'), '<', '^<'), '>', '^>'); SELECT @SourcePath = REPLACE(REPLACE(REPLACE(@SourcePath, '|', '^|'), '<', '^<'), '>', '^>'); IF RIGHT(@DestinationPath, 1) = '\' SET @DestinationPath = LEFT(@DestinationPath, LEN(@DestinationPath)-1); -- 执行FTP命令 SELECT @Command = 'ftp -s:' + @tempdir + @workfile; CREATE TABLE #a (id INT IDENTITY(1,1), s VARCHAR(1000)); INSERT #a EXEC master..xp_cmdshell @Command; SELECT id, ouputtmp = s FROM #a; DROP TABLE #a; SELECT @Command = 'del ' + @tempdir + @workfile; EXEC master..xp_cmdshell @Command;

这个脚本首先声明了一些变量来存储FTP服务器的地址、用户名、密码、源路径、目标路径和文件传输模式。然后,它生成一个工作文件,其中包含了用于下载文件的FTP命令。最后,它执行这些命令并删除工作文件。

以下是使用MPUT命令将文件从本地目录上传到FTP服务器的脚本示例。

-- 声明变量 DECLARE @FTPServer VARCHAR(128), @FTPUserName VARCHAR(128), @FTPPassword VARCHAR(128), @SourcePath VARCHAR(128), @SourceFiles VARCHAR(128), @DestinationPath VARCHAR(128), @FTPMode VARCHAR(10); -- 设置属性 SET @FTPServer = 'ftpserver'; SET @FTPUserName = 'username'; SET @FTPPassword = 'password'; SET @SourcePath = 'D:\Husen\Upload'; -- 源路径 SET @SourceFiles = '*.csv'; SET @DestinationPath = ''; -- 目标路径/根目录留空 SET @FTPMode = 'binary'; -- 二进制模式,也可以是ascii或留空为默认模式 -- 生成工作文件 DECLARE @Command VARCHAR(1000), @workfile VARCHAR(128), @nowstr VARCHAR(25); DECLARE @tempdir VARCHAR(128); CREATE TABLE #tempvartable(info VARCHAR(1000)); INSERT #tempvartable EXEC master..xp_cmdshell 'echo %temp%'; SET @tempdir = (SELECT top 1 info FROM #tempvartable); IF RIGHT(@tempdir, 1) <> '\' SET @tempdir = @tempdir + '\'; DROP TABLE #tempvartable; -- 生成工作文件名 SET @nowstr = REPLACE(REPLACE(CONVERT(VARCHAR(30), GETDATE(), 121), ' ', '_'), ':', '-'); SET @workfile = 'FTP_SPID' + CONVERT(VARCHAR(128), @@spid) + '_' + @nowstr + '.txt'; -- 构建FTP脚本文件 SELECT @FTPServer = REPLACE(REPLACE(REPLACE(@FTPServer, '|', '^|'), '<', '^<'), '>', '^>'); SELECT @FTPUserName = REPLACE(REPLACE(REPLACE(@FTPUserName, '|', '^|'), '<', '^<'), '>', '^>'); SELECT @FTPPassword = REPLACE(REPLACE(REPLACE(@FTPPassword, '|', '^|'), '<', '^<'), '>', '^>'); SELECT @DestinationPath = REPLACE(REPLACE(REPLACE(@DestinationPath, '|', '^|'), '<', '^<'), '>', '^>'); IF RIGHT(@SourcePath, 1) <> '\' SET @SourcePath = @SourcePath + '\'; -- 执行FTP命令 SELECT @Command = 'ftp -s:' + @tempdir + @workfile; CREATE TABLE #a (id INT IDENTITY(1,1), s VARCHAR(1000)); INSERT #a EXEC master..xp_cmdshell @Command; SELECT id, ouputtmp = s FROM #a; DROP TABLE #a; SELECT @Command = 'del ' + @tempdir + @workfile; EXEC master..xp_cmdshell @Command;

这个脚本与下载脚本类似,但它是用于上传文件的。它首先声明了一些变量来存储FTP服务器的地址、用户名、密码、源路径、目标路径和文件传输模式。然后,它生成一个工作文件,其中包含了用于上传文件的FTP命令。最后,它执行这些命令并删除工作文件。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485