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:

12-04-07pic01.JPG

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.