错误 = [Microsoft][ODBC Driver 13 SQL 服务器]无法打开 BCP 主机 data-file
Error = [Microsoft][ODBC Driver 13 for SQL Server]Unable to open BCP host data-file
我有 1 个 table,它在每条记录的末尾包含一个 KEY 和一个文件引用。我还有另一个 table,它有很多记录,每条记录都包含一个 KEY。然后我 link 两个 table 通过 KEY 在一起,并希望根据文件 ref 导出数据。当我 运行 它作为 select 查询时它工作正常......但是当我 运行 它的目的是为每个文件引用生成一个文件时它失败并出现标题错误前面有 'SQLState = S1000, NativeError = 0'
行。我可以访问该目录,并且正在 运行 在服务器上安装代码。任何指导将不胜感激。
DECLARE @File_number INT
DECLARE @SQL VARCHAR(8000)
DECLARE file_num CURSOR READ_ONLY FAST_FORWARD LOCAL FOR
SELECT DISTINCT File_number FROM map_sequence_tranid ORDER BY 1
OPEN file_num
FETCH NEXT FROM file_num INTO @File_number
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @SQL = 'bcp "SELECT b.File_number, a.[Field1], b.[Field2] from Table1 a, Table2 b where a.[Key]=b.[key] and b.File_number=' + CAST(@File_number as varchar(10)) + ' order by a.[key]" queryout ''E:\Path\file' + CAST(@File_number AS VARCHAR(10)) + '.txt'' -c -T -t'','' -S ' + @@SERVERNAME
EXEC master..xp_cmdshell @SQL
FETCH NEXT FROM file_num INTO @File_number
END
CLOSE file_num
DEALLOCATE file_num
不是您的帐户需要访问共享。由于您是通过 "xp_cmdshell" 命令 运行 执行 BCP 命令,因此实际执行 bcp 命令的帐户与 运行 执行 SQL 服务器服务的帐户相同SQL 服务器框。当您使用 "xp_cmdshell" 时,您将 session/authentication 留在后面并将控制权传递给 SQL 服务器之外的新会话。这是使用 运行 正在 SQL 服务器服务的帐户完成的,并且命令是在 SQL 服务器正在 运行 的 OS 上执行的.最有可能的是,您甚至无法登录 SQL 服务器下的 OS。
您必须确认 SQL 服务帐户可以访问该共享。
我不确定这是不是您的问题,但可能是。您可以通过以下方式测试其他可能性:
打印@SQL 命令的内容而不是执行它。将该值复制到命令 window 并尝试自己 运行 命令。这将测试命令是否有效以及路径是否有效。
如果可以,请登录您的 SQL 服务器 运行 所在的物理服务器 (windows?)。以 SQL 服务器服务帐户登录。然后尝试在命令 window 中执行 bcp 命令。这是最完整的测试,但通常我们无权使用用于 运行 SQL 服务器服务的帐户进行身份验证。
我有 1 个 table,它在每条记录的末尾包含一个 KEY 和一个文件引用。我还有另一个 table,它有很多记录,每条记录都包含一个 KEY。然后我 link 两个 table 通过 KEY 在一起,并希望根据文件 ref 导出数据。当我 运行 它作为 select 查询时它工作正常......但是当我 运行 它的目的是为每个文件引用生成一个文件时它失败并出现标题错误前面有 'SQLState = S1000, NativeError = 0'
行。我可以访问该目录,并且正在 运行 在服务器上安装代码。任何指导将不胜感激。
DECLARE @File_number INT
DECLARE @SQL VARCHAR(8000)
DECLARE file_num CURSOR READ_ONLY FAST_FORWARD LOCAL FOR
SELECT DISTINCT File_number FROM map_sequence_tranid ORDER BY 1
OPEN file_num
FETCH NEXT FROM file_num INTO @File_number
WHILE @@FETCH_STATUS = 0 BEGIN
SELECT @SQL = 'bcp "SELECT b.File_number, a.[Field1], b.[Field2] from Table1 a, Table2 b where a.[Key]=b.[key] and b.File_number=' + CAST(@File_number as varchar(10)) + ' order by a.[key]" queryout ''E:\Path\file' + CAST(@File_number AS VARCHAR(10)) + '.txt'' -c -T -t'','' -S ' + @@SERVERNAME
EXEC master..xp_cmdshell @SQL
FETCH NEXT FROM file_num INTO @File_number
END
CLOSE file_num
DEALLOCATE file_num
不是您的帐户需要访问共享。由于您是通过 "xp_cmdshell" 命令 运行 执行 BCP 命令,因此实际执行 bcp 命令的帐户与 运行 执行 SQL 服务器服务的帐户相同SQL 服务器框。当您使用 "xp_cmdshell" 时,您将 session/authentication 留在后面并将控制权传递给 SQL 服务器之外的新会话。这是使用 运行 正在 SQL 服务器服务的帐户完成的,并且命令是在 SQL 服务器正在 运行 的 OS 上执行的.最有可能的是,您甚至无法登录 SQL 服务器下的 OS。
您必须确认 SQL 服务帐户可以访问该共享。
我不确定这是不是您的问题,但可能是。您可以通过以下方式测试其他可能性:
打印@SQL 命令的内容而不是执行它。将该值复制到命令 window 并尝试自己 运行 命令。这将测试命令是否有效以及路径是否有效。
如果可以,请登录您的 SQL 服务器 运行 所在的物理服务器 (windows?)。以 SQL 服务器服务帐户登录。然后尝试在命令 window 中执行 bcp 命令。这是最完整的测试,但通常我们无权使用用于 运行 SQL 服务器服务的帐户进行身份验证。