none
Importar dados de várias tabelas do MS Access RRS feed

  • Pergunta

  • Bom dia,

    Estou tentando automatizar algumas tarefas e gostaria de criar algum script para importar para o SQL Server varias tabelas que estão no Microsoft Access, sem usar o assistente de Importação/Exportação, é possível ? 

    terça-feira, 9 de abril de 2019 12:06

Respostas

Todas as Respostas

  • Deleted
    terça-feira, 9 de abril de 2019 12:26
  • Edvaldo,

    Existem também outras técnicas, como utilizar as ferramentas de linha de comando: BCP e SQLCMD, isso se tratando de versões mais novas do SQL Server, caso não seja o seu cenário, podemos pensar no uso do ISQL ou OSQL ambas também ferramentas de linha de comando, mas compatíveis com versões abaixo do SQL Server 2008.

    Qual seria a versão do SQL Server e do Access que você se refere?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 9 de abril de 2019 12:35
    Moderador
  • Edvaldo,

    Existem também outras técnicas, como utilizar as ferramentas de linha de comando: BCP e SQLCMD, isso se tratando de versões mais novas do SQL Server, caso não seja o seu cenário, podemos pensar no uso do ISQL ou OSQL ambas também ferramentas de linha de comando, mas compatíveis com versões abaixo do SQL Server 2008.

    Qual seria a versão do SQL Server e do Access que você se refere?


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    SQL Server express 2012 e Microsoft Access 2010 (o banco ainda na extensão .MD)
    terça-feira, 9 de abril de 2019 12:37
  • Edvaldo, o assistente gera pacotes do Integration Services (SSIS); você pode salvá-los e programar job para executá-los. Ou pode criar os próprios pacotes no SSIS.

    Se a demanda é por script em T-SQL, no artigo “Importação de dados em massa” são descritas formas, usando tanto a função OPENROWSET quanto a vinculação de servidores.

    O provedor OLE DB a utilizar depende da versão do banco de dados Access; pode ser o "Microsoft Jet OLEDB" (anterior ao Office 2007) ou o "'Microsoft ACE OLEDB" (Office 2007 e em diante).

    Qual é a versão do Office?


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Vou pesquisar sobre OPENROWSET
    terça-feira, 9 de abril de 2019 12:38
  • Pesquisando sobre OPENROWSET, cheguei ao seguinte código:

    insert into tabela1 SELECT *
       FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
          'C:\inetpub\wwwroot\indicadores\bd.mdb';
          'admin';'',tabela1);
    GO

    Funcionou ! Porém preciso incluir mais tabelas, é possível neste mesmo código ?

    terça-feira, 9 de abril de 2019 13:27
  • Deleted
    • Marcado como Resposta Edvaldo A terça-feira, 9 de abril de 2019 16:43
    terça-feira, 9 de abril de 2019 15:11
  • Pesquisando sobre OPENROWSET, cheguei ao seguinte código:
    (...)
    Porém preciso incluir mais tabelas, é possível neste mesmo código ?

    Essa é a solução proposta no item 4.7.1 do artigo “Importação de dados em massa”. Se está utilizando o Jet OLE DB significa que a estrutura do banco de dados é compatível com Office 97 a 2003.

    Se serão várias tabelas, sugiro que utilize a solução proposta no item 4.7.2, que é baseada na vinculação de servidores. Basta vincular o banco de dados Access ao SQL Server, através do provedor OLE DB:

    -- código #1
    EXECUTE sp_addlinkedserver
       @server = 'AccessDB',
       @srvproduct = 'Access',
       @provider = 'Microsoft.Jet.OLEDB.4.0',
       @datasrc = 'C:\Downloads\cliente.mdb';
    go

    Os detalhes estão no item 4.7.2.

    Uma vez vinculado, você pode acessar cada tabela do banco de dados Access diretamente, como uma tabela remota:

    -- código #2
    SELECT T.chave, T.nome, cast(T.[data] as date), T.sexo
      from AccessDB...cliente as T;

    Sugestão de leitura: Access connection strings.


    José Diz     Belo Horizonte, MG - Brasil     [T-SQL performance tuning: Porto SQL]   [e-mail]


    Este conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita.

    Edvaldo,

    Concordo com a sugestão do José, somente ressalto a importância de se utilizar uma conta de usuários específica para este acesso, afim de separar e eliminar possíveis vulnerabilidades de acesso quando utilizamos Linked Server.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    quarta-feira, 10 de abril de 2019 17:07
    Moderador