Usuário com melhor resposta
Importação de Arquivos via DTS SQL 2000.

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))
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
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- Marcado como Resposta Junior Galvão - MVPMVP, Moderator quarta-feira, 25 de janeiro de 2012 23:33
- Não Marcado como Resposta Junior Galvão - MVPMVP, Moderator domingo, 29 de janeiro de 2012 12:01
- Sugerido como Resposta Junior Galvão - MVPMVP, Moderator domingo, 29 de janeiro de 2012 12:01
-
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 FunctionObrigado
-
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] -
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ç
-
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] -
-
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
-
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] -
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
-
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