Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?  [new]
MasSQL
Member

Откуда: Екатеринбург
Сообщений: 32
Доброе время суток!
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]     Ответить | Цитировать Сообщить модератору
 SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?  [new]
aleks222
Guest
Це называется .CSV - Comma Separated Volume.
BCP его не поддерживает.

Если файл умеренного размера и производительность не главная проблема - разучивай OPENROWSET и ODBC-драйвер для .CSV.
У MS ODBC-драйвер есть по-дефолту.
8 окт 17, 17:41    [20852459]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 2859
aleks222,

Поддержка CSV появилась в 2017 версии.
9 окт 17, 11:21    [20853844]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?  [new]
MasSQL
Member

Откуда: Екатеринбург
Сообщений: 32
А через BULK INSERT с FORMATFILE никак что-ли такие случаи не обработать?
9 окт 17, 12:29    [20854121]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 2859
MasSQL,

Если бы CSV можно было заливать, написав особо хитрый формат файл, то зачем было бы нужно добавлять поддержку формата в BCP / Bulk Insert?
9 окт 17, 12:53    [20854212]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 1602
MasSQL
Доброе время суток!
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

Заранее благодарю за помощь.


в интернете есть всякие шарповые прилагалища, которые умеют всасывать ЗаРаЗн-ый формат (CSV)
9 окт 17, 13:12    [20854292]     Ответить | Цитировать Сообщить модератору
 Re: SQL Server. bcp. Файл форматирования.Кавычки то есть, то нет ... можно ли как-то победить?  [new]
MasSQL
Member

Откуда: Екатеринбург
Сообщений: 32
Всем привет.
Если кому интересно и вдруг будут у кого похожие проблемы, то из положения я вышел с помощью создания пакетов 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 Ответить