在处理文件传输时,经常需要从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命令。最后,它执行这些命令并删除工作文件。