Usuário com melhor resposta
Importar dados de várias tabelas do MS Access

Pergunta
-
Respostas
Todas as Respostas
-
-
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]
-
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]
-
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.
-
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 ?
-
-
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]