none
Importação de Arquivos via DTS SQL 2000. RRS feed

  • Pergunta

  • Ola,

    amigos boa tarde

    Sou novo na area de Sql e tenho que construir no trabalho uma DTS para importação de TXT para uma tabela sendo incremental, e posteriormente agendar um JOB diario para que eu tenha a tabela atualizada.

    Os arquivos são diponibilizados em um diretório e zipados, dai minha necessidade de copia-los e
    extrai-los tudo em minha maquina.

    Mapeamento da necessidade:

    1 - Copiar arquivos do diretório.
    2 - Extrair arquivos.
    3 - Inserir na tabela.
    4 - Atualizar tabela.
    5 - Criar Job diario.

    Tenho uma versão SQL 2000 instalada em minha maquina.

    OBS: Os arquivos são Diarios, tenho a extrema necessiade de sempre copiar o último.
    • Movido Fabrizzio CaputoModerator terça-feira, 24 de janeiro de 2012 10:21 Duvida em como realizar um DataFlow Incremental (De:SQL Server Analysis Services (BI e Data Mining))
    domingo, 22 de janeiro de 2012 15:38

Respostas

  • galera consegui o codigo que precisava com ajuda de uma amigo, segue caso alguem precise posteriormente:

    '**********************************************************************
    '  Visual Basic ActiveX Script
    '************************************************************************

    Function Main()

        Dim sSourceFile
        Dim sDestinationFile
        Dim FSO' As Scripting.FileSystemObject
        Dim SourceFolder 'As Scripting.Folder, SubFolder As Scripting.Folder
        Dim FileItem' As Scripting.File


        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set SourceFolder = FSO.GetFolder("L:\") ' pasta origem
        
        sDestinationFile = "C:\12\" ' pasta destino
        
    i = 1
        For Each FileItem In SourceFolder.Files
        
        If i = 1 Then datamax = FileItem.DateCreated ' caso queira pegar o arquivo por data de modificaçao basta mudar para fileitem.datemodified
           
            If datamax < FileItem.DateCreated Then datamax = FileItem.DateCreated
               
     
        i = i + 1
        Next' FileItem
        
        For Each FileItem In SourceFolder.Files
            r = 1
            sSourceFile = FileItem.Path
            sSourceFileshort = FileItem.Name
            If Right(sSourceFile, 3) <> ".gz" Then r = 0 'verificação de extensão do arquivo.
            sDestinationFile = "C:\12\" & sSourceFileshort
            
           if r = 1 then If CDate(FileItem.DateCreated) = CDate(datamax) Then FSO.CopyFile sSourceFile, sDestinationFile

        Next' FileItem

                    ' Clean Up
                    Set FSO = Nothing

                    Main = DTSTaskExecResult_Success
    End Function

    • Marcado como Resposta Leandro_19 terça-feira, 7 de fevereiro de 2012 15:46
    terça-feira, 7 de fevereiro de 2012 15:46

Todas as Respostas

  • Leo,

     

    A melhor opção é a utilização do Integration Service para esta tarefa, com ele voce consegue copiar o arquivo, deszipa-lo, e dar a carga incremental, São algumas tarefas, que infelizmente se eu simplismente te explicar, ficara muito facil, e voce não ira aprender, saiba que essa tarefa é bem simples e rotineira em um mundo corporativo, vou deixar alguns links que podem te ajudar.

    http://bi-polar23.blogspot.com/2008/03/new-to-ssis-start-here.html

    http://stackoverflow.com/questions/1007345/best-place-to-start-for-ssis-programming

    E estou migrando esta thread para o Forum de SSIS.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Blog Empresa: www.tripletech.com.br/blog
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com
    terça-feira, 24 de janeiro de 2012 10:20
    Moderador
  • Fabrizzio,

    tudo bem.

    Sou novo nesta parte de desenvolvimento e consegui construir a DTS, porém minha real necessidade hoje é de sempre copiar o Ultimo arquivo do diretório e fazer com que seja feita a importação incremental.Não conheço muito de .Bat apesar de ter conseguido quase tudo que faz a Dts rodar hoje por .bat, mas copiar o ultimo arquivo disponibilizado no diretório estou com dificuldades.

    Tenho este script que estou modificando, pois informa que não há arquivo na pasta.Achei o mesmo aqui no fórum.

    O arquivo que recebo vem com o seguinte nome: CONTROL_LANC_NEG_20111221001.TXT.gz, que é respectivamente nome do arquivo,Ano,Mês,dia e quantidade disponibilizado.Preciso de melhorar o script para que compare com a data de criação e importe sempre o ultimo. Tendo essa comparação para importar e a incrementação, tenho 95% resolvido, os outros 5% é o JOB diário.

    Function Main(FileSystemObject)



        Main = DTSTaskExecResult_Success
    'coloque o nome do arquivo
    strArquivo = "CONTROLE_*.gz"

    'coloque o caminho da pasta origem
    strorigem = "L:\CONTROL"

    'coloque o caminho da pasta destino
    strDestino = "c:\12\"


    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Set Origem = objFSO.getFile(strorigem & strArquivo)
    Set Destino = objFSO.getFile(strDestino & strArquivo)
    'wscript.echo Origem.path &" " & Origem.dateLastCreate
    'wscript.echo Destino.path  & " " & Destino.dateLastCreate
    If objFSO.FileExists(strDestino & strArquivo) Then
       If Origem.dateLastcreated = Destino.dateLastcreated Then
        objFSO.DeleteFile (strDestino & strArquivo)
            objFSO.CopyFile strorigem & strArquivo, strDestino & strArquivo, OverwriteExisting
       End If
    Else
       objFSO.CopyFile strorigem & strArquivo, strDestino & strArquivo, OverwriteExisting
    End If
    End Function

     

    Obrigado

    terça-feira, 24 de janeiro de 2012 17:25
  • Leogigante,

    Então você esta querendo agora implementar o job ou a dificuldade esta na validação do último arquivo?


    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]
    quarta-feira, 25 de janeiro de 2012 23:35
    Moderador
  • Junior,

     

    minha dificuldade esta na validação do ultimo arquivo, ele é disponibilizado em um diretório com o seguinte nome dinâmico CONTROL_LANC_NEG_20120125001.TXT.gz.Os numeros são respectivamente: ano,mes,dia e quantidade disponibilizado.

    Preciso que a importação seja incremental, ja testei alguns scripts, mas sem sucesso.

    O banco que trabalho é o SQL Server 2000

     

    abç

    quinta-feira, 26 de janeiro de 2012 13:03
  • Leo,

    Cara entendi, o problema esta em capturar o nome do arquivo!

    Há única coisa que muda no nome do arquivo é a parte numérica?


    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]
    quinta-feira, 26 de janeiro de 2012 13:15
    Moderador
  • Exato, o inicio é sempre o mesmo, a parte numerica se refere a data e o restante a extensão.
    quinta-feira, 26 de janeiro de 2012 13:18
  • Junior,

     

    achei este script e testei, porém informa erro na linha 6 caracter inválido.

     

    '**********************************************************************
    '  Visual Basic ActiveX Script
    '************************************************************************
    Function Main()
    Main = DTSTaskExecResult_Success

    $Origem = "L:\CONTROL\*.gz*"
    $Destino = "C:\12\"
    $Arquivo = dir $Origem | sort lastwritetime | select -last 1
    dir $Destino | Remove-Item
    copy-item $Arquivo $Destino

    End Function

    quinta-feira, 26 de janeiro de 2012 20:27
  • Leandro,

    Cara eu não sou muito bom em desenvolvimento, a muito tempo não trabalho mais com isso.

    Em qual componente você esta fazendo uso deste código?


    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, 29 de janeiro de 2012 12:01
    Moderador
  • Junior,

     

    eu uso um Database SQL Server 2000, no enterprise manager incluo o codigo em Activex Script Task.Agora me faltam apenas duas etapas a principal é copiar do Diretório sempre o ultimo arquivo disponibilizado.

     

    att

    • Marcado como Resposta Leandro_19 terça-feira, 7 de fevereiro de 2012 15:43
    • Não Marcado como Resposta Leandro_19 terça-feira, 7 de fevereiro de 2012 15:43
    segunda-feira, 30 de janeiro de 2012 12:31
  • galera consegui o codigo que precisava com ajuda de uma amigo, segue caso alguem precise posteriormente:

    '**********************************************************************
    '  Visual Basic ActiveX Script
    '************************************************************************

    Function Main()

        Dim sSourceFile
        Dim sDestinationFile
        Dim FSO' As Scripting.FileSystemObject
        Dim SourceFolder 'As Scripting.Folder, SubFolder As Scripting.Folder
        Dim FileItem' As Scripting.File


        Set FSO = CreateObject("Scripting.FileSystemObject")
        Set SourceFolder = FSO.GetFolder("L:\") ' pasta origem
        
        sDestinationFile = "C:\12\" ' pasta destino
        
    i = 1
        For Each FileItem In SourceFolder.Files
        
        If i = 1 Then datamax = FileItem.DateCreated ' caso queira pegar o arquivo por data de modificaçao basta mudar para fileitem.datemodified
           
            If datamax < FileItem.DateCreated Then datamax = FileItem.DateCreated
               
     
        i = i + 1
        Next' FileItem
        
        For Each FileItem In SourceFolder.Files
            r = 1
            sSourceFile = FileItem.Path
            sSourceFileshort = FileItem.Name
            If Right(sSourceFile, 3) <> ".gz" Then r = 0 'verificação de extensão do arquivo.
            sDestinationFile = "C:\12\" & sSourceFileshort
            
           if r = 1 then If CDate(FileItem.DateCreated) = CDate(datamax) Then FSO.CopyFile sSourceFile, sDestinationFile

        Next' FileItem

                    ' Clean Up
                    Set FSO = Nothing

                    Main = DTSTaskExecResult_Success
    End Function

    • Marcado como Resposta Leandro_19 terça-feira, 7 de fevereiro de 2012 15:46
    terça-feira, 7 de fevereiro de 2012 15:46