1

我对 SQL Server 相当陌生。

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

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

我得到错误:

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

我很肯定该文件确实存在。

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

4

4 回答 4

1

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

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

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

于 2009-09-28T14:40:34.967 回答
1

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

于 2009-09-15T21:20:56.787 回答
1

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

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

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

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

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

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

于 2009-09-28T14:13:41.867 回答
-1

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

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

如果您绝对无法访问服务器的文件系统,那么您可以考虑执行以下操作:

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