Автоматизировать импорт файла CSV в SQL Server - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь импортировать несколько различных файлов CSV в базу данных SQL Server 2008R2

Данные в файлах разделяются запятыми.Я не могу сказать о формате файла.

Некоторые столбцы являются текстовыми и разделяются двойными кавычками («как в Excel»).Эти столбцы содержат текст, который может содержать дополнительные запятые в тексте («Тем не менее, это сводит меня с ума») ..

Я попытался использовать Bulk Insert для загрузки текстовых файлов в несколько таблиц SQL.Тем не менее, встроенные запятые в текстовые столбцы вызывают сбой.В SQL Server 2017 включена опция установки FORMAT =CSV and FIELDQUOTE = '"', но я застрял с SQL Server 2008R2.

Я мог бы использовать DTS / SSIS, но он связывает версию VS с версией SQL.Поэтому, если я пишу SSIS в VS2012 или VS2010, он может не работать с нашим SQL Server 2008R2.И я не думаю, что у нас есть какие-либо VS2008.

Так каков следующий лучший способ импортировать эти файлы CSV.

Массовая загрузка - это самый чистый способ загрузки полдюжины различных файлов CSV в разные таблицы.

Должен ли я предварительно обрабатывать файлы CSV и заменять запятые на каналы.Если да, то как узнать, какие запятые заменить (Regex?)?Или я делаю весь импорт в .Net?Что грязно и отнимает много времени.

1 Ответ

0 голосов
/ 27 сентября 2019

Хорошо, я обнаружил, что многие люди спрашивают об этом здесь и в StackExchange, и им говорят, что это невозможно, и вам нужно использовать SSIS.

Все, что вам нужно, - это файл формата SQL.И хотя есть несколько ссылок о том, как использовать файл форматирования, я нашел только одну, в которой объясняется, как он работает, включая текстовые поля с запятыми в них.

Вот синтаксис, используемый в сценарии sql

        BULK INSERT raw.routes FROM N'C:\WhereMyTextFileis\Import.txt'  
        WITH ( 
            FORMATFILE = N'C:\WhereMyFormatFileIS\MyFormat.fmt'
            ,FIRSTROW = 2

        )

и вот содержимое моего файла формата

10.0
8
1       SQLCHAR             0       50      ","     	1     RouteID            ""
2       SQLCHAR             0       50      ",\""     	2     RouteShortName     Latin1_General_CI_AS
3       SQLCHAR             0       100      "\","     	3     RouteLongName      Latin1_General_CI_AS
4       SQLCHAR             0       200      ","     	4     RouteDescription	""
5       SQLCHAR             0       50      ","     	5     RouteType         ""
6       SQLCHAR             0       2000      ","   	6     RouteURL          ""
7       SQLCHAR             0       100      ","   		7     RouteColour       ""
8       SQLCHAR             0       100      "\r\n"   	8     RouteTextColour   ""

странный вид "," \ "" - удалить двойные кавычки в начале моего цитируемого текстового столбца RouteShortName, а "\", "удаляет кавычки вконец цитируемого текстового столбца RouteShortName. Но важным моментом является то, что запятые хранятся в содержимом данных столбца.

Надеюсь, это поможет кому-то еще.

Erick

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...