我正在尝试将存储过程设置为SQL Server代理作业,并且它给出了以下错误,
无法批量加载,因为无法打开文件“P:\ file.csv”。操作系统错误代码3(无法检索此错误的文本。原因:15105)。 [SQLSTATE 42000](错误4861)
有趣的是,当我手动执行时,存储过程工作得很好。
驱动器P:是Windows SQL Server上从LINUX通过Samba共享的共享驱动器,它是通过执行以下命令设置的,
EXEC xp_cmdshell'净使用P:“\ lnxusanfsd01 \ Data”密码/用户:用户名/持久性:是'
任何有关这方面的帮助将受到高度赞赏
我不知道你是否解决了这个问题,但我有同样的问题,如果实例是本地的,你必须检查访问该文件的权限,但如果你从计算机访问服务器(远程访问),你必须指定服务器中的路径,这意味着将文件包含在服务器目录中,这解决了我的情况
例:
BULK INSERT Table
FROM 'C:\bulk\usuarios_prueba.csv' -- This is server path not local
WITH
(
FIELDTERMINATOR =',',
ROWTERMINATOR ='\n'
);
为了简单起见,我只是将导入数据的目录更改为服务器上的本地文件夹。
我将文件放在共享文件夹上,我只是将我的文件复制到服务器上的“c:\ TEMP \ Reports”(将查询从新文件夹更新为BULK INSERT)。代理任务成功完成:)
终于经过很长一段时间我可以通过代理工作自动BULK Insert。
最好的祝福。
我建议不为sql server启动的帐户映射P:驱动器。
我已经解决了这个问题,
登录到安装了SQL Server的服务器计算机,在服务器计算机上获取csv文件并执行查询,它将插入记录。
如果要提供数据类型兼容性问题,请更改该列的数据类型
这可能是权限问题,但您需要确保尝试以下步骤进行故障排除:
sa
运行,并在之前和之后添加net use
和net use /delete
命令请记住撤消任何更改(尤其是以sa
身份运行)。如果没有其他工作,您可以尝试将批量加载更改为在数据库服务器或安装了bcp的其他服务器上运行的计划任务。
通过Windows身份验证使用SQL连接:正在发生“Kerberos双跃点”:一跳是连接到SQL Server的客户端应用程序,第二跳是连接到远程“\\ NETWORK_MACHINE”的SQL Server。这样的双跳属于受约束委派的限制,您最终以匿名登录的方式访问共享,因此拒绝访问。
要解决此问题,您需要为SQL Server服务帐户启用约束委派。 See here for a good post that explains it quite well
使用SQL身份验证的SQL Server您需要为SQL登录创建凭据,并使用该凭据访问该特定网络资源。 See here