cómo leer el contenido del file xml en la máquina remota (networking) a través de los procedimientos almacenados mssql

Intenté leer el contenido del file xml individual en la máquina local utilizando la inserción masiva.

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

Está funcionando, pero lo mismo estoy tratando de leer desde la máquina remota. da el siguiente error

 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.). 

me dieron el path de file como

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

Da el mismo error entonces, creé la unidad compartida de networking para esa máquina remota que es (z 🙂 dado el path de file como

 Z:\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML 

mismo error 🙁 ¿Me ayudan a resolverlo?

El problema aquí parece ser sobre files compartidos, no sobre SQL Server.

En primer lugar, una asignación de unidad es por usuario, por lo que el uso de letras de unidad causa problemas cuando se trabaja con SQL Server porque la count de service de SQL Server no tiene asignadas letras de unidad. Por esa razón, es mejor evitar completamente las letras de unidad y simplemente usar las routes UNC.

A continuación, la forma de compartir es \\ServerName\Share . Parece que el file al que intenta acceder se encuentra en la raíz de la unidad D :, por lo que la ruta correcta sería \\172.16.11.52\D$\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML . Pero tenga en count que D$ es un recurso compartido de administrador pnetworkingeterminado y que solo los administradores pueden usarlo. Dado que la count de service de SQL Server no tiene derechos de administrador, no debe utilizarla de todos modos, y el almacenamiento de files en la raíz de cualquier unidad (especialmente C: suele ser una mala práctica.

Finalmente, incluso si tiene un recurso compartido, la count que utiliza para acceder al recurso compartido debe tener permissions tanto en el recurso compartido como en el sistema de files. Este es un beneficio de ejecutar SQL Server usando una count de dominio .

En resumen, lo que probablemente necesite hacer es esto:

  1. Si aún no lo está, ejecute SQL Server utilizando una count de dominio (ver enlace arriba)
  2. Crea una carpeta para tus files, D:\XMLFiles (o lo que quieras)
  3. Comparte la carpeta, así que ahora tienes un \\172.16.11.52\XMLFiles compartido llamado \\172.16.11.52\XMLFiles
  4. Asegúrese de que la count de service de SQL Server tenga permissions para leer desde el recurso compartido
  5. Pruebe su código nuevamente:

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