Я ищу помощь для импорта .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:\CSVData\Schools.csv'
WITH
(
FIRSTROW = 2,
FIELDTERMINATOR = ',', --CSV field delimiter
ROWTERMINATOR = '\n', --Use to shift the control to next row
TABLOCK
)
sql
sql-server
csv
bulkinsert
bulk
Prabhat
источник
источник
BULK NSERT
или у вас нет разрешений на это).Ответы:
На основе импорта SQL Server CSV
Решение
Если вы используете
,
(запятую) в качестве разделителя, то нет никакого способа разграничить запятую как терминатор поля и запятую в ваших данных. Я бы использовал другой,FIELDTERMINATOR
как||
. Код будет выглядеть так, и он будет отлично обрабатывать запятую и одиночную косую черту.Решение
Если вы используете BULK-вставку, то невозможно обработать двойные кавычки, данные будут вставлены с двойными кавычками в строки. после вставки данных в таблицу вы можете заменить эти двойные кавычки на '
'.
Решение
Для обработки строк, которые не загружены в таблицу из-за неверных данных или формата, можно обработать с помощью свойства ERRORFILE , указать имя файла ошибок, он запишет строки с ошибками в файл ошибок. код должен выглядеть так.
источник
Сначала вам нужно создать таблицу в вашей базе данных, в которую вы будете импортировать файл CSV. После создания таблицы выполните следующие действия.
• Войдите в свою базу данных с помощью SQL Server Management Studio.
• Щелкните правой кнопкой мыши по вашей базе данных и выберите
Tasks -> Import Data...
• Нажмите
Next >
кнопку• Для источника данных выберите
Flat File Source
. Затем используйте кнопку Обзор, чтобы выбрать файл CSV. Потратьте некоторое время на настройку того, как вы хотите импортировать данные, прежде чемNext >
нажимать на кнопку.• В качестве пункта назначения выберите правильного поставщика базы данных (например, для SQL Server 2012 вы можете использовать собственный клиент SQL Server 11.0). Введите имя сервера. Проверьте
Use SQL Server Authentication
переключатель. Введите имя пользователя, пароль и базу данных, прежде чем нажать наNext >
кнопку.• В окне «Выбор исходных таблиц и представлений» вы можете редактировать сопоставления перед нажатием
Next >
кнопки.• Установите
Run immediately
флажок и нажмитеNext >
кнопку.• Нажмите на
Finish
кнопку, чтобы запустить пакет.Вышеуказанное было найдено на этом сайте (я использовал его и протестировал):
источник
Вы должны использовать опции FORMAT = 'CSV', FIELDQUOTE = '"':
источник
Лучший, самый быстрый и простой способ решить проблему с запятой в данных - это использовать Excel для сохранения файла, разделенного запятыми, после того, как в Windows в качестве разделителя списка задано что-то отличное от запятой (например, канал). Затем он сгенерирует для вас отдельный файл (или любой другой), который вы затем сможете импортировать. Это описано здесь .
источник
Во-первых, вам нужно импортировать файл CSV в таблицу данных
Затем вы можете вставить объемные строки с помощью SQLBulkCopy
источник
Вот как бы я решил это:
Просто сохраните файл CSV в виде листа XLS в Excel (при этом вам не придется беспокоиться о разделителях. Формат электронной таблицы Excel будет считан как таблица и импортирован непосредственно в таблицу SQL)
Импортируйте файл, используя SSIS
Напишите пользовательский сценарий в диспетчере импорта, чтобы пропустить / изменить данные, которые вы ищете (или запустить мастер-сценарий для проверки данных, которые вы хотите удалить)
Удачи.
источник
Поскольку они не используют мастер импорта SQL, шаги будут следующими:
Щелкните правой кнопкой мыши базу данных в опциях задач для импорта данных,
Когда мастер открыт, мы выбираем тип данных, которые должны подразумеваться. В этом случае это будет
Мы выбираем файл CSV, вы можете настроить тип данных таблиц в CSV, но лучше всего взять его из CSV.
В зависимости от нашего типа аутентификации мы выбираем его, как только это будет сделано, появится очень важная опция.
(обычно не начиная с 1), вместо этого, если у нас есть столбец с идентификатором в CSV, мы выбираем включение вставки идентификатора, следующий шаг - завершить работу мастера, мы можем просмотреть изменения здесь.
С другой стороны, в следующем окне могут появиться предупреждения или предупреждения, в идеале лучше игнорировать это, только если они оставляют ошибку , необходимо обратить внимание.
Эта ссылка имеет изображения .
источник
Импортируйте файл в Excel, сначала открыв Excel, затем перейдя в DATA, импортируйте из TXT-файла, выберите расширение csv, в котором будут сохранены 0 префиксных значений, и сохраните этот столбец как TEXT, потому что в противном случае Excel отбрасывает ведущий 0, но НЕ дважды открыть в Excel, если у вас есть числовые данные в поле, начинающемся с 0 [ноль]). Затем просто сохраните как текстовый файл с разделителями табуляции. Когда вы импортируете в Excel, вы получаете возможность сохранить как GENERAL, TEXT и т. Д. Выберите TEXT, чтобы кавычки в середине строки в поле, таком как YourCompany, LLC, также сохранялись ...
Я хотел бы использовать функциональность FORMAT и Fieldquote, но это не поддерживается в моей версии SSMS
источник
Я знаю, что есть принятый ответ, но все же, я хочу поделиться своим сценарием, который, возможно, поможет кому-то решить их проблему ИНСТРУМЕНТЫ
СЦЕНАРИЙ Я загружал набор данных в формате CSV, который позже должен был отображаться в представлении. Я пытался использовать массовую загрузку, но не смог загрузить, как
BULK LOAD
использовали ячейка Excel также использовала,
,
однако я также не мог использоватьFlat file source
напрямую, потому что я использовалCode-First Approach
и делал эту единственную модель в БД SSMS, а не в модели, из которой мне пришлось использовать свойства позже.РЕШЕНИЕ
Add-Migration
в консоли пакета NuGetисточник
Я знаю, что это не точное решение вышеуказанного вопроса, но для меня это был кошмар, когда я пытался скопировать данные из одной базы данных, расположенной на отдельном сервере, в мой локальный компьютер.
Я пытался это сделать, сначала экспортировав данные с Сервера,
CSV/txt
а затем импортировав их в мою локальную таблицу.Оба решения: при записи запроса на импорт
CSV
или использовании мастера импорта данных SSMS всегда возникали ошибки (ошибки были очень общими, говоря о том, что существует проблема с синтаксическим анализом). И хотя я ничего особенного не делал, просто экспортировал вCSV
и затем пытался импортироватьCSV
в локальныйDB
, ошибки всегда были.Я пытался взглянуть на раздел картирования и предварительный просмотр данных, но всегда был большой беспорядок. И я знаю, что главной проблемой было появление одного из
table
столбцов, который содержал,JSON
иSQL
анализатор обрабатывал это неправильно.В конце концов, я придумала другое решение и хочу поделиться им на случай, если у кого-то еще возникнет подобная проблема.
Я использовал мастер экспорта на внешнем сервере.
Вот шаги, чтобы повторить тот же процесс:
1) Щелкните правой кнопкой мыши на базе данных и выберите
Tasks -> Export Data...
2) Когда откроется Мастер, нажмите «Далее», а вместо «Источник данных» выберите «Собственный клиент SQL Server».
3) После нажатия Next , вы должны выбрать Destionation .
Для этого снова выберите «Собственный клиент SQL Server».
На этот раз вы можете предоставить свой местный (или какой-то другой внешний
DB
)DB
.4) После нажатия кнопки «Далее» у вас есть два варианта: скопировать всю таблицу из одной
DB
в другую или записать запрос, чтобы указать точные данные для копирования. В моем случае мне нужна была не вся таблица (она была слишком большой), а лишь некоторая ее часть, поэтому я выбрал «Написать запрос, чтобы указать данные для передачи».5) И, наконец, вам нужно указать таблицу назначения, где будут выбраны данные.
А теперь перейдите прямо к концу мастера, нажав кнопки Далее / Готово .
источник
Может быть SSMS: как импортировать (копировать / вставить) данные из Excel может помочь (если вы не хотите использовать
BULK INSERT
или у вас нет разрешений на это).источник