2 votes

SQL BULK INSERT utilisant le chemin UNC

J'ai un ordinateur de développement "A". Et j'ai un serveur SQL "B".

My SQL Server est un serveur Microsoft SQL 2019.

Sur le serveur B, j'ai une base de données avec une procédure stockée, qui charge en masse des données à partir d'un fichier texte (en utilisant la commande BULK INSERT).

J'ai maintenant créé un projet SSIS sur le serveur A, qui appelle la procédure stockée sur le serveur B à l'aide de la tâche "Execute SQL Task". La connexion de la tâche pointe vers la base de données du serveur B. J'ai essayé d'utiliser la connexion OLE DB et ADO.

Lorsque je place mon fichier texte sur le serveur B et que je fais référence au fichier de la manière suivante D:\myFolder\myFile.txt tout fonctionne bien.

Lorsque je place mon fichier texte sur le serveur A et que je référence le fichier de la manière suivante \\\A\myShare\myFile.txt il échoue. L'erreur que je reçois est la suivante :

[Exécuter une tâche SQL] Erreur : L'exécution de la requête "exec BulkInsert ' \\A\myShare\myFile.txt '" a échoué avec l'erreur suivante : "Impossible bulk load because the file " \\A\myShare\myFile.txt "ne pouvait pas être ouvert. Code d'erreur du système d'exploitation 5 (accès refusé.)". Raisons possibles de l'échec de raisons possibles de l'échec : Problèmes avec la requête, la propriété "ResultSet" n'est pas définie. correctement, paramètres mal définis ou connexion mal établie. correctement.

J'ai essayé de me connecter au serveur B et, via un explorateur de fichiers, d'ouvrir le fichier en utilisant le chemin ci-dessus. Cela fonctionne bien. Et oui, je suis connecté en tant que même utilisateur sur les deux serveurs A et B.

J'ai également essayé de donner à "Tout le monde" un accès en lecture/écriture au partage, mais toujours le même mauvais résultat.

Ce qui m'intéresse, c'est de savoir comment résoudre ce problème, en utilisant l'appel de la procédure stockée - je ne souhaite pas reconstruire sa fonctionnalité dans SSIS (la procédure stockée est gérée par une société externe et elle peut la modifier à sa guise, mais nous sommes d'accord sur la façon dont je peux l'appeler).

D'après ce que j'ai lu chez Microsoft, il ne devrait pas y avoir de problème si vous appelez BULK INSERT en utilisant un chemin UNC.

1voto

Hadi Points 16319

D'après ce que j'ai lu chez Microsoft, il ne devrait pas y avoir de problème si vous appelez BULK INSERT en utilisant un chemin UNC.

C'est vrai, les chemins UNC sont pris en charge par l'interface utilisateur. BULK INSERT commandement.

Sur la base de la Documentation Microsoft L'INSERT BULK a trois exigences principales :

  • Le serveur doit avoir la permission d'accéder à la fois au fichier et à la base de données de destination.
  • Le serveur exécute la tâche d'insertion en masse. Par conséquent, tout fichier de format que la tâche utilise doit être situé sur le serveur.
  • Le fichier source que la tâche Bulk Insert charge peut se trouver sur le même serveur que la base de données SQL Server dans laquelle les données sont insérées, ou sur un serveur distant. Si le fichier se trouve sur un serveur distant, vous devez spécifier le nom du fichier en utilisant le nom UNC (Universal Naming Convention) dans le chemin d'accès.

La première exigence signifie que vous devez accorder au compte de service SQL Server l'accès au chemin UNC, et non au compte Windows avec lequel vous vous connectez.

Vous devez vous référer aux articles suivants pour trouver le nom du compte de service SQL Server :

Par ailleurs, vous pouvez en savoir plus sur les comptes et les autorisations du service SQL Server dans la documentation suivante :


Alternative - Cartographie du lecteur réseau

Comme alternative, vous pouvez essayer de mapper le lecteur réseau dans SQL Server. Vous pouvez consulter les articles suivants pour plus d'informations :

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X