错误= [Microsoft] [SQL Server的ODBC驱动程序13]无法打开BCP主机数据文件

问题描述 投票:0回答:1

我有1个表,每个记录的末尾包含一个KEY和一个文件ref。我还有另一个表,该表有很多记录,每个记录都包含一个KEY。然后,我通过KEY将两个表链接在一起,并希望基于文件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
sql-server tsql bcp
1个回答
0
投票

不是您的帐户需要访问共享。由于您正在通过“ 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服务的帐户进行身份验证。

© www.soinside.com 2019 - 2024. All rights reserved.