【问题标题】:Error = [Microsoft][ODBC Driver 13 for SQL Server]Unable to open BCP host data-file错误 = [Microsoft][ODBC Driver 13 for SQL Server]无法打开 BCP 主机数据文件
【发布时间】:2019-10-03 14:44:44
【问题描述】:

我有 1 个表,每条记录的末尾都包含一个 KEY 和一个文件 ref。我还有另一个表,其中有很多记录,每条记录都包含一个 KEY。然后我通过 KEY 将两个表链接在一起,并希望根据文件 ref 导出数据。当我将它作为选择查询运行时,它工作正常......但是当我为了为每个文件 ref 生成一个文件而运行它时,它会失败,并在标题中出现错误,前面有 '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。当命令被允许时,它会带来严重的安全风险。它应该在 SQL Server 上被禁用。

标签: sql-server tsql bcp


【解决方案1】:

需要访问共享的不是您的帐户。由于您是通过“xp_cmdshell”命令运行 BCP 命令,因此实际执行 bcp 命令的帐户与在 SQL Server 机器上运行 SQL Server 服务的帐户相同。当您使用“xp_cmdshell”时,您会留下会话/身份验证并将控制权传递给 SQL Server 之外的新会话。这是使用运行 SQL Server 服务的帐户完成的,并且该命令在运行 SQL Server 的操作系统上执行。很可能,您甚至无法登录到 SQL Server 下的操作系统。

您必须确认 SQL 服务帐户有权访问共享。

我不确定这是您的问题,但可能是。您可以通过以下方式测试其他可能性:

  1. 打印@SQL 命令的内容,而不是执行它。将该值复制到命令窗口中并尝试自己运行该命令。这将测试命令是否有效以及路径之类的内容是否有效。

  2. 如果可以,请登录到运行 SQL Server 的物理服务器(Windows?)。以 SQL Server 服务帐户登录。然后尝试在命令窗口中执行 bcp 命令。这是最完整的测试,但通常我们无权使用用于运行 SQL Server 服务的帐户进行身份验证。

【讨论】:

  • 我可以确认这是一个权限问题,这解决了我的问题。谢谢杰米。
猜你喜欢
  • 1970-01-01
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
  • 2017-07-05
  • 1970-01-01
  • 2017-01-20
  • 2017-11-15
  • 2017-12-13
相关资源
最近更新 更多