2015-08-05 1 views
0

J'ai un fichier délimité par des tabulations que j'essaie d'importer dans SQL Server 2012; la terminaison de ligne est CRLF. Voici ma déclaration BCP dans PowerShell:Comment transmettre des caractères non imprimables aux paramètres de terminaison de ligne/champ de BCP?

bcp database.dbo.table IN C:\filePath.tsv -SserverName -UuserName -Ppassword -c -t\t -r\n 

Ce qui fait état d'un

inattendue EOF a rencontré

erreur

.

Je ne peux pas pour la vie de moi comprendre pourquoi cela ne fonctionne pas. Un oeil supplémentaire serait génial.

EDIT: Après examen, je pense que le problème est avec -r \ n ... Quel est le métacaractère pour CRLF?

Répondre

1

Encode dans hex:

bcp database.dbo.table IN C:\filePath.tsv -SserverName -UuserName -Ppassword -c -t0x9 -r0xa 

Vous pouvez utiliser plusieurs caractères en codant chacun dans l'hexagone et leur assemblant. Par exemple, nous utilisons le caractère séparateur d'enregistrement, le retour chariot et le saut de ligne pour séparer chaque ligne. Nous transmettons donc 0x1e0d0a comme valeur du paramètre -r. J'utilise ASCII Table pour faire des recherches rapides pour cela.

+0

Wow! Cela fonctionne beaucoup plus vite maintenant qu'avant. Va certainement référencer l'ASCII à partir de maintenant. Je ne sais pas si c'est hors sujet, mais, comment puis-je gérer les onglets voyous (certaines colonnes ont 1,2,3 onglets entre eux)? –

+0

@JeffOrris Vous ne pouvez pas. Vous devriez choisir un terminateur de champ différent. Nous utilisons le caractère séparateur d'unité '0x1f'. Nous n'avons jamais rencontré de données contenant ce caractère. –

+0

J'ai donc décidé d'écrire mes onglets sur les séparateurs d'unités. J'ai fait mes importations 10 fois plus vite ... Im BCPing 10,000 enregistrements/sec à peu près. –