43

我正在尝试将存储过程设置为 SQL Server 代理作业,它给了我以下错误,

无法批量加载,因为无法打开文件“P:\file.csv”。操作系统错误代码 3(无法检索此错误的文本。原因:15105)。[SQLSTATE 42000](错误 4861)

有趣的是,当我手动执行存储过程时,它工作得很好。

驱动器 P: 是 Windows SQL Server 上通过 Samba Share 从 LINUX 共享的驱动器,它是通过执行以下命令设置的,

EXEC xp_cmdshell 'net use P: "\lnxusanfsd01\Data" 密码 /user:username /Persistent:Yes'

对此的任何帮助将不胜感激

4

7 回答 7

60

我不知道你是否解决了这个问题,但我有同样的问题,如果实例是本地的,你必须检查访问文件的权限,但如果你是从计算机访问服务器(远程访问),你必须指定服务器中的路径,这意味着将文件包含在服务器目录中,这解决了我的情况

例子:

BULK INSERT Table
FROM 'C:\bulk\usuarios_prueba.csv' -- This is server path not local
WITH 
  (
     FIELDTERMINATOR =',',
     ROWTERMINATOR ='\n'
  );
于 2014-06-02T21:35:40.767 回答
7

为了简单起见,我只是将导入数据的目录更改为服务器上的本地文件夹

我的文件位于共享文件夹中,我只是将文件复制到服务器上的“c:\TEMP\Reports”(将查询更新为新文件夹中的 BULK INSERT)。代理任务成功完成:)

很长一段时间后,我终于可以通过代理工作自动批量插入。

此致。

于 2015-04-13T10:18:44.407 回答
6

我已经解决了这个问题,

登录到安装 SQL Server 的服务器计算机在服务器计算机上获取 csv 文件并执行查询,它将插入记录。

如果您将给出数据类型兼容性问题,请更改该列的数据类型

于 2019-02-21T09:25:27.667 回答
2

通过 Windows 身份验证使用 SQL 连接:正在发生“Kerberos 双跃点”:一个跃点是您的客户端应用程序连接到 SQL Server,第二个跃点是 SQL Server 连接到远程“\\NETWORK_MACHINE\”。这样的双跳受到约束委派的限制,您最终以匿名登录的身份访问共享,因此访问被拒绝。

要解决此问题,您需要为 SQL Server 服务帐户启用约束委派。看到这里有一个很好的帖子,很好地解释了它

使用 SQL 身份验证的 SQL Server 您需要为您的 SQL 登录创建一个凭据,并使用它来访问该特定网络资源。看这里

于 2018-11-07T16:14:55.233 回答
1

我建议没有为 sql server 启动的帐户映射 P: 驱动器。

于 2018-01-22T23:11:57.053 回答
0

这可能是权限问题,但您需要确保尝试以下步骤进行故障排除:

  • 将文件放在本地驱动器上并查看作业是否有效(如果可以将本地工作站上的驱动器号映射到数据库服务器上的目录,则不一定需要 RDP 访问权限)
  • 将文件放在不需要用户名和密码的远程目录(允许所有人阅读)并使用 UNC 路径 (\server\directory\file.csv)
  • 将 SQL 作业配置为以您自己的用户名运行
  • 将 SQL 作业配置为运行方式,并在前后sa添加net use和命令net use /delete

请记住撤消任何更改(尤其是作为 运行sa)。如果没有其他方法,您可以尝试将批量加载更改为计划任务,在数据库服务器或安装了 bcp 的另一台服务器上运行。

于 2013-10-21T13:07:20.303 回答
0

我确实尝试过授予对文件夹的访问权限,但这没有帮助。我的解决方案是为登录用户选择以下红色突出显示的选项

这是您在右键单击并选择您已登录的 Windows 身份验证模式的用户名时看到的内容。

于 2018-08-07T10:10:31.180 回答