我试图使用批量插入来读取本地计算机中单个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
同样的错误:-(帮助我解决吗?
这里的问题似乎与文件共享有关,而不与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:)通常是一种不好的做法。
\\ServerName\Share
\\172.16.11.52\D$\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML
D$
C:
最后,即使您拥有共享,用于访问共享的帐户也必须同时具有共享和文件系统的权限。这是使用域帐户运行SQL Server的好处之一。
总之,您可能需要做的是:
D:\XMLFiles
\\172.16.11.52\XMLFiles
SELECT * FROM OPENROWSET ( BULK '\\172.16.11.52\XMLFiles\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML' , SINGLE_CLOB ) AS xmlData