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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了错误= [Microsoft] [SQL Server的ODBC驱动程序13]无法打开BCP主机数据文件相关的知识,希望对你有一定的参考价值。

我有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:Pathfile' + 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 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服务的帐户进行身份验证。

以上是关于错误= [Microsoft] [SQL Server的ODBC驱动程序13]无法打开BCP主机数据文件的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft SQL Server,错误: 3702

Microsoft SQL Server,错误: 18456

Microsoft SQL Server Management Studio 已超过了锁请求超时时段。 (Microsoft SQL Server,错误: 1222)

odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 1.,SQLExecDirect 中的 SQL 状态 0700

SQL STATE 37000 [Microsoft] [ODBC Microsoft Access驱动程序]语法错误或访问冲突

odbc_exec():SQL 错误:[Microsoft][ODBC Microsoft Access Driver] 查询表达式中的语法错误(缺少运算符)