SQL Server 2008 R2:使用 bcp 命令导出数据并将 bcp 输出存储到变量中
SQL Server 2008 R2: Export data using bcp command and store bcp output into variable
我想使用 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 -------------------------------------------
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 服务器上的权限。
我想使用 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 -------------------------------------------
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 服务器上的权限。