Импорт CSV-файла в SQL Server
Я ищу помощь для импорта .csv
файл в SQL Server с помощью BULK INSERT
и у меня есть несколько основных вопросов.
вопросы:
данные CSV-файла могут иметь
,
(запятая) между ними (например, описание), так как я могу импортировать эти данные?если клиент создает CSV из Excel, то данные, которые имеют запятую, заключаются в
""
(двойные кавычки) [как показано ниже] так как импорт может справиться с этим?как мы отслеживаем, если некоторые строки имеют плохие данные, которые пропускают импорт? (импортирует пропуски строк, которые не импортируются)
вот пример CSV с заголовком:
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.
и инструкция SQL для импорта:
BULK INSERT SchoolsTemp
FROM 'C:CSVDataSchools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = 'n', --Use to shift the control to next row
TABLOCK
)
8 ответов
на основе SQL Server CSV импорт
1) Данные CSV-файла могут иметь
,
(запятая) между (Ex: описание), так как я могу импортировать эти данные?
решение
если вы используете ,
(запятая) в качестве разделителя, тогда нет возможности различать запятую как Терминатор поля и запятую в ваших данных. Я бы использовал другой FIELDTERMINATOR
как ||
. Код будет выглядеть так, и это будет ручка запятая и один Слэш отлично.
2) Если клиент создает csv из excel, то данные, которые имеют запятая заключена в
" ... "
(двойные кавычки) [как ниже пример: так как импорт может справиться с этим?
решение
если вы используете BULK insert, то нет способа обрабатывать двойные кавычки, данные будут
вставляется двойными кавычками в строки.
после вставки данных в таблицу можно замените эти двойные кавычки на''.
update table
set columnhavingdoublequotes = replace(columnhavingdoublequotes,'"','')
3) Как мы отслеживаем, если некоторые строки имеют плохие данные, которые пропускают импорт? (импорт пропускает строки, которые не являются импортируемыми)?
решение
для обработки строк, которые не загружаются в таблицу из-за недопустимых данных или формата, может быть ручка с помощью свойство ERRORFILE, Укажите имя файла ошибки, он будет писать строки имея ошибка ошибка файл. код должен выглядеть так.
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
)
сначала вам нужно создать таблицу в вашей базе данных, в которую вы будете импортировать файл CSV. После создания таблицы выполните следующие действия.
• войдите в свою базу данных с помощью SQL Server Management Studio
• щелкните правой кнопкой мыши на базе данных и выберите Tasks -> Import Data...
• Нажмите кнопку
• для источника данных выберите Flat File Source
. Затем с помощью кнопки Обзор выберите файл CSV. Потратьте некоторое время на настройку вы хотите, чтобы данные были импортированы перед нажатием кнопки .
• для назначения выберите правильный поставщик базы данных (например, для SQL Server 2012 можно использовать собственный клиент SQL Server 11.0). Введите имя сервера. Проверьте радио. Введите имя пользователя, пароль и базу данных перед нажатием кнопки .
• в окне Выбор исходных таблиц и представлений можно редактировать сопоставления перед нажатием кнопки Next >
кнопка.
• Регистрация Run immediately
флажок и нажмите на кнопку .
• нажмите на кнопку Finish
кнопка для запуска пакета.
выше было найдено на этом сайт (я использовал его и проверял):
лучший, самый быстрый и простой способ решить проблему с запятыми в данных-использовать Excel для сохранения файла, разделенного запятыми, после установки параметра разделителя списка Windows на что-то другое, чем запятая (например, канал). Затем для вас будет создан разделенный канал (или что-то еще), который вы можете импортировать. Это описано здесь.
2) Если клиент создает csv из excel, то данные, которые имеют запятые заключены внутри " ... "(двойные кавычки) [как показано ниже пример: так как импорт может справиться с этим?
вы должны использовать FORMAT = 'CSV', FIELDQUOTE = '"' options:
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
)
импортируйте CSV-файл в базу данных с помощью SQL Server Management Studio.
- сначала создайте таблицу в своей базе данных, в которую вы импортируете CSV-файл.
- войдите в свою базу данных с помощью SQL Server Management Studio.
- щелкните правой кнопкой мыши базу данных и выберите задачи - > импорт данных...
- Нажмите кнопку Далее>.
- для источника данных выберите источник "плоский файл". Затем с помощью кнопки Обзор выберите файл CSV. Провести время настройки импорта данных перед нажатием кнопки Далее >.
- для назначения выберите правильный поставщик базы данных (например, для SQL Server 2012 можно использовать собственный клиент SQL Server 11.0). Введите имя сервера; установите флажок Использовать проверку подлинности SQL Server, введите имя пользователя, пароль и базу данных перед нажатием кнопки Далее >.
- в окне Выбор исходных таблиц и представлений можно редактировать сопоставления перед нажатием кнопки Далее >.
- Проверить Запуск немедленно и нажмите кнопку Далее>.
- Нажмите кнопку Готово, чтобы запустить пакет.
Firs вам нужно импортировать файл CSV в таблицу данных
затем вы можете вставлять массовые строки с помощью 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);
}
}
}
}
}
вот как я бы решить это:
просто сохраните CSV-файл в виде XLS-листа в excel (при этом вам не придется беспокоиться о разделителях. Формат электронной таблицы Excel будет считываться как таблица и импортироваться непосредственно в таблицу SQL)
импортируйте файл с помощью SSIS
напишите пользовательский скрипт в диспетчере импорта, чтобы опустить / изменить данные, которые вы ищете.(Или запустите мастер-скрипт для проверки данных вы хотите удалить)
Удачи.
поскольку они не используют мастер импорта SQL, шаги будут следующими:
щелкните правой кнопкой мыши по базе данных в опции задач для импорта данных
после того, как мастер открыть, выбираем тип данных, которые будут подразумеваться. В этом случае это будет
источник "плоский файл"
мы выбираем файл CSV, вы можете настройте тип данных таблиц в CSV, но лучше всего вывести его из CSV.
- Нажмите кнопку Далее и выберите в последний вариант
клиент SQL
в зависимости от нашего типа аутентификации мы выбираем его, как только это будет сделано, появляется очень важная опция.
- мы можем определить идентификатор таблицы в CSV (рекомендуется, чтобы столбцы CSV назывались так же, как поля в таблице). В опции редактировать сопоставления мы можем увидеть предварительный просмотр каждой таблицы со столбцом электронной таблицы, если мы хотим, чтобы мастер вставил идентификатор по умолчанию, мы оставляем опцию непроверенной.
включить ID insert
(обычно не начиная с 1), вместо этого, если у нас есть столбец с идентификатором в CSV, мы выбираем enable id insert, следующим шагом является завершение мастера, мы можем просмотреть изменения здесь.
с другой рука, в следующем окне могут появиться оповещения, или предупреждения идеально игнорировать это, только если они оставляют ошибку необходимо обратить внимание.