Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
MasSQL Member Откуда: Екатеринбург Сообщений: 36 |
Доброе время суток! SQL Server 2016. Создаю файл форматирования fmt такой строчкой bcp Base_S.dbo.tbl_S format nul -c -t, -f C:\TC\S.fmt –T Разделителем полей выступает запятая, но в одном из полей есть запятая внутри значения поля, поэтому само значение поля выделено в кавычки. Чтобы такое принимать я правил руками файл fmt добавляя в разделитель ",\"" и "\",". Все работало хорошо, пока не пришел в руки csv файл в котором в этом поле то есть кавычки, то их нет ... Можно как-то обработать такую ситуацию? Вот скрин - http://prntscr.com/gufqay Заранее благодарю за помощь. |
7 окт 17, 18:34 [20851109] Ответить | Цитировать Сообщить модератору |
aleks222
Guest |
Це называется .CSV - Comma Separated Volume. BCP его не поддерживает. Если файл умеренного размера и производительность не главная проблема - разучивай OPENROWSET и ODBC-драйвер для .CSV. У MS ODBC-драйвер есть по-дефолту. |
8 окт 17, 17:41 [20852459] Ответить | Цитировать Сообщить модератору |
Ennor Tiegael Member Откуда: Сообщений: 3348 |
aleks222, Поддержка CSV появилась в 2017 версии. |
9 окт 17, 11:21 [20853844] Ответить | Цитировать Сообщить модератору |
MasSQL Member Откуда: Екатеринбург Сообщений: 36 |
А через BULK INSERT с FORMATFILE никак что-ли такие случаи не обработать? |
9 окт 17, 12:29 [20854121] Ответить | Цитировать Сообщить модератору |
Ennor Tiegael Member Откуда: Сообщений: 3348 |
MasSQL, Если бы CSV можно было заливать, написав особо хитрый формат файл, то зачем было бы нужно добавлять поддержку формата в BCP / Bulk Insert? |
9 окт 17, 12:53 [20854212] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3984 |
в интернете есть всякие шарповые прилагалища, которые умеют всасывать ЗаРаЗн-ый формат (CSV) |
||
9 окт 17, 13:12 [20854292] Ответить | Цитировать Сообщить модератору |
MasSQL Member Откуда: Екатеринбург Сообщений: 36 |
Всем привет. Если кому интересно и вдруг будут у кого похожие проблемы, то из положения я вышел с помощью создания пакетов SSIS. Т.е. сначала я вручную делаю импорт из файла нужной мне структуры в нужную таблицу и сохраняю этот пакет на сервере с определенным именем (можно сохранить как файл), не забыв указать кавычку в свойстве - "Разделитель строки заголовка". А затем при запуске уже подменяю и путь к серверу и путь до самого файла для импорта. CREATE PROCEDURE [dbo].[TransferText] ( @SpecFile nvarchar(255), -- имя пакета SSIS @fileTransfer nvarchar(max) -- полный путь файла для импорта ) AS BEGIN DECLARE @returncode int, @dtexec varchar(1000) SET NOCOUNT ON -- вместо пути до файла DTExec.exe можно просто указать "dtexec" но если на компе были раньше старые версии SQL сервера (как у меня) то будут косяки, -- так что можно явно путь указать до нужной версии DTExec set @dtexec = '""C:\Program Files\Microsoft SQL Server\130\DTS\Binn\DTExec.exe" '+ '/sq "'+@SpecFile+'" '+ '/CONNECTION DestinationConnectionOLEDB;"\"Data Source='+@@servername+';Initial Catalog=Base_TC;Provider=SQLNCLI11;Integrated Security=SSPI;Auto Translate=false;\"" '+ '/CONNECTION SourceConnectionFlatFile;"\"'+@fileTransfer+'\"""' --EXEC @returncode = xp_cmdshell @dtexec -- можно сделать обработку ошибок EXEC xp_cmdshell @dtexec END |
18 окт 17, 10:34 [20878194] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |