SQL Server 2008 R2:使用bcp命令导出数据并将bcp输出存储到变量中

时间:2018-08-29 08:41:44

标签: sql-server sql-server-2008-r2 bcp

我想使用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 :(得分:1)

---------------------------------------- 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服务器上的权限。