comment lire le contenu du file xml dans la machine distante (réseau) grâce à des procédures stockées mssql

J'ai essayé de lire le contenu du file xml unique dans la machine locale en utilisant l'insertion en bloc.

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

Ça marche, mais c'est la même chose que j'essaie de lire depuis la machine distante. c'est donner l'erreur suivante

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

j'ai donné le path de file comme

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

Il donne la même erreur alors, j'ai créé le lecteur de partage réseau pour cette machine distante qui est (z 🙂 donné le path de file comme

 Z:\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML 

même erreur 🙁 Aidez-moi à le résoudre?

Le problème ici semble être sur les partages de files, pas sur SQL Server.

Tout d'abord, un mappage de lecteur est par user, donc l'utilisation de lettres de lecteur pose des problèmes lors de l'utilisation de SQL Server, car aucune lettre de lecteur n'est affectée au count de service SQL Server. Pour cette raison, il est préférable d'éviter complètement les lettres de lecteur et d'utiliser simplement les paths UNC.

Ensuite, la forme d'un partage est \\ServerName\Share . Il semble que le file \\172.16.11.52\D$\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML vous essayez d'accéder se trouve à la racine du lecteur D :, le path correct sera donc \\172.16.11.52\D$\TechnicalLoss_EnergyAccounting_10.10.2012.12.19.PM.XML . Notez toutefois que D$ est un partage d'administration par défaut et que seuls les administrateurs peuvent l'utiliser. Étant donné que le count de service SQL Server ne dispose pas des droits d'administrateur, vous ne devriez pas l'utiliser de toute façon, et stocker des files à la racine de tout lecteur (en particulier C: est généralement une mauvaise pratique.

Enfin, même si vous avez un partage, le count que vous utilisez pour accéder au partage doit disposer d'permissions sur le partage et sur le système de files. C'est un avantage pour exécuter SQL Server en utilisant un count de domaine .

En résumé, ce que vous devez probablement faire est ceci:

  1. Si ce n'est déjà fait, lancez SQL Server en utilisant un count de domaine (voir le lien ci-dessus)
  2. Créez un dossier pour vos files, appelez-le D:\XMLFiles (ou ce que vous voulez)
  3. Partagez le dossier, vous avez maintenant un partage appelé \\172.16.11.52\XMLFiles
  4. Assurez-vous que le count de service SQL Server dispose des permissions de lecture à partir du partage
  5. Essayez à nouveau votre code:

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