2009-12-29 14 views
9

Necesito exportar algunos datos usando la utilidad BCP de SQL Server 2000. Algunas veces, mis datos contienen caracteres, como \ t y \ n, que necesito usar como terminadores de columna y fila. ¿Cómo hago para que BCP escape de los caracteres que utiliza como terminadores a medida que genera los datos, de modo que realmente puedo importar los datos en otro programa?Obteniendo bcp.exe para escapar de los terminadores

Por ejemplo, una de mis columnas son datos de texto e incluye pestañas y nuevas líneas. BCP simplemente los exporta tal como están, y el programa con el que intento importarlos se confunde porque los datos terminan en el medio de una línea y/o una línea contiene columnas adicionales sin motivo aparente.

Esto parece una muy, muy, muy función básica para incluir en un exportador de datos, pero ninguno de the command-line options parece mencionarlo. (Por qué no sería simplemente el predeterminado está más allá de mí.) ¿Me estoy perdiendo algo?

Respuesta

-6

No puede haber datos que contengan pestañas y nuevas líneas con pestañas y separadores de nueva línea. No tiene sentido. Escapar no ayudaría, porque una pestaña es una pestaña. No estamos hablando de manejo de cadena C# aquí.

Lo que me gustaría hacer es usar different terminators como | y ||/n, o utilizar un format file

+1

Tiene sentido, por ejemplo, al usar COPY FROM en PostgreSQL, convertirá la secuencia '\ n' en una nueva línea real en una columna de texto. Y lamentablemente no puedo especificar un delimitador de fila en PostgreSQL. – Kev

+0

Además, aunque los diferentes terminadores son una solución, se está tardando * realmente * mucho tiempo en realizar los reemplazos posteriores a la consulta. Sería mucho mejor si BCP pudiera escapar de las columnas de texto correctamente. – Kev

+0

Ni osql ni sqlcmd admiten esto tampoco. ¿Qué pasaría si tuviera un campo que termina en el carácter de escape, por ejemplo? Y si lees la información de PostgreSQL, menciona el escapado dudoso ... SQL Server es completamente predecible, ¿no? – gbn

-1

tengo el mismo problema y buscado desde hace mucho tiempo para encontrar una solución. Encontré este de un maestro BCP y parece razonable. Quizás también quieras probarlo.

Posible solución: http://groups.google.co.uk/group/microsoft.public.sqlserver.tools/tree/browse_frm/thread/f1ee12cba3079189/ef9094123901fe26?rnum=1&q=lindawie+format+file&_done=%2Fgroup%2Fmicrosoft.public.sqlserver.tools%2Fbrowse_frm%2Fthread%2Ff1ee12cba3079189%2Fef9094123901fe26%3Ftvc%3D1%26q%3Dlindawie%2Bformat%2Bfile%26#doc_fa5708ca51d967a6

detalles de los archivos de formato & diseño: http://msdn.microsoft.com/en-us/library/aa173859%28SQL.80%29.aspx

Generalmente puedo sugerir estos enlaces para obtener usted sabe acerca de los problemas y soluciones BCP: http://groups.google.co.uk/groups?q=lindawie+format+file

Saludos cordiales

+0

enlaces rotos y detalles de la solución no descritos en la respuesta – wrschneider

5

Totalmente de acuerdo con usted: escapar debe ser una opción. "No puedes tener datos con pestañas o nuevas líneas" es la cosa más tonta que he escuchado.

Aquí es una solución posible:

  1. utilice la opción -r para establecer un terminador de línea diferente. Algo
    es poco probable que esté presente en sus datos (#! # $ #% #). Creo que puede usar múltiples
    caracteres, por lo que es más fácil.
  2. Abra su archivo de datos en sed, un editor de texto capaz, o escriba un script - y reemplace cualquier caracter \ ny \ t con sus equivalentes escapados (\\ n y \\ t). Finalmente reemplace el terminador de línea con \ n y debería estar bien.
  3. creo que lo mismo debería aplicarse a usar -t para terminadores de campo

Tome un vistazo a this article for more information.

1

Se puede utilizar un separador compuesto de múltiples caracteres si se los pone entre comillas dobles:

bcp MY_TABLE out C:\MY_FILE.txt -S SERVER_IP -d DB_NAME -U MY_USER -P MY_PASSWORD -w -t "&#)^@" -r ">~+!"

encontrado la solución here.

Cuestiones relacionadas