1

我尝试使用批量插入读取本地机器中单个 xml 文件的内容。

SELECT * FROM OPENROWSET ( BULK '''+ @FILENAME+''' , SINGLE_CLOB ) AS xmlData

它正在工作,但我正试图从远程机器上读取数据。它给出以下错误

Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "Z:\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML" could not be opened. Operating system error code 3(The system cannot find the path specified.).

我给文件路径为

\\172.16.11.52\D:\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML

然后它给出了同样的错误,我为那个远程机器创建了网络共享驱动器,即(z:)给定文件路径为

Z:\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML

同样的错误:-(帮我解决它?

4

1 回答 1

2

这里的问题似乎是关于文件共享,而不是关于 SQL Server。

首先,驱动器映射是针对每个用户的,因此在使用 SQL Server 时使用驱动器号会导致问题,因为 SQL Server 服务帐户没有映射任何驱动器号。出于这个原因,最好完全避免驱动器号并简单地使用 UNC 路径。

接下来,股份的形式是\\ServerName\Share。看起来您尝试访问的文件位于 D: 驱动器的根目录中,因此正确的路径是\\172.16.11.52\D$\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML. 但是,请注意,这D$默认的管理员共享,只有管理员可以使用它。由于 SQL Server 服务帐户希望没有管理员权限,因此您无论如何都不应该使用它,并且将文件存储在任何驱动器的根目录(尤其是C:)通常是一种不好的做法。

最后,即使您有一个共享,您用来访问该共享的帐户也需要同时拥有该共享和文件系统的权限。这是使用域帐户运行 SQL Server 的好处之一。

总之,您可能需要做的是:

  1. 如果还没有,请使用域帐户运行 SQL Server(请参阅上面的链接)
  2. 为您的文件创建一个文件夹,调用它D:\XMLFiles(或任何您喜欢的名称)
  3. 共享文件夹,所以现在您有一个名为\\172.16.11.52\XMLFiles
  4. 确保 SQL Server 服务帐户具有从共享读取的权限
  5. 再次尝试您的代码:

SELECT * FROM OPENROWSET ( BULK '\\172.16.11.52\XMLFiles\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML' , SINGLE_CLOB ) AS xmlData

于 2012-10-11T14:31:05.647 回答