Impossible d'ouvrir le fichier de données de l'hôte BCP

ci-dessous est un exemple de la déclaration BCP. Je ne suis pas habitué à utiliser BCP donc votre aide et candeur est grandement apprécié

Je l'utilise avec un fichier de format.

si j'exécute à partir de CMD prompt cela fonctionne bien mais à partir de SQL j'obtiens l'erreur. L'instruction BCP est sur une seule ligne et L'Agent SQL Server tourne en tant que système Local. Le serveur SQL, et le script sont sur le même système.

j'ai couru exec maître..xp_fixeddrives C, 45589 E, 423686

j'ai essayé la sortie vers C et E avec le même résultat

EXEC xp_cmdshell 'bcp "Select FILENAME, POLICYNUMBER, INSURED_DRAWER_100, POLICY_INFORMATION, DOCUMENTTYPE, DOCUMENTDATE, POLICYYEAR FROM data.dbo.max" queryout "E:StorageExportDatamax.idx" -fmax-c.fmt -SSERVERNAME -T

voici le format de fichier rmax-C. fmt

10.0

7

1      SQLCHAR             0       255     "$#Y#$"          1     FILENAME                               
2      SQLCHAR             0       40      ""               2     POLICYNUMBER                                 
3      SQLCHAR             0       40      ""               3     INSURED_DRAWER_100                           
4      SQLCHAR             0       40      ""               4     POLICY_INFORMATION                           
5      SQLCHAR             0       40      ""               5     DOCUMENTTYPE                                 
6      SQLCHAR             0       40      ""               6     DOCUMENTDATE                                 
7      SQLCHAR             0       8       "rn"           7     POLICYYEAR    

en Raison de formatage dans ce post, la dernière colonne de ce format de fichier est coupé mais lit SQL_Latin1_General_CP1_CI_AS pour chaque colonne autre que documentdate.

14
demandé sur ErrorNotFoundException 2013-09-04 20:21:25

8 réponses

tout d'abord, exclure un problème xp_cmdshell en faisant un simple 'dir c:*.* ' ;

découvrez mon blog sur L'utilisation de BCP pour exporter des fichiers.

j'ai eu des problèmes sur mon système dans lequel je ne pouvais pas trouver le chemin vers BCP.EXE.

soit modifier la variable PATH du code dur it.

exemple ci-dessous fonctionne avec Adventure Works.

-- BCP - Export query, pipe delimited format, trusted security, character format
DECLARE @bcp_cmd4 VARCHAR(1000);
DECLARE @exe_path4 VARCHAR(200) = 
    ' cd C:\Program Files\Microsoft SQL Server0\Tools\Binn\ & ';
SET @bcp_cmd4 =  @exe_path4 + 
    ' BCP.EXE "SELECT FirstName, LastName FROM AdventureWorks2008R2.Sales.vSalesPerson" queryout ' +
    ' "C:\TEST\PEOPLE.TXT" -T -c -q -t0x7c -r\n';
PRINT @bcp_cmd4;
EXEC master..xp_cmdshell @bcp_cmd4;
GO

avant de changer le chemin vers \ 110\ pour SQL Server 2012 et le nom de la base de données vers [AdventureWorks2012], j'ai reçu l'erreur suivante.



enter image description here

après avoir fait les modifications, le code fonctionne très bien à partir de SSMS. Le service fonctionne sous L'autorité de NT\Local Service. L'Agent SQL Server est désactivé. Le fichier de sortie a été créé.

enter image description here

5
répondu CRAFTY DBA 2013-09-04 19:49:59

le chemin de sortie existent? BCP ne crée pas le dossier avant d'essayer de créer le fichier.

essayez ceci avant votre appel BCP:

EXEC xp_cmdshell 'MKDIR "E:\Storage\Export\Data\"'
13
répondu Daniel Molnar 2014-03-20 08:31:17

Veuillez vérifier, le fichier peut être ouvert dans une autre application ou programme. Si c'est le cas, bcp.exe ne peut pas écraser le contenu du fichier existant.

4
répondu Rajesh 2014-02-06 08:03:27

Dans mon cas, j'ai résolu Le problème de la manière suivante:

ma commande était :

bcp "select Top 1000 * from abc.dbo.abcd" queryout FileNameWithDirectory -c -t "|" -r "0x0a" -S 192.111.1.111 -U xx -P xxxxx

mon Filenamewavecdirectory était trop long. comme "D:\project-abc\R&D\abc-608\FilesNeeded\FilesNeeded\DataFiles\abc.csv".

je change dans un répertoire plus simple comme:"D:\abc.csv"

Problème résolu.

donc je suppose que le problème s'est produit en raison du nom de fichier dépassant. donc le fichier n'a pas été trouvé.

4
répondu Md. Kauser Ahmmed 2015-09-21 11:53:03

si cela fonctionne à partir de la ligne de commande mais pas à partir de L'Agent SQL, je pense que c'est un problème d'authentification.

L'Agent du serveur SQL tourne sous un compte. Assurez-vous que le compte a la capacité de lire le fichier de format et de générer le fichier de sortie.

Aussi, assurez-vous que le compte a la capacité d'exécuter le xp_cmdshell procédure stockée.

répondez avec vos progrès ...

2
répondu CRAFTY DBA 2013-09-04 16:55:31

Supprimer no_output de votre commande, si vous utilisez un offcourse

SET @sql = 'BCP ....'

EXEC master..xp_cmdshell @sql , no_output

EXEC master..xp_cmdshell @sql
0
répondu Stefan Michev 2014-11-20 19:11:58

dans mon cas, ce correctif fonctionnait simplement en mode administrateur.

0
répondu Arthur Swails 2017-08-18 19:42:00
...lesPerson" queryout' plutôt que ...lesPerson" queryout '

0
répondu Patrick Schomburg 2018-05-08 17:37:15