【问题标题】:SQL Server Bulk Insert fails (Network related)SQL Server 大容量插入失败(网络相关)
【发布时间】:2010-11-28 12:31:49
【问题描述】:

我对 SQL Server 还很陌生。

我正在尝试使用 SQL Server Management Studio (2005) 中的命令批量插入表:

使用 (FIELDTERMINATOR = '|') 从 'c:\text.txt' 批量插入表 1

我得到错误:

消息 4860,第 16 级,状态 1,第 1 行 无法批量加载。文件“c:\text.txt”不存在。

我确定该文件确实存在。

我感觉它正在本地硬盘驱动器上寻找服务器所在位置的文件。是这样吗?如果是这样,您通常如何解决这个问题? (请注意,我在输入文本文件的位置时尝试指定我的 PC 的网络地址,但我得到一个权限错误。另外,我事先知道我的公司不允许将文件放置在服务器上)。

【问题讨论】:

    标签: sql-server bulkinsert


    【解决方案1】:

    SQL Server 没有从客户端读取数据的 SQL 语句(正如其他发帖者所指出的那样)。其他 RDBMS 产品确实实现了这一点(例如,Postgres COPY 语句允许您指定服务器上的文件或客户端上由客户端的 db 连接库读取的文件)。

    您可以使用 bcp 命令行程序将数据从客户端文件移动到 SQL Server 上的表。

    bcp 允许您将数据从本地文件复制到服务器上的表,或从服务器上的表(或选择查询)复制到本地文件。例如:

    bcp servername.dbname.tablename in c:\temp.txt -T -c
    

    将一个制表符分隔的文件 (temp.txt) 复制到指定的表中(假设该文件包含正确的列数)。

    我不确定这是否有帮助,但这是将数据从客户端文件移动到服务器表的唯一方法,而无需让服务器通过网络对客户端上的数据文件进行某种访问。

    【讨论】:

      【解决方案2】:

      我同意这是文件在您的 C 驱动器上而不是服务器驱动器上的问题。

      如果是权限问题,您是否尝试过在您的工作站上创建服务器确实有权读取的文件共享?可能是 \YourWorkstation\SQLFile 之类的东西,然后授予所有人(或访客,取决于您的网络权限设置方式)对其的读取权限?

      如果您无法在笔记本电脑上创建共享,或者由于某种原因无法授予该共享的权限,那么办公室中是否存在您有权访问的文件共享,并且该 SQL 也可以读取从?也许是 NAS 或“通用”网络文件夹?

      【讨论】:

        【解决方案3】:

        您是否在您的机器上创建了服务器可以看到的共享驱动器?如果是这样,那么您只需要引用包含您的机器名称的路径而不是 C:

        【讨论】:

          【解决方案4】:

          是的,它将在 SQL 服务器本身上查找文件。

          如果您可以将网络驱动器映射到 SQL 服务器的 C 驱动器,那么您可以在运行批量插入之前复制文件。

          如果您绝对无法访问服务器的文件系统,那么您可以考虑这样做:

          • 编写一个程序,读取您的文本文件并将内容插入到具有文本字段的临时表中的单个记录中,可能使用存储过程
          • 让程序执行bcp command,将临时表中的数据导出到SQL服务器本地文件系统上的一个文本文件中,到运行SQL服务的账户有写权限的文件夹中
          • 让程序运行批量插入命令,指定服务器上文本文件的路径
          • 删除文本文件和临时表

          【讨论】:

          • 如果他可以通过远程机器在db中写入记录,他为什么要再次复制BCP粘贴的文件以及所有这些?
          猜你喜欢
          • 2017-05-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-01-09
          • 1970-01-01
          • 2013-02-03
          • 2014-04-14
          • 1970-01-01
          相关资源
          最近更新 更多