Importar file CSV en SQL Server

Estoy buscando ayuda para importar un file .csv en SQL Server usando BULK INSERT y tengo algunas preguntas básicas.

Cuestiones:

  1. Los datos del file CSV pueden tener , (coma) en el medio (por ejemplo, descripción), entonces, ¿cómo puedo hacer que la import maneje estos datos?

  2. Si el cliente crea el file CSV desde Excel, los datos que tienen una coma se incluyen entre "" (comillas dobles) [como en el ejemplo siguiente], entonces, ¿cómo puede la import manejar esto?

  3. ¿Cómo rastreamos si algunas filas tienen datos incorrectos, que importan saltos? (la import saltea filas que no son importables)

Aquí está el CSV de muestra con encabezado:

 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. 

Y statement 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 ) 

Importación basada en SQL Server CSV

1) Los datos del file CSV pueden tener , (coma) en el medio (por ejemplo, descripción), entonces, ¿cómo puedo hacer que la import maneje estos datos?

Solución

Si está usando , (coma) como delimitador, entonces no hay forma de diferenciar entre una coma como un terminador de campo y una coma en sus datos. FIELDTERMINATOR un FIELDTERMINATOR diferente como || . El código se vería así y esto manejará la coma y la barra única perfectamente.

2) Si el cliente crea el csv de excel, entonces los datos que tienen una coma se incluyen entre " ... " (comillas dobles) [como en el ejemplo siguiente], entonces, ¿cómo puede manejar la import esto?

Solución

Si está utilizando BULK insertado, entonces no hay manera de manejar comillas dobles, los datos se insertán con comillas dobles en las filas. después de insert los datos en la tabla, puede replace esas comillas dobles por ' '.

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

3) ¿Cómo rastreamos si algunas filas tienen datos incorrectos, que importan omisiones? (¿Importar saltea filas que no son importables)?

Solución

Para manejar las filas que no están cargadas en la tabla debido a datos o formattings no válidos, podría manejarse usando la propiedad ERRORFILE , especificar el nombre del file de error, escribirá las filas que tienen el error en el file de error. el código debería ser similar.

 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 ) 

La forma mejor, más rápida y más fácil de resolver el problema de coma en datos es usar Excel para save un file separado por comas después de haber establecido la configuration del separador de lists de Windows en algo que no sea una coma (como una tubería). Esto generará una tubería (o lo que sea) file separado para usted que luego podrá importar. Esto se describe aquí .

Primero debes importar el file CSV a la Tabla de datos

Luego puede insert filas masivas usando 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); } } } } } 

Así es como lo resolvería:

  1. Simplemente guarde su file CSV como una hoja XLS en Excel (Al hacerlo, no tendría que preocuparse por los delimitadores. El formatting de spreadsheet de Excel se leerá como una tabla y se importará directamente en una tabla SQL)

  2. Importar el file usando SSIS

  3. Escriba una secuencia de commands personalizada en el administrador de import para omitir / modificar los datos que está buscando (o ejecute una secuencia de commands maestra para examinar los datos que desea eliminar)

Buena suerte.

Importe un file CSV en una database por SQL Server Management Studio.

  1. Primero, crea una tabla en tu database en la cual importarás el file CSV.
  2. Inicie session en su database utilizando SQL Server Management Studio.
  3. Haga clic con el button derecho en la database y select Tareas -> Importar datos …
  4. Haga clic en el button Siguiente>.
  5. Para Origen de datos, select Fuente de file plano. Luego use el button Examinar para seleccionar el file CSV. Dedique un time a configurar la import de datos antes de hacer clic en el button Siguiente>.
  6. Para Destino, select el proveedor de database correcto (por ejemplo, para SQL Server 2012, puede usar SQL Server Native Client 11.0). Ingrese el nombre del Servidor; marque Usar authentication de SQL Server, ingrese el nombre de usuario, la contraseña y la database antes de hacer clic en el button Siguiente>.
  7. En la window Seleccionar tablas de origen y vistas, puede Editar asignaciones antes de hacer clic en el button Siguiente>.
  8. Marque Ejecutar inmediatamente y click el button Siguiente>.
  9. Haga clic en el button Finalizar para ejecutar el package.

Referencia