Импорт 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 Import
1) данные файла CSV могут иметь
,(запятая) между ними (Ex: описание), так как я могу импортировать эти данные?решение
если вы используете
,(запятая) в качестве разделителя, то нет никакого способа, чтобы различать запятую как признак конца поля и запятую в ваших данных. Я бы использовал другойFIELDTERMINATORкак||. Код будет выглядеть так и это будет ручка запятая и один Слэш отлично.2) Если клиент создает csv из excel, то данные, которые имеют запятые заключены в
" ... "(двойные кавычки) [как ниже пример: так как импорт может справиться с этим?решение
если вы используете массовую вставку, то нет никакого способа обрабатывать двойные кавычки, данные будут вставляется в строки с двойными кавычками. после вставки данных в таблицу можно замените эти двойные кавычки на'
'.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 client
в зависимости от нашего типа аутентификации мы выбираем его, как только это будет сделано, очень важный вариант приходит.
- мы можем определить идентификатор таблицы в CSV (рекомендуется, чтобы столбцы CSV назывались так же, как и поля в таблице). В опции редактировать сопоставления мы можем видеть предварительный просмотр каждой таблицы со столбцом электронной таблицы, если мы хотим, чтобы мастер вставлял идентификатор по умолчанию, мы оставляем опцию непроверенной.
включить ID insert
(обычно не начиная с 1), вместо этого, если у нас есть столбец с идентификатором в CSV, мы выбираем enable id insert, следующим шагом является завершение работы мастера, мы можем просмотреть изменения здесь.
с другой рука, в следующем окне могут появиться предупреждения, или предупреждения идеал состоит в том, чтобы игнорировать это, только если они оставляют ошибку необходимо обратить внимание.

Comments