query - Importar archivo CSV en SQL Server
import csv sql server management studio (8)
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 importación esto?
Debe usar las opciones FORMAT = ''CSV'', FIELDQUOTE = ''"'':
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
)
Estoy buscando ayuda para importar un archivo .csv
en SQL Server usando BULK INSERT
y tengo algunas preguntas básicas.
Cuestiones:
Los datos del archivo CSV pueden tener
,
(coma) en medio (por ejemplo, descripción), entonces, ¿cómo puedo hacer que la importación maneje estos datos?Si el cliente crea el archivo CSV desde Excel, los datos que tienen una coma se incluyen entre
""
(comillas dobles) [como en el ejemplo siguiente], entonces, ¿cómo puede importar esto?¿Cómo rastreamos si algunas filas tienen datos incorrectos, que importan saltos? (la importación 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 declaración 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
)
Importe un archivo CSV en una base de datos por SQL Server Management Studio.
- Primero, crea una tabla en tu base de datos en la cual importarás el archivo CSV.
- Inicie sesión en su base de datos utilizando SQL Server Management Studio.
- Haga clic con el botón derecho en la base de datos y seleccione Tareas -> Importar datos ...
- Haga clic en el botón Siguiente>.
- Para Origen de datos, seleccione Fuente de archivo plano. Luego use el botón Examinar para seleccionar el archivo CSV. Dedique un tiempo a configurar la importación de datos antes de hacer clic en el botón Siguiente>.
- Para Destino, seleccione el proveedor de base de datos correcto (por ejemplo, para SQL Server 2012, puede usar SQL Server Native Client 11.0). Ingrese el nombre del Servidor; marque Usar autenticación de SQL Server, ingrese el nombre de usuario, la contraseña y la base de datos antes de hacer clic en el botón Siguiente>.
- En la ventana Seleccionar tablas de origen y vistas, puede Editar asignaciones antes de hacer clic en el botón Siguiente>.
- Marque Ejecutar inmediatamente y haga clic en el botón Siguiente>.
- Haga clic en el botón Finalizar para ejecutar el paquete.
Así es como lo resolvería:
Simplemente guarde su archivo CSV como una hoja XLS en Excel (Al hacerlo, no tendría que preocuparse por los delimitadores. El formato de hoja de cálculo de Excel se leerá como una tabla y se importará directamente en una tabla SQL)
Importar el archivo usando SSIS
Escriba una secuencia de comandos personalizada en el administrador de importación para omitir / modificar los datos que está buscando (o ejecute una secuencia de comandos maestra para examinar los datos que desea eliminar)
Buena suerte.
Debido a que no usan el asistente de importación de SQL, los pasos serían los siguientes:
Haga clic derecho en la base de datos en las tareas de opción para importar datos,
Una vez que el asistente está abierto, seleccionamos el tipo de datos que se implicarán. En este caso, sería el
Fuente de archivo plano
Seleccionamos el archivo CSV, puede configurar el tipo de datos de las tablas en el archivo CSV, pero lo mejor es traerlo desde el archivo CSV.
- Haga clic en Siguiente y seleccione en la última opción que es
Cliente SQL
Dependiendo de nuestro tipo de autenticación, lo seleccionamos, una vez que se hace esto, viene una opción muy importante.
- Podemos definir el id de la tabla en el CSV (se recomienda que las columnas del CSV se llamen igual que los campos de la tabla). En la opción Editar asignaciones, podemos ver la vista previa de cada tabla con la columna de la hoja de cálculo. Si deseamos que el asistente inserte el ID de manera predeterminada, dejamos la opción sin marcar.
Habilitar inserción de ID
(por lo general, no a partir de 1); en cambio, si tenemos una columna con el ID en el archivo CSV, seleccionamos la inserción del id de habilitación, el siguiente paso es finalizar el asistente, podemos revisar los cambios aquí.
Por otro lado, en la siguiente ventana pueden aparecer alertas, o advertencias, lo ideal es ignorar esto, solo si salen de error es necesario prestar atención.
Importación basada en SQL Server CSV
1) Los datos del archivo CSV pueden tener
,
(coma) en el medio (por ejemplo, descripción), entonces, ¿cómo puedo hacer que la importación 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 importación esto?
Solución
Si usa la inserción BULK, entonces no hay forma de manejar las comillas dobles, los datos se insertarán con comillas dobles en las filas. después de insertar los datos en la tabla, puede reemplazar 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 formatos no válidos, podría manejarse usando la propiedad ERRORFILE , especificar el nombre del archivo de error, escribirá las filas que tienen el error en el archivo 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 la coma en cuestión de datos es usar Excel para guardar un archivo separado por comas después de haber establecido la configuración del separador de listas de Windows en algo que no sea una coma (como una tubería). Esto generará una tubería (o lo que sea) archivo separado para usted que luego podrá importar. Esto se describe here .
Primero debes importar el archivo CSV a la Tabla de datos
Luego puede insertar 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);
}
}
}
}
}
Primero necesita crear una tabla en su base de datos en la que va a importar el archivo CSV. Después de crear la tabla, siga los pasos a continuación.
• Inicie sesión en su base de datos utilizando SQL Server Management Studio
• Haga clic con el botón derecho en su base de datos y seleccione Tasks -> Import Data...
• Haga clic en el botón Next >
• Para el origen de datos, seleccione Flat File Source
. Luego use el botón Examinar para seleccionar el archivo CSV. Dedique un tiempo a configurar cómo quiere que se importen los datos antes de hacer clic en el botón Next >
.
• Para el destino, seleccione el proveedor de base de datos correcto (por ejemplo, para SQL Server 2012, puede usar SQL Server Native Client 11.0). Ingrese el nombre del Servidor. Active el botón de selección Use SQL Server Authentication
. Ingrese el nombre de usuario, la contraseña y la base de datos antes de hacer clic en el botón Next >
.
• En la ventana Seleccionar tablas de origen y vistas, puede editar las asignaciones antes de hacer clic en el botón Next >
.
• Marque la casilla Run immediately
y haga clic en el botón Next >
.
• Haga clic en el botón Finish
para ejecutar el paquete.
Lo anterior se encontró en este website (lo he usado y probado):