SQL Server批量插入失败(与网络相关)

时间:2009-09-15 15:55:10

标签: sql-server bulkinsert

我是SQL Server的新手。

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

BULK INSERT Table1 FROM'c:\ text.txt'WITH(FIELDTERMINATOR ='|')

我收到错误:

Msg 4860,Level 16,State 1,Line 1 无法批量加载。文件“c:\ text.txt”不存在。

我很肯定文件确实存在。

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

4 个答案:

答案 0 :(得分:1)

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

的路径

答案 1 :(得分: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 :(得分:1)

我同意这个文件存在于您的C驱动器上,而不是服务器的驱动器。

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

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

答案 3 :(得分:-1)

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

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

如果你绝对无法访问服务器的文件系统,那么你可以看看这样的事情:

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