【发布时间】:2014-11-07 05:39:32
【问题描述】:
我正在使用此代码将文件从本地系统传输到 ftp(我拥有此 ftp 的所有读写权限)。
if exists (select * from sysobjects where id = object_id(N'[dbo].[s_ftp_PutFile]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[s_ftp_PutFile]
GO
Create procedure s_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)
as
/*
exec s_ftp_PutFile
@FTPServer = '172.*****' ,
@FTPUser = 'username' ,
@FTPPWD = 'password' ,
@FTPPath = '/dir1/' ,
@FTPFileName = 'test2.txt' ,
@SourcePath = 'c:\vss\mywebsite\' ,
@SourceFile = 'test2.txt' ,
@workdir = 'c:\temp\'
*/
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
select id, ouputtmp = s from #a
go
我无法传输文件并收到此错误
1 个用户 (172.******:(none)):打开 172.******
2 空
3 空
4把c:\vss\mywebsite\test2.txt /dir1/test2.txt
5 c:\vss\mywebsite\test2.txt:找不到文件
6 退出
7 空
但是我可以通过 cmd 提示符进行传输。
【问题讨论】:
-
从过程中生成代码,放入批处理文件,然后执行。如果代码在你没有改变任何东西的情况下工作,那么 sql 没有足够的权限。也使用
sftp而不是ftp更安全。 -
嘿 subquerycrunch 所以这意味着上面的代码很好。我仍然收到相同的文件未找到错误是否有任何其他方法可以在不制作批处理文件的情况下执行此操作。
-
您知道,当您执行代码时,它会在托管 sql server 的机器上执行,例如:在您的 pc 上,您有一个文件 C:\asd.txt,当您运行批处理时它可以工作.您正在服务器上运行代码,因此它在服务器上搜索文件并且该文件确实不存在。所以你必须从你的 sql server 机器上复制你的文件的位置。因为 sql 不适用于你的本地路径。
-
那么我应该怎么做才能仅使用 sql 过程将许多文件传输到 ftp 服务器。如果您有任何链接可以解决所有这些问题,请告诉我。
-
你是在本地托管你的 sql server 吗?
标签: sql-server-2008 tsql ftp file-transfer xp-cmdshell