SQL Server 2008 R2: экспорт данных с помощью команды bcp и сохранение вывода bcp в переменную - PullRequest
0 голосов
/ 29 августа 2018

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

Моя попытка :

DECLARE @Result varchar(max)
DECLARE @SQL nvarchar(max)

SET @SQL = N'Execute xp_cmdshell ''bcp "SELECT * FROM EMP" QueryOut  "E:\BCP\Result.pec"   -T -t@_@ -c -o "E:\BCP\LogReport.txt"'''

EXEC sp_executesql @SQL, N'@Result nvarchar(75) OUTPUT', @Result =@Result output

PRINT(@Result)

Но, получив сообщение об ошибке:

output
------------------------------------------------------------------------------
bcp: Unable to open output file E:\BCP\LogReport.txt: No such file or directory
NULL

Вопросы:
1. Как сохранить полученный результат в переменную?
2. Получил разрешение на файл и папку, но все равно получаю эту ошибку.

1 Ответ

0 голосов
/ 29 августа 2018
---------------------------------------- 1 -------------------------------------------

DECLARE @Result TABLE
(error_msg VARCHAR(800))

DECLARE 
    @SQL varchar(8000),
    @Result_var VARCHAR(MAX)=''

SET @SQL = N'bcp "SELECT * FROM <MY_DATABASE>.<MY_SCHEMA>.<MY_TABLE>" QueryOut  "E:\BCP\Result.pec"   -T -t@_@ -c -o "E:\BCP\LogReport.txt"'''

-- Insert the output from xp_cmdshell into the table @Result
INSERT INTO @Result (error_msg)
EXEC xp_cmdshell @SQL

-- Merge the rows
SELECT @Result_var = @Result_var + ' ' + ISNULL(error_msg,'') FROM @Result

-- Output in variable
PRINT @Result_var
--------------------------------------------------------------------------------------

2. Для меня ваша команда работает, проверьте доступ к папкам и подпапкам (для пользователя базы данных), проверьте разрешения на сервере sql.

...