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

Откуда:
Сообщений: 1497
Здравствуйте.
Пытаюсь через bcp выгрузить результат работы процедуры. В процедуре простая выборка, возвращающая 10 строк из двух полей. В этих полях текст, полученный соединением строк и полей:
SELECT TOP(10) 
'D:\docs\' + T.pthOnFTP AS fname_cur 
	, 'D:\ForDP\' + T.FName AS fname_new 
FROM TAB1


Set @OutputFileName = 'D:\ForDP\listfile.txt'
Set @dbName = DB_NAME()
Set @cmd = 'BCP "EXEC DGP_result @tip=2" queryout "' + @OutputFileName + '" -d' + @dbName +' -CACP -c -r -t\n -T'
EXEC @result = master..xp_cmdshell @cmd


В результате получаю файл весом 64 кб, в котором только значение из первого поля первой строки. Остальное заполнено пробелами. Я предполагаю, что он мне первое поле взял как nvarchar(max), вывел его и остановился.... как быть?
1 дек 15, 14:45    [18497624]     Ответить | Цитировать Сообщить модератору
 Re: BCP выгружает только первый столбец первой строки...  [new]
Диам
Member

Откуда:
Сообщений: 1497
кажется понял в чем дело...
Из справки:
" query "
Is a Transact-SQL query that returns a result set. If the query returns multiple result sets, such as a SELECT statement that specifies a COMPUTE clause, only the first result set is copied to the data file; subsequent result sets are ignored. Use double quotation marks around the query and single quotation marks around anything embedded in the query. queryout must also be specified when bulk copying data from a query.

т.е. получение данных из хранимки, если там вычисляемое поле, должно быть в единственном поле....

Как же быть, если у меня сложный запрос, из которого надо получить данные?
1 дек 15, 14:55    [18497698]     Ответить | Цитировать Сообщить модератору
 Re: BCP выгружает только первый столбец первой строки...  [new]
Maxx_UA
Guest
cmdsql.exe ... -o'result.txt'
1 дек 15, 15:03    [18497740]     Ответить | Цитировать Сообщить модератору
 Re: BCP выгружает только первый столбец первой строки...  [new]
o-o
Guest
Диам,
в той цитате, что вы привели,
говорится: если процедура вернет несколько резалтсетов,
то bcp только первый в файл выведет.
в любом случае у меня выводит оба столбца при вот такой процедуре:
create proc dbo.usp_for_bcp
as
SELECT TOP(10) 
'D:\docs\' + name AS fname_cur 
	, 'D:\ForDP\' + name AS fname_new 
FROM sys.all_columns

declare @cmd varchar(400) = 'BCP "EXEC dbo.usp_for_bcp" queryout "c:\bcp.txt" -d db100 -T -c'
EXEC  master..xp_cmdshell @cmd
1 дек 15, 15:57    [18498137]     Ответить | Цитировать Сообщить модератору
 Re: BCP выгружает только первый столбец первой строки...  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8826
BCP - устаревший инструмент, лучше использовать SSIS, если нет каких-то ограничений.
1 дек 15, 16:25    [18498286]     Ответить | Цитировать Сообщить модератору
 Re: BCP выгружает только первый столбец первой строки...  [new]
Диам
Member

Откуда:
Сообщений: 1497
o-o,
у меня какие-то странности. Вывожу в селект одно поле - файл создается из 10 записей. Вывожу в селект только второе - тоже создается. Вывожу оба через запятую - в результате в файле только первое поле из первой строки.

хотя ваш пример с вашей процедурой отработал как следует. У себя я для верности конечные аргументы сделал такими же, т.е. убрал -r -t\n
1 дек 15, 16:48    [18498424]     Ответить | Цитировать Сообщить модератору
 Re: BCP выгружает только первый столбец первой строки...  [new]
Glory
Member

Откуда:
Сообщений: 104751
Диам
У себя я для верности конечные аргументы сделал такими же, т.е. убрал -r -t\n

Теперь возьмите Профайлер и узнайте, что происходит на сервере
1 дек 15, 19:21    [18499282]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить