2010-01-13 5 views
9

J'ai cette commande BCP:SQL Server BCP: Comment mettre des guillemets autour de tous les champs?

'bcp DBName..vieter out c:\test003.txt -c -T /t"\",\"" -S SERVER' 

La sortie CSV je reçois ne met pas les guillemets autour des noms de champs, au lieu qu'il met autour des virgules! Comment puis-je obtenir le /t"\",\"" pour mettre des citations dans tous les domaines.

Merci à tous

Répondre

10

Réglage de la terminaison de ligne en plus de la terminaison de champ devrait faire l'affaire

'bcp DBName..vieter out c:\test003.txt -c -T -t"\",\"" -r"\"\n\"" -S SERVER' 

Cela fonctionnera probablement, mais manquer des principaux "pour le premier champ de la première ligne ou peut-être le dernier des derniers, je ne suis pas sûr, juste deviner vraiment, aucun serveur ici!

ou essayez d'utiliser QUOTENAME pour envelopper les champs de texte (vous pouvez également envelopper les numéros, mais ce n'est normalement pas nécessaire.

'bcp "SELECT id, age, QUOTENAME(name,'"') FROM DBName..vieter" queryout c:\test003.txt -c -T -t"," -S SERVER' 
+0

est-il jamais un moyen d'avoir la première et la dernière ont citations -.. J'ai vraiment besoin d'un fichier CSV bien formaté – Abs

+0

Qu'est-ce que vous dit passé -.?, mais la dernière fiedl avait deux citations à la fin et la première avait pas de guillemets ai-je juste besoin de jouer avec ce qui précède pour obtenir ce que je veux est-il des documents que je peux regarder comme je l'ai pas rencontré cette substance regex - si c'est regex! – Abs

+0

vous pouvez utiliser 'QUERYOUT', puis créer une requête en utilisant' QUOTENAME (column, '"')' pour les champs de texte. –

0

La réponse pratique réelle, qui élimine la principale citation, est à:

A) générer un fichier de format avec bcp:

bcp db.schema.tabel format nul -c -x -f file.xml -t"\",\"" -r"\"\r\n" -T -k 

B) modifier ce fichier copier manuellement le champ 1 de champ 0 ci-dessus, selon le premier champ, mis en MAX_LENGTH = 1 et retirer le séparateur et une quot l'était en field1

<FIELD ID="0" xsi:type="CharTerm" TERMINATOR="\&quot;" MAX_LENGTH="1" COLLATION="SQL_Latin1_General_CP1_CI_AS"/> 

L'astuce fonctionne, comme vous ajoutez un champ (interface dans le fichier) pour détecter la première seprator, qui se traduit par une valeur toujours nulle, mais d'ajouter une ligne (interface pour la sortie de requête).

0

Voici la liste des commandes i utilisé.

BCP "DECLARE @colnames VARCHAR(max);SELECT @colnames = COALESCE(@colnames + ',', '') + column_name from databaseName.INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='tableName'; select @colnames;" queryout "C:\HeadersOnly.csv" -r"\n\"" -c -T -Uusername -Ppassword -SserverName 

bcp databaseName.schema.tableName out "C:\EmployeeDatawithoutheaders.csv" -T -t"\",\"" -r"\"\n\"" -c -Uusername -Ppassword -SserverName 

copy /b C:\HeadersOnly.csv+C:\EmployeeDatawithoutheaders.csv C:\EmployeeData.csv 

del C:\HeadersOnly.csv 

del C:\EmployeeDatawithoutheaders.csv 
1

PCA "SELECT char (34) + * + char (34) à partir de queryout atable "C: \ Temp \ out.csv" -T -N -c/t" \ » \ ""

Cela mis citations avant et après chaque champ (y compris la première et la dernière)

Questions connexes