sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo solucionar el problema del calificador de texto incrustado al exportar datos a un archivo plano CSV?

No ofrecería esta respuesta, excepto que trabajó muy duro para documentarla y se votó a favor sin respuesta después de un mes. Entonces, aquí va. Sus únicas opciones parecen ser cambiar los datos o cambiar la herramienta.

Cuando la herramienta está rota y al vendedor no le importa, es un error seguir intentándolo. Es hora de cambiar. Invierte mucho esfuerzo en investigar exactamente cómo se rompe y demostrar que viola no solo el RFC sino también la propia versión anterior de la herramienta. ¿Cuánta evidencia más necesitas?

CSV también es un ancla de barco. Si tiene la opción, es mejor que use un formato de archivo delimitado normal. Para muchas aplicaciones, delimitado por tabuladores es bueno. En mi opinión, el mejor delimitador es '\' porque ese carácter no tiene cabida en el texto en inglés. (Por otro lado, no funcionará para datos que contengan rutas de acceso de Windows).

CSV tiene dos problemas como formato de intercambio. Primero, no es tan estándar; diferentes aplicaciones reconocen diferentes versiones, independientemente de lo que diga el RFC. Segundo (y relacionado) es que no constituye un lenguaje regular en términos de CS, por lo que no se puede analizar como una expresión regular. Comparar con ^([^\t]*\t)*[\t]*$ para una línea delimitada por tabuladores. La implicación práctica de la complejidad de la definición de CSV es (ver arriba) la relativa escasez de herramientas para manejarlos y su tendencia a ser incompatibles, particularmente durante la madrugada.

Si arranca CSV y DTS, tiene buenas opciones, una de las cuales es bcp.exe . Es muy rápido y seguro porque Microsoft no ha tenido la tentación de actualizarlo durante años. No sé mucho sobre DTS, pero en caso de que tenga que usarlo para la automatización, IIRC hay una forma de invocar utilidades externas. Sin embargo, tenga cuidado, que bcp.exe no devuelve el estado de error al shell de forma fiable.

Si está decidido a utilizar DTS y seguir con CSV, la mejor opción que le queda es escribir una vista que prepare los datos de forma adecuada para ello. Si retrocediera en esa esquina, crearía un esquema llamado, por ejemplo, "DTS2012CSV", para poder escribir select * from DTS2012CSV.tablename , dando a cualquiera que le importe la oportunidad de entenderlo (porque lo documentará, ¿no es así, en los comentarios en el texto de la vista?). Si es necesario, otros pueden copiar su técnica para otros extractos rotos.

HH.