Importar o ficheiro CSV para o servidor SQL

estou à procura de Ajuda para importar um ficheiro .csv para o servidor SQL usando BULK INSERT e tenho algumas perguntas básicas.

Questões:

  1. Os dados do arquivo CSV podem ter , (vírgula) no meio (ex: descrição), então como posso fazer a importação lidar com esses dados?

  2. Se o cliente cria o CSV a partir do Excel, então os dados que têm vírgula são incluídos dentro "" (aspas duplas) [como o exemplo abaixo] então como a importação pode lidar com isso?

  3. como rastreamos se algumas linhas têm dados ruins, que importam falhas? (importa as linhas de salto que não são importáveis)

aqui está a amostra 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 declaraçã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
)
Author: Somnath Muluk, 2013-03-06

8 answers

SQL Server CSV Based Import

1) Os dados do ficheiro CSV podem ter , (vírgula) entre (Ex: descrição), então como posso fazer importação manuseando esses dados?

Solução

Se você está usando , (vírgula) como um delimitador, então não há nenhuma maneira de diferenciar entre uma vírgula como um terminador de campo e uma vírgula em seus dados. Eu usaria um diferente FIELDTERMINATOR como ||. O código parece e isto vai lidar com vírgula E barra simples. perfeitamente.

2) Se o cliente criar o csv a partir do excel, então os dados que têm as vírgulas são incluídas dentro de " ... " (aspas duplas) [como o abaixo exemplo] então como a importação pode lidar com isso?

Solução

Se estiver a usar o 'BULK insert' então não há forma de lidar com aspas duplas, os dados serão inserida com aspas duplas nas linhas. depois de inserir os dados na tabela você poderia substituir essas aspas com ''.

update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')

3) Como é que rastreamos se algumas linhas têm dados inválidos, que importam os saltadores? (as linhas de importação dos salta que não são importáveis)?

Solução

Para lidar com linhas que não são carregadas na tabela devido a dados ou formato inválidos, pode ser lidar com a utilização de propriedade do ficheiro de erros , indique o nome do ficheiro de erros, que irá escrever as linhas erro ao ficheiro de erro. o código deve parecer.

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
    ERRORFILE = 'C:\CSVDATA\SchoolsErrorRows.csv',
    TABLOCK
    )
 124
Author: mr_eclair, 2017-09-08 03:48:38

Primeiro precisa de criar uma tabela na sua base de dados na qual irá importar o ficheiro CSV. Depois que a tabela é criada, siga os passos abaixo.

* Entre na sua base de dados usando o SQL Server Management Studio

* carregue com o botão direito na sua base de dados e seleccione Tasks -> Import Data...

* carregue no botão Next >

• para a fonte de dados, seleccione Flat File Source. Em seguida, use o botão de navegação para selecionar o arquivo CSV. Passar algum tempo a configurar como deseja que os dados sejam foi importado antes de carregar no botão Next >.

• para o Destino, seleccione o fornecedor de base de dados correcto (por exemplo, para o servidor SQL 2012, pode usar o cliente nativo do servidor SQL 11.0). Indique o nome do servidor. Verifique o botão de rádio Use SQL Server Authentication. Indique o nome do utilizador, a senha e a base de dados antes de carregar no botão Next >.

• na janela seleccionar as tabelas e vistas de código, poderá editar os mapeamentos antes de carregar no botão Next >.

* assinale a opção Run immediately e carregue em o botão Next >.

* carregue no botão Finish para executar o pacote.

O acima foi encontrado neste site (eu usei-o e testei):

 17
Author: Zd8n8k, 2018-02-14 09:42:52

A melhor, mais rápida e fácil maneira de resolver a vírgula na questão dos dados é usar o Excel para gravar um ficheiro separado por vírgulas depois de ter definido a configuração do separador da lista do Windows para algo que não seja uma vírgula (como um pipe). Isto irá então gerar um ficheiro separado por pipe (ou o que quer que seja) para si, que poderá então importar. Isto é descrito Aqui .

 8
Author: Sachin Kainth, 2013-11-07 16:45:24

2) Se o cliente criar o csv a partir do excel, então os dados que têm vírgulas são fechadas dentro " ... "(aspas duplas) [como o abaixo exemplo] então como a importação pode lidar com isso?

Deve usar o formato = 'CSV', FIELDQUOTE = '"' opções:

BULK INSERT SchoolsTemp
FROM 'C:\CSVData\Schools.csv'
WITH
(
    FORMAT = 'CSV', 
    FIELDQUOTE = '"',
    FIRSTROW = 2,
    FIELDTERMINATOR = ',',  --CSV field delimiter
    ROWTERMINATOR = '\n',   --Use to shift the control to next row
    TABLOCK
)
 8
Author: Oleg, 2018-01-23 09:11:10

Importar um ficheiro CSV para uma base de dados pelo SQL Server Management Studio.

  1. Primeiro, crie uma tabela na sua base de dados para a qual irá importar o ficheiro CSV.
  2. faça login na sua base de dados usando o Estúdio de gestão de servidores SQL.
  3. carregue com o botão direito na base de dados e seleccione Tarefas -> importar dados...
  4. carregue no botão Seguinte >.
  5. para a fonte de dados, seleccione a fonte plana do ficheiro. Em seguida, use o botão de navegação para selecionar o arquivo CSV. Passar algum tempo a configurar os dados importar antes de carregar no botão > Seguinte .
  6. para o Destino, seleccione o fornecedor de base de dados correcto (por exemplo, para o servidor SQL 2012, pode usar o cliente nativo do servidor SQL 11.0). Indique o nome do servidor; assinale a autenticação do servidor SQL, indique o nome do utilizador, a senha e a base de dados antes de carregar no botão > Seguinte.
  7. Na janela seleccionar as tabelas e vistas de código, poderá editar os mapeamentos antes de carregar no botão > Seguinte.
  8. Verifique executar imediatamente e carregue no botão > Seguinte.
  9. carregue no botão Terminar para executar o pacote.

Referência

 7
Author: Somnath Muluk, 2017-09-22 10:48:15

Primeiro tem de importar o ficheiro CSV para a tabela de dados

Depois poderá inserir linhas a granel utilizando SQLBulkCopy

using System;
using System.Data;
using System.Data.SqlClient;

namespace SqlBulkInsertExample
{
    class Program
    {
      static void Main(string[] args)
        {
            DataTable prodSalesData = new DataTable("ProductSalesData");

            // Create Column 1: SaleDate
            DataColumn dateColumn = new DataColumn();
            dateColumn.DataType = Type.GetType("System.DateTime");
            dateColumn.ColumnName = "SaleDate";

            // Create Column 2: ProductName
            DataColumn productNameColumn = new DataColumn();
            productNameColumn.ColumnName = "ProductName";

            // Create Column 3: TotalSales
            DataColumn totalSalesColumn = new DataColumn();
            totalSalesColumn.DataType = Type.GetType("System.Int32");
            totalSalesColumn.ColumnName = "TotalSales";

            // Add the columns to the ProductSalesData DataTable
            prodSalesData.Columns.Add(dateColumn);
            prodSalesData.Columns.Add(productNameColumn);
            prodSalesData.Columns.Add(totalSalesColumn);

            // Let's populate the datatable with our stats.
            // You can add as many rows as you want here!

            // Create a new row
            DataRow dailyProductSalesRow = prodSalesData.NewRow();
            dailyProductSalesRow["SaleDate"] = DateTime.Now.Date;
            dailyProductSalesRow["ProductName"] = "Nike";
            dailyProductSalesRow["TotalSales"] = 10;

            // Add the row to the ProductSalesData DataTable
            prodSalesData.Rows.Add(dailyProductSalesRow);

            // Copy the DataTable to SQL Server using SqlBulkCopy
            using (SqlConnection dbConnection = new SqlConnection("Data Source=ProductHost;Initial Catalog=dbProduct;Integrated Security=SSPI;Connection Timeout=60;Min Pool Size=2;Max Pool Size=20;"))
            {
                dbConnection.Open();
                using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
                {
                    s.DestinationTableName = prodSalesData.TableName;

                    foreach (var column in prodSalesData.Columns)
                        s.ColumnMappings.Add(column.ToString(), column.ToString());

                    s.WriteToServer(prodSalesData);
                }
            }
        }
    }
}
 3
Author: kombsh, 2013-12-11 16:40:10
Eis como eu o resolveria:
  1. Basta salvar o seu arquivo CSV como uma folha XLS no excel(ao fazer isso, você não teria que se preocupar com delimitiers. O formato da planilha do Excel será lido como uma tabela e importado diretamente para uma tabela SQL)

  2. Importar o ficheiro com o SSIS

  3. Escreva um programa personalizado no Gestor de importação para omitir/modificar os dados que procura.(Ou executar um script mestre para examinar os dados que você está procurando remover)

Boa Sorte.
 3
Author: Zee, 2017-03-17 18:56:24

Porque não usam o Assistente de importação SQL, os passos seriam os seguintes:

enter image description here

  1. Carregue com o botão direito na base de dados da opção tarefas para importar os dados ,

  2. Uma vez que o assistente esteja aberto, selecionamos o tipo de dados a ser implícito. Neste caso, seria o

Fonte do ficheiro Plano

Se seleccionarmos o ficheiro CSV, poderá configurar o tipo de dados das tabelas no CSV, mas é melhor para trazê-lo do CSV.

  1. Carregue em Seguinte e seleccione na última opção que é

Cliente SQL

Dependendo do nosso tipo de autenticação, seleccionamo-lo, uma vez que isto esteja feito, surge uma opção muito importante.

  1. podemos definir o id da tabela no CSV (recomenda-se que as colunas do CSV sejam chamadas do mesmo modo que os campos na tabela). Na opção Editar mapeamentos podemos ver a antevisão de cada tabela com a coluna da folha de cálculo, se quisermos que o assistente insira o id por omissão, deixamos a opção desligada.

Activar o ID inserir

(normalmente não a partir de 1), em vez disso, se tivermos uma coluna com o id no CSV, seleccionamos a opção Activar a inserção de id, o próximo passo é acabar com o assistente, podemos rever as alterações aqui.

Por outro lado, na janela seguinte podem vir alertas, ou alertas o ideal é ignorar isto, só se eles deixarem o erro é preciso de prestar atenção.

Esta ligação tem imagens .

 0
Author: jarvis24, 2018-05-10 15:27:58