我使用下面的代码片段将简单的文本文件从Windows Server 2003 / SQL Server 2005数据库FTP到BULL FTP站点,并且在BULL端出现了一些损坏。
select @cmd = 'ftp -s:' + @workdir + @workfilename
exec master..xp_cmdshell @cmd, NO_OUTPUT
文本文件包含SEP490067,但是当它在BULL上打开时,它显示为......S.E.P.4.9.0.0.6.7 ..
在使用SSIS FTP组件发送文件并将IsTransferAscii开关切换为True之前,我已经看到过这样的问题。我的问题是你必须在上面的FTP命令中设置另一个命令行开关来使用ASCII而不是Binary发送文件吗?
这是完全TSQL
USE [JCB_QSmart]
GO
/****** Object: StoredProcedure [dbo].[FTP_PutFile] Script Date: 06/14/2012 08:56:55 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[FTP_PutFile]
@FTPServer varchar(128) ,
@FTPUser varchar(128) ,
@FTPPWD varchar(128) ,
@FTPPath varchar(128) ,
@FTPFileName varchar(128) ,
@SourcePath varchar(128) ,
@SourceFile varchar(128) ,
@workdir varchar(128),
@ShowOutput as bit = 0
as
declare @cmd varchar(1000)
declare @workfilename varchar(128)
select @workfilename = 'ftpcmd.txt'
-- deal with special characters for echo commands
select @FTPServer = replace(replace(replace(@FTPServer, '|', '^|'),'<','^<'),'>','^>')
select @FTPUser = replace(replace(replace(@FTPUser, '|', '^|'),'<','^<'),'>','^>')
select @FTPPWD = replace(replace(replace(@FTPPWD, '|', '^|'),'<','^<'),'>','^>')
select @FTPPath = replace(replace(replace(@FTPPath, '|', '^|'),'<','^<'),'>','^>')
select @cmd = 'echo ' + 'open ' + @FTPServer
+ ' > ' + @workdir + @workfilename
exec master..xp_cmdshell @cmd
select @cmd = 'echo ' + @FTPUser
+ '>> ' + @workdir + @workfilename
exec master..xp_cmdshell @cmd
select @cmd = 'echo ' + @FTPPWD
+ '>> ' + @workdir + @workfilename
exec master..xp_cmdshell @cmd
select @cmd = 'echo ' + 'put ' + @SourcePath + @SourceFile + ' ' + @FTPPath + @FTPFileName
+ ' >> ' + @workdir + @workfilename
exec master..xp_cmdshell @cmd
select @cmd = 'echo ' + 'quit'
+ ' >> ' + @workdir + @workfilename
exec master..xp_cmdshell @cmd
select @cmd = 'ftp -s:' + @workdir + @workfilename
create table #a (id int identity(1,1), s varchar(1000))
insert #a
exec master..xp_cmdshell @cmd, NO_OUTPUT
select id, ouputtmp = s from #a
答案 0 :(得分:4)
由于您使用ftp的-s
开关,因此您应该在连接到FTP服务器后立即将ascii
- 命令放在工作文件中。
修改强>
因此,在StoredProc中,您必须在包含'put '
命令的行之前添加以下行:
select @cmd = 'echo ' + 'ascii > ' + @workdir + @workfilename
exec master..xp_cmdshell @cmd
代码应包含其他&gt;
select @cmd = 'echo ' + 'ascii >> ' + @workdir + @workfilename
exec master..xp_cmdshell @cmd
答案 1 :(得分:0)
不要在参数 X @FTPServer 上使用 ftp://,只需输入 IP 地址或域。喜欢,
echo open 10.16.22.21 >