Estou procurando ajuda para importar um .csv
arquivo para o SQL Server usando BULK INSERT
e tenho algumas perguntas básicas.
Problemas:
Os dados do arquivo CSV podem ter
,
(vírgula) entre (Ex: descrição), então como posso fazer a importação manipulando esses dados?Se o cliente cria o CSV a partir do Excel, os dados que possuem vírgula são colocados entre
""
(aspas duplas) [como no exemplo abaixo]. Como a importação pode lidar com isso?Como rastreamos se algumas linhas têm dados incorretos, que a importação ignora? (a importação ignora as linhas que não são importáveis)
Aqui está o exemplo de CSV com cabeçalho:
Name,Class,Subject,ExamDate,Mark,Description
Prabhat,4,Math,2/10/2013,25,Test data for prabhat.
Murari,5,Science,2/11/2013,24,"Test data for his's test, where we can test 2nd ROW, Test."
sanjay,4,Science,,25,Test Only.
E instrução SQL para importar:
BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
sql
sql-server
csv
bulkinsert
bulk
Prabhat
fonte
fonte
BULK NSERT
ou não tem permissões para isso).Respostas:
Importação baseada em CSV do SQL Server
Solução
Se você estiver usando
,
(vírgula) como delimitador, não há como diferenciar uma vírgula como terminador de campo e uma vírgula nos seus dados. Eu usaria umFIELDTERMINATOR
gosto diferente||
. O código seria semelhante e isso manipulará vírgula e barra única perfeitamente.Solução
Se você estiver usando a inserção BULK, não há como lidar com aspas duplas, os dados serão inseridos com aspas duplas nas linhas. Depois de inserir os dados na tabela, você poderá substituir essas aspas duplas por '
'.
Solução
Para manipular linhas que não são carregadas na tabela devido a dados ou formato inválidos, pode ser manipulado usando a propriedade ERRORFILE , especifique o nome do arquivo de erro, ele gravará as linhas com erro no arquivo de erro. código deve ser parecido.
fonte
Você primeiro precisa criar uma tabela em seu banco de dados na qual importará o arquivo CSV. Após a tabela ser criada, siga as etapas abaixo.
• Faça logon no seu banco de dados usando o SQL Server Management Studio
• Clique com o botão direito do mouse no seu banco de dados e selecione
Tasks -> Import Data...
• Clique no
Next >
botão• Para a fonte de dados, selecione
Flat File Source
. Em seguida, use o botão Procurar para selecionar o arquivo CSV. Passe algum tempo configurando como deseja que os dados sejam importados antes de clicar noNext >
botão.• Para o destino, selecione o provedor de banco de dados correto (por exemplo, para o SQL Server 2012, você pode usar o SQL Server Native Client 11.0). Digite o nome do servidor. Verifique o
Use SQL Server Authentication
botão de opção. Digite o nome de usuário, senha e banco de dados antes de clicar noNext >
botão.• Na janela Selecionar tabelas e visualizações de origem, você pode editar mapeamentos antes de clicar no
Next >
botão.• Marque a
Run immediately
caixa de seleção e clique noNext >
botão.• Clique no
Finish
botão para executar o pacote.O acima foi encontrado neste site (eu o usei e testei):
fonte
Você deve usar as opções FORMAT = 'CSV', FIELDQUOTE = '"' ':
fonte
A maneira melhor, mais rápida e fácil de resolver a vírgula na emissão de dados é usar o Excel para salvar um arquivo separado por vírgula depois de definir a configuração do separador de lista do Windows para algo diferente de vírgula (como um tubo). Isso irá gerar para você um arquivo separado por canal (ou qualquer outro) que você possa importar. Isto é descrito aqui .
fonte
Primeiro, você precisa importar o arquivo CSV para a Tabela de dados
Em seguida, você pode inserir linhas em massa usando SQLBulkCopy
fonte
Aqui está como eu resolveria isso:
Apenas salve seu arquivo CSV como uma planilha XLS no Excel (ao fazer isso, você não precisa se preocupar com delimitadores. O formato da planilha do Excel será lido como uma tabela e importado diretamente para uma tabela SQL)
Importar o arquivo usando o SSIS
Escreva um script personalizado no gerenciador de importação para omitir / modificar os dados que você está procurando (ou execute um script mestre para examinar os dados que você deseja remover)
Boa sorte.
fonte
Como eles não usam o assistente de importação SQL, as etapas seriam as seguintes:
Clique com o botão direito do mouse no banco de dados nas tarefas opcionais para importar dados,
Uma vez aberto o assistente , selecionamos o tipo de dados a ser implícito. Nesse caso, seria o
Selecionamos o arquivo CSV, você pode configurar o tipo de dados das tabelas no CSV, mas é melhor trazê-lo do CSV.
Dependendo do nosso tipo de autenticação, nós a selecionamos, uma vez que isso é feito, uma opção muito importante é fornecida.
(geralmente não começando em 1). Se tivermos uma coluna com o ID no CSV, selecionaremos a inserção de ID de ativação. A próxima etapa é finalizar o assistente. Podemos revisar as alterações aqui.
Por outro lado, na janela a seguir podem aparecer alertas ou avisos, o ideal é ignorar isso, apenas se eles deixarem erro é necessário prestar atenção.
Este link tem imagens .
fonte
Importe o arquivo para o Excel primeiro abrindo o excel, depois indo para DATA, importe do arquivo TXT, escolha a extensão csv que preservará 0 valores prefixados e salve a coluna como TEXT, porque o Excel eliminará o 0 principal caso contrário (NÃO clique duas vezes para abrir com o Excel se você tiver dados numéricos em um campo começando com 0 [zero]). Em seguida, salve como um arquivo de texto delimitado por tabulações. Ao importar para o Excel, você tem a opção de salvar como GENERAL, TEXT, etc. escolha TEXT para que as aspas no meio de uma string em um campo como YourCompany, LLC também sejam preservadas ...
Gostaria de poder usar a funcionalidade FORMAT e Fieldquote, mas isso não parece ser suportado na minha versão do SSMS
fonte
Sei que há respostas aceitas, mas ainda quero compartilhar meu cenário que talvez ajude alguém a resolver seu problema FERRAMENTAS
CENÁRIO i estava carregando o conjunto de dados no formato CSV, que mais tarde seria mostrado na tela. Tentei usar o carregamento em massa, mas não consigo carregar como
BULK LOAD
estava usandoe a célula do Excel também estava usando
,
, no entanto, eu também não podia usarFlat file source
diretamente porque estava usandoCode-First Approach
e fazendo isso apenas no modelo SSMS DB, não no modelo do qual precisei usar as propriedades posteriormente.SOLUÇÃO
Add-Migration
no console do pacote NuGetfonte
Sei que essa não é a solução exata para a pergunta acima, mas, para mim, foi um pesadelo quando eu estava tentando copiar dados de um banco de dados localizado em um servidor separado para o meu local.
Eu estava tentando fazer isso primeiro exportando dados do servidor para
CSV/txt
e importando -os para minha tabela local.Ambas as soluções: escrever a consulta para importar
CSV
ou usar o assistente SSMS Import Data estava sempre produzindo erros (os erros eram muito gerais, dizendo que há um problema de análise). E embora eu não estivesse fazendo nada de especial, basta exportar paraCSV
e depois tentar importarCSV
para o localDB
, os erros sempre estavam lá.Eu estava tentando olhar para a seção de mapeamento e a visualização de dados, mas sempre havia uma grande bagunça. E eu sei que o principal problema estava vindo de uma das
table
colunas, que estava contendoJSON
e oSQL
analisador estava tratando isso errado.Então, finalmente, eu vim com uma solução diferente e quero compartilhá-la, caso outra pessoa tenha um problema semelhante.
O que fiz foi usar o Assistente de Exportação no servidor externo.
Aqui estão as etapas para repetir o mesmo processo:
1) Clique com o botão direito do mouse no banco de dados e selecione
Tasks -> Export Data...
2) Quando o Assistente for aberto, escolha Avançar e, no lugar de "Fonte de dados:", escolha "SQL Server Native Client".
3) Depois de clicar em Avançar , você deve selecionar o destino .
Para isso, selecione novamente "SQL Server Native Client".
Desta vez, você pode fornecer seu local (ou algum outro externo
DB
)DB
.4) Após pressionar o botão Avançar, você tem duas opções para copiar a tabela inteira de uma
DB
para outra ou anotar a consulta para especificar os dados exatos a serem copiados. No meu caso, eu não precisava da tabela inteira (era muito grande), mas apenas de uma parte dela, então escolhi "Escrever uma consulta para especificar os dados a serem transferidos".5) E, finalmente, você precisa especificar a tabela de destino onde os dados serão selecionados.
E agora vá direto para o final do Assistente pressionando os botões Avançar / Concluir .
fonte
Pode ser SSMS: Como importar (Copiar / Colar) dados do Excel pode ajudar (se você não deseja usar
BULK INSERT
ou não tem permissões para isso).fonte