Ошибка при выполнении BCP: хост-файлы BCP должны содержать хотя бы один столбец

Я хочу использовать BCP в своей базе данных. Для этой цели я написал этот запрос:

EXEC xp_cmdshell 'bcp "SELECT rtrim(ltrim(anumber)),rtrim(ltrim(bnumber)),rtrim(ltrim(duration))  FROM [CDRDB].[dbo].[CDRTABLE]"  queryout d:\myOUT.txt -S . -UCDRLOGIN -Pbeh1368421 -f "d:\myFORMAT.fmt"  '

Деталь файла формата myFormat.fmt такова:

9.0
3
1 SQLNCHAR 0 5 "," 1 ANUMBER "" 
2 SQLNCHAR 0 10 "," 2 BNUMBER ""
3 SQLNCHAR 0 10 "\r\n" 3 DURATION ""

Когда я запускаю команду BCP, я получаю эту ошибку:

введите здесь описание изображения

Как я могу решить эту проблему?


person user3671271    schedule 08.02.2016    source источник
comment
Вы пытались сначала запустить оператор select? Возможно, вам потребуется псевдоним для этих имен столбцов, например: rtrim(ltrim(anumber)) as Column1, хотя это всего лишь предположение. Вы также можете отреагировать на свой логин и пароль из примера кода.   -  person Nick.McDermaid    schedule 08.02.2016
comment
я меняю rtrim(ltrim(anumber)) на число и... но так не работает   -  person user3671271    schedule 08.02.2016
comment
Что касается ошибки «невозможно разрешить конфликт сортировки на уровне столбцов», в Интернете есть много предложений по запуску BCP -V и обеспечению того, чтобы ваша версия BPC соответствовала SQL Server, с которого вы извлекаете данные. Так что попробуйте это и отредактируйте свой вопрос с результатами. Также это может помочь опубликовать таблицу DDL (включая определения сортировки)   -  person Nick.McDermaid    schedule 09.02.2016


Ответы (1)


У вас есть переключатель -S .. Я не думаю, что этого достаточно для SQL Server. Выполните в SSMS следующее:

SELECT @@SERVERNAME;

И используйте вывод этого запроса вместо ..

Во-вторых, действительно ли нужен файл форматирования? Вместо этого вы можете поставить следующие переключатели: -w -t, -r\r\n

DECLARE @stmt VARCHAR(8000)='bcp "SELECT rtrim(ltrim(anumber)),rtrim(ltrim(bnumber)),rtrim(ltrim(duration)) FROM [CDRDB].[dbo].[CDRTABLE]" queryout "d:\myOUT.txt" -UCDRLOGIN -Pbeh1368421 -w -t, -r\r\n -S ' + @@SERVERNAME;
EXEC master.sys.xp_cmdshell @stmt;
person TT.    schedule 08.02.2016