2011-07-07 44 views
8

Tengo un CSV que estoy tratando de importar a SQL usando paquetes SSIS a través del código. Una línea podría ser algo como esto¿Hay alguna manera de evitar una comilla doble dentro de una cadena calificada por texto en una importación SSIS Csv?

321,1234,"SOME MACHINE, MACHINE ACCESSORIES 1 1/2"" - 4""" 

En este ejemplo se está utilizando comillas dobles para simbolizar pulgadas. Están intentando escapar de la comilla doble de pulgadas con una comilla doble. SSIS, sin embargo, no respeta este escapismo y falla.

¿De todos modos todavía puedo usar el símbolo de comillas dobles para pulgadas y escapar dentro del texto entre comillas?

Muchas sugerencias son para reemplazar la comilla doble con dos comillas simples. ¿Es este el único trabajo alternativo o puedo usar alguna otra técnica de escape?

He visto a personas hablar sobre el uso de la transformación Derived Column, pero en mi caso SSIS falla en el paso Flat File Source y, por lo tanto, no puedo obtener un paso de transformación de columna derivada.

Actualmente estoy ejecutando una tarea de secuencia de comandos en el flujo de control, justo antes del flujo de datos, para manipular la Csv con algunas expresiones regulares para limpiar los datos.

Necesito que la cadena sea calificada con las 2 comillas dobles externas debido a posibles comas en la columna de descripción.

¿Qué puedo hacer con las comillas dobles dentro de la cadena de texto calificado?

+0

se puede escapar de la cotización para pulgadas con una barra invertida o algo? ¿o es que fuera de su control? – Brad

+0

sólo parece que cuando SSIS ve una cita que espera otra para acompañarlo. Así que si hay tres comillas en la cadena cualificada texto, bombas wi el error "Delimitador de columna no encontrado". – topwik

Respuesta

4

Guau, esperaba poder contestar con "Solo configurar el calificador de texto", pero pensé que ya lo habías intentado, así que lo intenté antes de responder. ¡Sorpresa, SSIS no es compatible con archivos CSV estándar!

Parece que es common complaint. Hay un comentario de Microsoft sobre algunas muestras que pueden ayudar; Here is the codeplex project, mencionaron que la expresión regular de archivos planos de muestras de origen y el archivo delimitado por ejemplo lector de Fuente, en particular, puede ayudar - Supongo que el lector de archivos delimitado sería más la pena.

1

Esta respuesta no es aplicable a 2005 como referencia aquí, pero en caso de que alguien se encuentra con este mientras que la búsqueda y está utilizando el 2008, esta otra pregunta parece tener una respuesta de trabajo: SSIS 2008 and Undouble

-1

Probablemente noticia vieja, pero este problema se corrigió en SQL Server 2012. Pude importar el mismo archivo en un servidor 2012 que falló en mi servidor de 2008.

+1

No, todavía no funciona en 2017 (con SQL Server 2016 y VS2015) –

1

me he encontrado problema similar ayer. Obtuvimos el archivo csv que usa coma (,) como delimitador y comillas dobles (") como calificador de texto, pero hay un campo que contiene comillas dobles dentro de comillas dobles (comillas dobles sin escape dentro de una cadena) Después de pasar medio día buscando , se le ocurrió la solución a continuación,

var fileContent = File.ReadAllLines(fullFilePath); //load the file into a one dimensional string array. fullFilePath is the full path + the file name. var fileContentUpdated = fileContent.Select(x => new Regex(@"(?<!^)(?<!\,)""(?!\,)(?!$)").Replace(x, "'")).ToArray(); //this line here finds the double quote within the double quote and replace it with single quote File.WriteAllLines(fullFilePath, fileContentUpdated); //write the string array into the csv file.

no veo ninguna otra manera de reemplazar las comillas con otra cosa para evitar el problema.

Cuestiones relacionadas