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.
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.
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éé.
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\"'
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.
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é.
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 ...
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
dans mon cas, ce correctif fonctionnait simplement en mode administrateur.
...lesPerson" queryout '