none
Movendo Arquivo via FSO no SQL SERVER 2008 RRS feed

  • Pergunta

  • Pessoal eu via FSO consigo hoje, criar arquivo, verificar se a pasta e o arquivo exite e agora preciso mover o arquivo, mas minha stored não funciona, será que alguém tem alguma ideia ?

    Segue Stored...

     

    CREATE PROCEDURE [dbo].[sp_Move_Arquivo] 
        (
            @Caminho_original    SYSNAME
            ,@Caminho_final        SYSNAME
            ,@Retorno            Varchar(MAX) output
        ) 
    WITH RECOMPILE
    AS
    BEGIN
            SET NOCOUNT ON;
            DECLARE @FSO INT, @RES int, @FID int
     
            EXECUTE @RES = sp_OACreate    'Scripting.FileSystemObject', @FSO OUTPUT
            EXECUTE @RES = sp_OAMethod    @FSO, 'GetFile', @FID OUT, @Caminho_original
            EXECUTE @RES = sp_OAMethod    @FSO, 'MoveFile', @FID OUT, @Caminho_original, @Caminho_final
            SET @Retorno = @FID
            EXECUTE @RES = sp_OADestroy @FSO
    END

     

    Todas as permissões para funcionar o FSO estão ok !!!!

     

     

    Obrigado pela ajuda de todos !!!!

    quinta-feira, 12 de maio de 2011 20:32

Todas as Respostas

  • Rromulo,

    Você esta recebendo alguma mensagem de erro do SQL Server?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 15 de maio de 2011 01:00
  • Nenhuma !
    segunda-feira, 16 de maio de 2011 12:57
  • Rromulo,

    Então, a dificuldade esta em fazer este procedimento dentro da sua procedure!!!

    Porque você esta utilizando a opção With Recompile, ao meu ver este tipo de procedure não precisaria ser recompilada.

    Tente utilizar ao invês do comando Execute a system stored Procedure SP_ExecuteSQL.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    terça-feira, 17 de maio de 2011 19:04
  • Julio, você já conseguiu via FSO mover aquivo pelo SQL server ? eu re-escrevi o script:

     

    CREATE PROCEDURE [dbo].[sp_Move_Arquivo] 
        (
            @Caminho_original    SYSNAME
            ,@Caminho_final        SYSNAME
            ,@Retorno            Varchar(MAX) output
        ) 
    WITH RECOMPILE
    AS
    BEGIN
            SET NOCOUNT ON;
            DECLARE @FSO INT, @RES int, @FID int
            DECLARE @src varchar(255), @desc varchar(255);
             
    /*======Variáveis de Erro===============================================================================*/
            DECLARE @local int, @ErroCodigo int, @ErroFonte varchar(255), @ErroDescricao varchar(255)
    /*======================================================================================================*/
             
            EXECUTE @RES = sp_OACreate    'Scripting.FileSystemObject', @FSO OUTPUT
                IF @RES <> 0 GOTO Erro
                 
            --EXECUTE @RES = sp_OAMethod    @FSO, 'MoveFile', @FID OUT, @Caminho_original, @Caminho_final
             
            EXECUTE @RES = sp_OAMethod    @FSO, 'MoveFile', @FID OUT, @Caminho_original, @Caminho_final
             
         
                IF @RES <> 0 GOTO Erro
            EXECUTE @RES = sp_OADestroy @FSO
     
     
    /*==Tratamento e exibição do Erro=======================================================================*/
        Erro:
            EXEC @ErroCodigo = sp_OAGetErrorInfo @local, @ErroFonte OUT, @ErroDescricao OUT
                IF @ErroCodigo= 0
                    BEGIN
                           SELECT @Retorno ='Fonte do Erro: ' + @ErroFonte + char(13) +
                                         'Descrição do Erro: ' + @ErroDescricao
                        RETURN
                    END
                ELSE
                    BEGIN
                        SELECT @Retorno ='sp_OAGetErrorInfo falhou.'
                        RETURN
                    END
    /*======================================================================================================*/          
    END
     
     
     
     
    Executo assim:
     
    DECLARE    @return_value int,
            @Retorno varchar(max)
     
    EXEC    @return_value = [dbo].[sp_Move_Arquivo]
            @Caminho_original = 'C:\XML\PRODUCAO\erro0001.txt',
            @Caminho_final = 'C:\XML\PRODUCAO\ERROS\',
            @Retorno = @Retorno OUTPUT
     
    print     @Retorno

    Retoro que obtenho:

     
    Fonte do Erro: ODSOLE Extended Procedure Descrição do Erro: Error in parameters, or attempt to retrieve a return value from a method that doesn't supply one.

    terça-feira, 17 de maio de 2011 19:44
  • RRomulo,

    Não utilize o Exec, pois quando trabalhamos com este comando o SQL Server cria uma nova sessão de execução temporária da stored procedure, desta forma, as variáveis e qualquer outro recursos que foi criado e declarado no sessão atual não será reconhecido neste sessão virtual.

    Como já destaquei tente utilizar o comando Execute ou SP_Executesql.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    domingo, 22 de maio de 2011 23:32