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