BULK INSERT批量插入报错:文件不存在或无访问权限求助
批量插入报错(Msg 4860)的解决办法
问题背景
执行以下SQL批量插入代码:
BULK INSERT equi2022a FROM 'C:\Users\Someone\Documents\Processing\equi' WITH (FORMATFILE = 'C:\Users\someone\Desktop\formatfileequi-2.txt'
触发错误提示:
Msg 4860, Level 16, State 1, Line 125
Cannot bulk load. The file "C:\Users\someone\Documents\QCEW Processing\equi" does not exist or you don't have file access rights.
已确认文件存在,尝试添加.txt后缀后问题依旧。
解决办法
- 给SQL Server服务账号加权限
SQL Server执行BULK INSERT时,用的是自身服务运行的账号,不是你当前登录Windows的账号。打开系统服务管理器,找到SQL Server对应的服务,查看其登录账号,给这个账号授予文件所在文件夹(包括格式文件的文件夹)的读取权限。 - 修正路径拼写
错误提示里的路径是C:\Users\someone\Documents\QCEW Processing\equi,但代码里写的是C:\Users\Someone\Documents\Processing\equi——注意文件夹名多了QCEW前缀,要么改代码里的路径,要么确认实际文件夹的准确名称。 - 改用UNC路径
如果是远程SQL Server,本地C盘路径对服务器不可见,把文件放到共享文件夹,用\\你的电脑名称\共享文件夹名\equi这种UNC路径。就算是本地服务器,UNC路径也能规避不少权限问题。 - 关闭占用文件的程序
确认目标文件和格式文件没被其他程序(比如记事本、Excel)打开,文件被锁定的话SQL Server无法读取。 - 补全SQL语法
原代码的WITH子句最后少了一个右括号),先修正语法:
语法错误可能导致后续文件读取的判断异常。BULK INSERT equi2022a FROM 'C:\Users\Someone\Documents\Processing\equi' WITH (FORMATFILE = 'C:\Users\someone\Desktop\formatfileequi-2.txt');
内容的提问来源于stack exchange,提问作者Tim Wilcox
相关产品推荐
相关产品推荐

