Может ли SQL Server bcp находиться в файле с окончаниями строк Unix?

StackOverflow https://stackoverflow.com/questions/1494285

Вопрос

Я пытаюсь использовать утилиту SQL Server bcp для импорта текстового файла из общего ресурса Samba.bcp задыхается от окончаний строк Unix.Я уверен, что мог бы добавить промежуточный шаг, либо в Unix, либо в Windows, чтобы изменить окончания строк в стиле Windows.Но я бы предпочел импортировать файлы из Unix без изменений.

Кто-нибудь знает, есть ли способ указать SQL Server bcp искать окончания строк Unix?

Это было полезно?

Решение

Вам необходимо использовать файл формата с bcp и указать терминатор как .Интерактивная командная строка всегда добавляет , где файл формата будет использовать именно то, что вы укажете.Ссылка http://www.eggheadcafe.com/software/aspnet/32239836/bcp-out-with-char10-as-row-terminator.aspx.

Создание файла формата довольно хорошо описано в BOL, но прокомментируйте/обновите исходное сообщение, если вам нужна помощь.

Другие советы

Простой ответ — использовать шестнадцатеричный признак, как упоминалось в одном из комментариев, в качестве признака конца строки:

-r 0x0a

вы пытались установить ROWTERMINATOR = ' '?

Я не думаю, что вы можете сделать это из командной строки bcp.Но я думаю, что следующая версия SQL будет работать.

DECLARE @Command nvarchar(1000)

SET @Command = N'BULK INSERT MyTable
FROM ''<path\file>''
WITH (ROWTERMINATOR = '''+CHAR(10)+''')'

exec sp_executeSQL @Command

Если у вас нет времени на детальное изучение bcp, посмотрите это:http://msdn.microsoft.com/en-us/library/ms190759.aspx

Он даст вам простой пример, объяснит, что означают интерактивные подсказки, возможность сохранить формат после завершения (если вы собираетесь делать это неоднократно) и т. д.и т. д.

Если ваши данные большие и/или вам нужно несколько полей, вы можете сначала создать таблицу, затем выполнить небольшой пробный экспорт (bcp примет простой выбор в качестве первого аргумента) и по-прежнему выбирать форматы в интерактивном режиме, столбец за столбцом.Вы можете позже покопаться в сохраненном файле fmt, если у вас есть для этого дополнительная причина.

Да, это сводит с ума.Насколько я понимаю, SQL Server bcp ВСЕГДА вставляет перед любым признаком конца строки, который вы ожидаете использовать.Итак, если вы не используете -r, вы ожидаете, что будет использоваться только .Но это не так... он тупо вставляет , чтобы можно было использовать .Если вы укажете -r , это все равно не сработает;Я подозреваю, потому что теперь он хочет, чтобы строка заканчивалась.Это все работа какого-то идиота-программиста для мира Windows, пытающегося облегчить жизнь новичкам и в конечном итоге делающего что-то практически невозможным для всех остальных.Я столкнулся с этой проблемой при передаче файлов из Sybase на сервер SQL, и решение заключалось в том, чтобы указать -r в bcp, исходящем из Sybase (который работает именно так, как вы его запрашиваете!) и -r (или просто не не используйте -r) для входа SQL Server bcp.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top