ОБНОВЛЕНИЕ: закончен с использованием этого метода, созданного Джонни Бубриски, а затем немного изменил его, чтобы пропустить дубликаты. Работает как шарм и, по-видимому, довольно быстро. Ссылка: http://johnnycode.com/2013/08/19/using-c-sharp-sqlbulkcopy-to-import-csv-data-sql-server/Массовая вставка из CSV-файла - пропустить дубликаты
Я искал ответ на этот вопрос, но не могу найти его. Я делаю массивную вставку T-SQL для загрузки данных в таблицу в локальной базе данных из файла csv. Мое заявление выглядит следующим образом:
BULK INSERT Orders
FROM 'csvfile.csv'
WITH(FIELDTERMINATOR = ';', ROWTERMINATOR = '0x0a', FORMATFILE = 'formatfile.fmt', ERRORFILE = 'C:\\ProgramData\\Tools_TextileMagazine\\AdditionalFiles\\BulkInsertErrors.txt')
GO
SELECT *
FROM Orders
GO
я получаю исключение при попытке вставить повторяющиеся строки (например, принимая тот же файл CSV дважды), который вызывает всю вставку, чтобы остановить и откат. Достаточно понятно, поскольку я нарушаю ограничение первичного ключа. Сейчас я просто показываю сообщение, чтобы пользователи знали, что дубликаты присутствуют в файле csv, но это, конечно, не правильное решение, на самом деле это не решение. Мой вопрос в том, есть ли способ игнорировать эти повторяющиеся строки и просто пропустить их и добавлять только строки, которые не дублируются? Может быть, в попытке поймать?
Если это невозможно, какой был бы «правильный» (из-за отсутствия лучшего слова) способ импорта данных из файла csv? Исключение вызывает у меня немного проблем. Я где-то читал, что вы можете настроить временную таблицу, загружать в нее данные и выбирать между двумя таблицами перед вставкой. Но действительно ли нет более простого способа сделать это с объемной вставкой?
Импортируйте данные во временную таблицу, очистите их, а затем вставьте их в пункт назначения. В противном случае используйте SSIS для очистки в рамках потока импорта. –