我是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的网络地址,但是我收到了权限错误。另外,我事先知道我的公司不允许将文件放在服务器上)。
答案 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驱动器,那么您可以在运行批量插入之前复制该文件。
如果你绝对无法访问服务器的文件系统,那么你可以看看这样的事情: