Importação e exportação de dados à base via query

Veja neste artigo como importar e exportar dados tendo como base o query.

Todos estão acostumados a importar ou exportar dados da base via DTS (Data Transformation Services), porém na maioria dos casos não conhecem uma procedure que execute estas funções de importação ou exportação, neste artigo vou mostrar um exemplo de como fazer isso.

Vamos lá, aqui eu crio uma procedure que batizei de “teste1” juntamente com a variável (@NOME_ARQ NVARCHAR(1000)) que receberá o nome do arquivo, caso o nome seja muito extenso aumente o valor numérico entre os parênteses:

CREATE PROCEDURE teste1 @NOME_ARQ NVARCHAR(1000) AS BEGIN

Com o código a seguir criamos a tabela para onde serão lançados os valores:

create table teste11 (contratos nvarchar (40),Dt_Limite char (40),Total_Debto Nvarchar (15)) DECLARE @STR_SQL NVARCHAR(200) /* VARIÁVEL PARA ARMAZENAR A STRING SQL */ DECLARE @STR_ARQ NVARCHAR(200) /* VARIÁVEL PARA ARMAZENAR O SELECT NO ARQUIVO*/ DECLARE @PROVIDER NVARCHAR(7) /* VARIÁVEL PARA ARMAZENAR O PROVIDER 'MSDAQL' */ DECLARE @DRIVER NVARCHAR(1000) /* VARIÁVEL PARA ARMAZENAR O DRIVER */

Agora vamos pegar os dados e jogar tudo nas variáveis:

SET @STR_ARQ = 'SELECT * FROM ' + @NOME_ARQ SET @PROVIDER = 'MSDASQL' SET @DRIVER = 'Driver={Microsoft Text Driver (*.txt; *.csv)}; DefaultDir=E:\MALA_DIRETA\'

Feito isso, verificamos se existe no banco uma consulta chamada VWTESTE. Caso exista, ela será excluída:

IF EXISTS(SELECT * FROM sysobjects WHERE name = 'VWTESTE' AND xtype = 'V') BEGIN DROP VIEW VWTESTE END

Monto a string SQL, que criará uma nova view de consulta ao arquivo informado como parâmetro:

SET @STR_SQL = 'CREATE VIEW VWTESTE AS ' + 'SELECT * FROM OPENROWSET(''' + @PROVIDER + '''' + ',' + '''' + @DRIVER + '''' + ',' + '''' + @STR_ARQ + '''' + ')'

Em seguida, executo a string acima, que criará a view EXEC(@STR_SQL). Em seguida, busco os dados na view ao invés de buscar no arquivo texto. Ou seja, quem acessa o arquivo texto agora é a view:

insert teste11 select substring(dados,1,16) as Contratos, substring(dados,280,4) + '/' + substring(dados,277,2) + '/' + substring(dados,274,2) as Dt_Limite, substring(dados,646,8) As Total_Debto FROM (SELECT * FROM VWTESTE) AS SQ END

Antes de importar, no próprio txt, você deve escrever na primeira linha, à esquerda a palavra “dados” (neste caso). Veja o exemplo:

Esta procedure é ótima para automatização de tarefas, onde, por exemplo, você cria um programa onde o usuário importa o arquivo txt para a pasta que estará compartilhada claro, e através de um botão ou comando ele execute-a gerando os resultados desejados.

Artigos relacionados