web-dev-qa-db-fra.com

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

Vous trouverez ci-dessous un exemple de déclaration du PCA .. Je ne suis pas habitué à utiliser le PCA, votre aide et votre franchise sont donc grandement appréciées.

Je l'utilise également avec un fichier de format.

Si j'exécute à partir de l'invite CMD, cela fonctionne bien, mais SQL me donne l'erreur . L'instruction BCP est sur une seule ligne et l'agent SQL Server est exécuté en tant que système local . le même système.

J'ai couru exec master..xp_fixeddrives C, 45589 E, 423686

J'ai essayé la sortie sur 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:\Storage\Export\Data\max.idx" -fmax-c.fmt -SSERVERNAME -T

Voici le fichier de format 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       "\r\n"           7     POLICYYEAR    

En raison de la création dans cet article, la dernière colonne du fichier de format est coupée mais lit SQL_Latin1_General_CP1_CI_AS pour chaque colonne autre que la date du document. 

14
user2747607

Tout d’abord, éliminez un problème xp_cmdshell en effectuant un simple 'dir c: *. *';

Consultez mon blog si vous utilisez BCP pour exporter des fichiers.

J'ai eu des problèmes sur mon système dans lesquels je ne pouvais pas trouver le chemin d'accès à BCP.EXE. 

Soit changez la variable PATH du code hard it.

L'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 Server\100\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 modifier le chemin d'accès en\110\pour SQL Server 2012 et le nom de la base de données en [AdventureWorks2012], j'ai reçu l'erreur suivante.


enter image description here

Une fois les modifications apportées, le code fonctionne correctement à partir de SSMS. Le service s'exécute sous NT AUTHORITY\Local Service. L'Agent SQL Server est désactivé. Le fichier de sortie a été créé .

enter image description here

5
CRAFTY DBA

Le chemin de sortie existe-t-il? 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
Daniel Molnar

Vérifiez que 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.

5
Rajesh

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 nom de fichier avec le répertoire é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.

Je suppose donc que le problème est dû au dépassement du nom de fichier. ainsi le fichier n'a pas été trouvé. 

4
Md. Kauser Ahmmed

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 SQL Server s'exécute 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.

Assurez-vous également que le compte peut exécuter la procédure stockée xp_cmdshell.

Écris tes progrès ...

2
CRAFTY DBA

Si quelqu'un d'autre rencontre le même problème: j'avais ...lesPerson" queryout' plutôt que ...lesPerson" queryout ' 

0

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

0
Arthur Swails

Supprimez no_output de votre commande, si vous utilisez un cours

SET @sql = 'BCP ....'

EXEC master..xp_cmdshell @sql , no_output

EXEC master..xp_cmdshell @sql
0
Stefan Michev