Usuário com melhor resposta
Executar Query após criação de um arquivo de texto Externo

Pergunta
-
Boa tarde, sou novato aqui e com sql e estou criando uma rotina semelhante ao do post acima, vamos lá, tenho um diretório vazio que às vezes nele é criado sempre o mesmo arquivo mas com o conteúdo diferente chamado: "arquivo.txt" e dentro deste arquivo tem somente 3 linhas com informações abaixo:
cStat=01
xMotivo=Convertido com sucesso. Foi(ram) convertida(s) 1 nota(s) fiscal(is)
Nota fiscal: 000004172 Série: 001 - ChaveNFe: 35130901394193000175550010000041721314770008Minha necessidade é a seguinte, assim que criado esse arquivo neste diretório o banco de dados do SQL SERVER 2005 armazenasse automáticamente em duas variáveis somente duas informações que são os números que estão na frente do texto "Nota fiscal" e "ChaveNFE" e posteriormente renomearia esse arquivo conforme o numero que esta na frente da "Nota Fiscal" e assim por diante com os novos arquivos que fossem criados neste diretório, exemplo:
Seria armazenado em uma coluna: 000004172
Seria armazenado em uma coluna: 35130901394193000175550010000041721314770008
Seria renomeado o arquivo para: 000004172.txt
Será que consegui explicar.....
Respostas
-
Olá,
Segue um exemplo com atender a sua demanda:
-- este block deve ser executado 1 vez para habilitar a procedure extendida xp_cmdshell -- opções avançadas do sql SQL Sevrer : http://bobgalvao.wordpress.com/2013/08/27/consultando-e-alterando-opcoes-avancadas-no-sql-server/ exec sp_configure 'show advanced options', 1 go reconfigure go exec sp_configure 'xp_cmdshell', 1 go reconfigure go --_______________________________________________________ -- ler linhas do arquivo txt. declare @linha table (id int identity (1,1), strLinha nvarchar(max)) declare @nota varchar(100) declare @chave varchar(1000) insert into @linha exec xp_cmdshell 'FOR /F "tokens=3" %i IN (C:\arq_teste.txt) DO @echo %i' select @nota = strLinha from @linha where id = 2 delete from @linha insert into @linha exec xp_cmdshell 'FOR /F "tokens=8" %i IN (C:\arq_teste.txt) DO @echo %i ' select @chave = strLinha from @linha where id = 5 --_________________________________________________ --renomear o arquivo declare @cmd nvarchar(max) set @cmd = 'exec xp_cmdshell ''RENAME C:\arq_teste.txt ' + cast(@nota as varchar(100)) + '.txt''' exec sp_executesql @cmd select @nota as nota, @chave as chaveNFE
Arquivo renomeado:
Também é possível ler arquivo txt utilizando o comando OPENROWSET: http://technet.microsoft.com/pt-br/library/ms190312.aspx
"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto Galvão
MCITP - Administration SQL Server 2008
MCITP - Developer SQL Server 2008
MCSA - SQL Server 2012
Blog: http://bobgalvao.wordpress.comRoberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão sábado, 7 de setembro de 2013 22:59
- Marcado como Resposta Hidraulica E Cia domingo, 8 de setembro de 2013 01:54
-
Olá, Você pode utilizar o SQL AGENT para agendar trabalhos no SQL Server. Neste link você vai ver como se realiza este procedimento: http://fabrizziocaputo.wordpress.com/2011/09/01/sql-server-basico-4-agendando-um-job-no-sql-server/ Link MSDN com a documentação referente a job: http://technet.microsoft.com/en-us/library/ms190268.aspx Exemplo para a sua atividade: você pode criar um job para rodar seu script a cada minuto. "Se a resposta foi útil, não esqueça de marcar a resposta." Roberto Galvão MCITP - Administration SQL Server 2008 MCITP - Developer SQL Server 2008 MCSA - SQL Server 2012 Blog: http://bobgalvao.wordpress.com
- Editado Roberto Galvão domingo, 8 de setembro de 2013 01:42
- Sugerido como Resposta Roberto Galvão domingo, 8 de setembro de 2013 01:42
- Marcado como Resposta Hidraulica E Cia domingo, 8 de setembro de 2013 01:49
Todas as Respostas
-
Olá,
Segue um exemplo com atender a sua demanda:
-- este block deve ser executado 1 vez para habilitar a procedure extendida xp_cmdshell -- opções avançadas do sql SQL Sevrer : http://bobgalvao.wordpress.com/2013/08/27/consultando-e-alterando-opcoes-avancadas-no-sql-server/ exec sp_configure 'show advanced options', 1 go reconfigure go exec sp_configure 'xp_cmdshell', 1 go reconfigure go --_______________________________________________________ -- ler linhas do arquivo txt. declare @linha table (id int identity (1,1), strLinha nvarchar(max)) declare @nota varchar(100) declare @chave varchar(1000) insert into @linha exec xp_cmdshell 'FOR /F "tokens=3" %i IN (C:\arq_teste.txt) DO @echo %i' select @nota = strLinha from @linha where id = 2 delete from @linha insert into @linha exec xp_cmdshell 'FOR /F "tokens=8" %i IN (C:\arq_teste.txt) DO @echo %i ' select @chave = strLinha from @linha where id = 5 --_________________________________________________ --renomear o arquivo declare @cmd nvarchar(max) set @cmd = 'exec xp_cmdshell ''RENAME C:\arq_teste.txt ' + cast(@nota as varchar(100)) + '.txt''' exec sp_executesql @cmd select @nota as nota, @chave as chaveNFE
Arquivo renomeado:
Também é possível ler arquivo txt utilizando o comando OPENROWSET: http://technet.microsoft.com/pt-br/library/ms190312.aspx
"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto Galvão
MCITP - Administration SQL Server 2008
MCITP - Developer SQL Server 2008
MCSA - SQL Server 2012
Blog: http://bobgalvao.wordpress.comRoberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão sábado, 7 de setembro de 2013 22:59
- Marcado como Resposta Hidraulica E Cia domingo, 8 de setembro de 2013 01:54
-
Nem acredito que deu certo, não ia conseguir tão cedo executar tantos comandos, muito obrigado mesmo, hein Roberto se não for pedir de demais, se é que tem como, que ao cair o arquivo "arq_teste.txt" no diretório "C:\" o query seje executado automaticamente, sozinho, sem ter que eu clicar Execute ????
-
Olá, Você pode utilizar o SQL AGENT para agendar trabalhos no SQL Server. Neste link você vai ver como se realiza este procedimento: http://fabrizziocaputo.wordpress.com/2011/09/01/sql-server-basico-4-agendando-um-job-no-sql-server/ Link MSDN com a documentação referente a job: http://technet.microsoft.com/en-us/library/ms190268.aspx Exemplo para a sua atividade: você pode criar um job para rodar seu script a cada minuto. "Se a resposta foi útil, não esqueça de marcar a resposta." Roberto Galvão MCITP - Administration SQL Server 2008 MCITP - Developer SQL Server 2008 MCSA - SQL Server 2012 Blog: http://bobgalvao.wordpress.com
- Editado Roberto Galvão domingo, 8 de setembro de 2013 01:42
- Sugerido como Resposta Roberto Galvão domingo, 8 de setembro de 2013 01:42
- Marcado como Resposta Hidraulica E Cia domingo, 8 de setembro de 2013 01:49