【问题标题】:bulk insert returning error, "the file could not be opened"批量插入返回错误,“文件无法打开”
【发布时间】:2018-05-01 07:36:06
【问题描述】:

我在 SQL Server 11.0 中运行以下查询。

BULK INSERT [dbo].[Andy] FROM "Y:\users\joe\APP data main file.csv"
              WITH (FIRSTROW = 2, FIELDTERMINATOR = ',' ,
              ROWTERMINATOR = '\n', TABLOCK)

命令返回错误,

无法批量加载,因为文件“Y:\users\joe\APP data main file.csv" 无法打开。操作系统错误代码 3(The 系统找不到指定的路径。)。

这个错误的原因,通过在线研究,是 Bulk Insert 任务通过从目标 SQL 服务器执行 Bulk Insert 命令来加载文件来运行的。这意味着目标 SQL 服务器的 SQL Server 代理应该对我尝试加载的文件具有权限。 我怎样才能知道它是否存在?

其次,根据微软的网站,“……如果 SQL Server 用户使用 Windows 身份验证登录,则用户只能读取用户帐户可以访问的那些文件,而不管 SQL Server 进程的安全配置文件如何。”

我使用 Windows 身份验证登录 SQL Server。根据 MS 网站上的定义,我可以访问要从中插入的文件。我创建了它,我可以打开它。更具体地说,我登录的 Windows 帐户(我自己的)是创建 csv 文件的帐户,也是我打开 SQL Server 的帐户。然而错误就在那里。我缺少一些东西,但我不知道它是什么。

最后,我是使用 UNC 路径访问文件还是使用驱动器映射都没有关系。

【问题讨论】:

  • 请从文件名中发出空格并尝试
  • 这没什么区别,返回同样的错误。
  • 转到文件资源管理器>导航到文件>右键单击文件>属性>安全选项卡>检查用户权限。
  • 您能否在使用 UNC 并省略空格后更新您的错误。
  • 使用ANC并省略空格后,错误变为“操作系统错误代码53(未找到网络路径。)”

标签: sql-server


【解决方案1】:

看起来文件位于网络服务器上,您正在引用映射的驱动器名称,请尝试使用 UNC 网络路径。

【讨论】:

  • 正如我在原始描述末尾所说的,我是否使用 UNC 映射没有区别。
【解决方案2】:

我的 IT 部门就这个问题回复了一封电子邮件:

我认为问题是您被分配了一个服务器角色,基于 您被分配到的用户策略组 - 这将 对应于特定的服务器角色 - 通过网络 管理员且此服务器角色无权访问该文件 无论出于何种原因的路径。您可能有权访问服务器路径 因为您当前被分配到的另一个组 但如果该组与服务器角色不对应,则服务器 角色将无权访问。

所以我们有了它。从那以后,由于操作原因,我无论如何都无法批量上传,所以我不会再继续这样做了。

感谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多