Sugestão para importação de dados em massa

8

Estamos trabalhando em um projeto que requer dados de importação da planilha do Excel diariamente. Os dados serão importados do modelo pré-definido e o que estamos pensando, primeiro enviaremos os dados na tabela temporária e executaremos a operação de limpeza (removendo informações desnecessárias, adicionando novas linhas na tabela pai e obtendo seu FK, etc.).

  • Preciso saber se existe alguma ferramenta ou utilitário disponível que possa reduzir nossos esforços.
  • Qual é a melhor maneira de INSERIR registros em massa de diferentes fontes (principalmente de planilhas do Excel)?
kodvavi
fonte
O aplicativo que vamos criar é um aplicativo baseado na Web em que o usuário tem controle limitado sobre o SQL Server. O usuário fará o upload do arquivo pelo navegador e o restante da operação será feito no servidor.
Kodvavi

Respostas:

9

O SSIS é o caminho a seguir. Se você nunca criou um pacote antes e sabe que seus arquivos de origem (leia também: planilhas) sempre serão os mesmos, o que você pode fazer é usar o assistente de Importação / Exportação do SQL Server. No SSMS, clique com o botão direito do mouse no banco de dados e selecione Tarefas> Importar (ou Exportar) Dados ...

Isso abre um assistente que o orienta nas etapas de seleção dos arquivos de origem / destino, bem como das tabelas de destino (pode criar tabelas se elas já não existirem). Você precisará mapear quais colunas vão para onde, mas o assistente é bastante direto. Quando terminar, solicitará que você execute ou salve o pacote (ou faça ambos). Salve o pacote. Isso salvará seu pacote no formato .dtsx se você optar por salvá-lo no sistema de arquivos. Sua outra opção é salvar o pacote no próprio SQL Server, que os manteria no banco de dados do sistema msdb.

Depois de salvar seu pacote, você pode criar um trabalho do SQL Agent para executá-lo periodicamente (você especifica a programação) para poder sempre carregar suas tabelas usando o SSIS. Se você quiser saber mais sobre o SSIS, confira os seminários on-line gratuitos da minha empresa (cobrimos toda a pilha de BI) no PragmaticWorks

SQLChicken
fonte
Na verdade, estamos criando aplicativos baseados na Web para não permitir que o usuário acesse diretamente a interface do banco de dados. Nosso aplicativo primeiro importa o arquivo e, em seguida, fazemos o restante da operação por meio de nosso aplicativo.
Kodvavi
11
@kodvavi; você pode invocar pacotes SSIS através de código .net ...
GBN
11
@kodvavi, não sei o que você quer dizer com essa afirmação. Os aplicativos da Web normalmente não têm o trabalho de iniciar um carregamento de dados, então por que isso importa? A parte ETL do banco de dados e da interface do aplicativo da web são duas coisas diferentes.
SQLChicken
Eu sei que muitas pessoas iniciam pacotes SSIS a partir da Web, mas para mim parece uma péssima idéia, dado o quanto pode dar errado com fontes do Excel.
NickMcDermaid
5

Aqui está um exemplo de como importar dados do Excel para o SQL Server. Um dos principais problemas é garantir o uso do componente Conversão de Dados entre o Excel e o SQL Server e fazer uma conversão do NVARCHAR para o VARCHAR, pois o Excel trata os dados como NVARCHAR.

http://www.mssqltips.com/tip.asp?tip=1393

Sankar Reddy
fonte
nvarchar está bem conosco porque nosso banco de dados suporta atributos multilíngues. Estou revendo os topis. thanx
kodvavi
0

Eu não descartaria nada mr. gbn,Sankar Reddy,SQLChicken . Mas eu gostaria de dizer que existe uma maneira simples de importar planilhas do Excel no SQL através do TSQL 'OPENROWSET'.

Por exemplo, para importar userplanilhas do Excel no TestDBbanco de dados. Suponha que eu já criei a [user]tabela no TestDBbanco de dados. Em seguida, o TSQL do openrowset simples seria mencionado abaixo dessa maneira

Use TestDB;
    Go
    select * INTO [User]
    from openrowset('MICROSOFT.ACE.OLEDB.12.0',
    'Excel 12.0; Database=C:\TestFolder\User.xlsx; HDR=yes; IMEX=1',
    'select * from [User$]');
    Go

Nota: estou escrevendo este TSQL no ambiente do SQL Server 2012. Para cada OLEDBprovedor de conjunto de linhas abertas do servidor SQL será diferente. Por favor, verifique o OLEDBlink servidor-> provedor suportado para essa versão do SQL server. No meu caso é ACE.OLEDB.12.0. Antes da importação, verifique se Allow inprocessesse MICROSOFT.ACE.OLEDB.12.0fornecedor está marcado ou não . Deve ser verificado assim insira a descrição da imagem aqui

Nota: - É testado no ambiente de produção. Mas no seu caso, sem testar no ambiente de teste. Não execute diretamente no ambiente de produção.

Md Haidar Ali Khan
fonte