在FTP推送|SQL上重命名文件



下面是我将带有SQL的文件推送到另一台服务器的代码。

 EXEC [ftpPushRegisteredSSIS] '12345', '54321', 'C:TCCManufacturer Integration100_110 – DiaryBelle','Daily_Dairybelle.txt', '111.111.111.11', 1, 1

 CREATE PROCEDURE [dbo].[FtpPushRegisterSSIS]
    @User VARCHAR(50),
    @Password VARCHAR(50),
    @sourceDir VARCHAR(250),
    @SourceFiles VARCHAR(50),
    @DestinationFTPServer VARCHAR(50),
    @DestinationFTPPath VARCHAR(250),
    @Overwrite BIT,
    @isASCII BIT
AS
BEGIN
    DECLARE @overwriteTF VARCHAR(5)
    DECLARE @isASCIITF VARCHAR(5)
    SET @overwriteTF = 'true'
    SET @isASCIITF = 'true'
    IF @Overwrite = 0
    BEGIN
        SET @overwriteTF = 'false'
    END
    IF @isASCII = 0
    BEGIN
        SET @isASCIITF = 'false'
    END
--  DECLARE @FtpPackage VARCHAR(150)
--  SET @FtpPackage = 'E:ftpProcTestingftpPush.dtsx'
    DECLARE @cmd VARCHAR(1000)
    DECLARE @params VARCHAR(MAX)
    SET @params =   ' /set package.variables[ftpUser].Value;"' +           @User + '"'+
                    ' /set package.variables[ftpServer].Value;"' +         @DestinationFTPServer + '"'+
                    ' /set package.Variables[sourceDir].Value;"' +         @sourceDir + '"' +
                    ' /set package.variables[sourceFiles].Value;"' +       @SourceFiles + '"'+
                    ' /set package.variables[destiPath].Value;"/' +        @DestinationFTPPath + '"' +
                    ' /set package.variables[ftpPass].Value;"' +           @Password + '"' +
                    ' /set package.variables[overwrite].Value;"' +         @overwriteTF + '"' +
                    ' /set package.variables[isASCII].Value;"' +           @isASCIITF + '"'

    -- FOR Filesystem package SET @cmd = 'dtexec /f "'+@FtpPackage+'" /Rep N' --set N to V for verbose logging
    SET @cmd = 'dtexec /sq ' + 'ftpPush' + ' /ser DBNAME '
    SET @cmd = @cmd + @params
    CREATE TABLE #output ([output] VARCHAR(500))
    INSERT INTO #output
    EXEC master.dbo.xp_cmdshell @cmd -- ,NO_OUTPUT
    IF  (
            SELECT COUNT(*)
            FROM #output
            WHERE [output] LIKE '%fail%'
            OR [output] LIKE '%error%'
            OR [output] LIKE '%not valid%'
        ) > 0
    BEGIN
        SELECT * FROM #output
        RAISERROR('***|||FTP Operation FAILED|||***',15,1)
    END
    SELECT * FROM #output
END
GO

当文件Dairybelle.txt到达服务器时,我希望它在文件名前面包含getDate()。

类似这样的东西:2012-08-01_Dairybelle.txt

为了做到这一点,我可以对代码进行哪些更改?

我不想更改当前位置的文件名,我只想在发送时更改它。因此,在我的服务器上,名称仍然是Dairybelle.txt,但当它到达它们时,它将具有重命名的文件。

我知道我可以写代码来更改文件名,然后在发送后将其更改回,但我相信有更简单的方法吗?

我最终使用了SSIS,它简单多了!

请参阅此处的链接!

最新更新