read from data create sql-server sql-server-2005 csv import

sql-server - from - sql server import text



Cita de importaciĆ³n CSV de SQL 2005 delimitada con comillas internas y comas (4)

Solo buscaría / reemplazaría por ", y lo reemplazaría con,

¿Tiene acceso al archivo original?

Tengo un archivo CSV con delimitadores de texto de comillas. La mayoría de las 90000 filas están bien, pero tengo algunas filas que tienen un campo de texto que contiene tanto una comilla como una comilla. Por ejemplo, el valor de los campos sería:

AB ", AB

Cuando se delimita esto se convierte

"AB" ", AB"

Cuando SQL 2005 intenta importar esto, recibo errores como ...

Messages Error 0xc0202055: Data Flow Task: The column delimiter for column "Column 4" was not found. (SQL Server Import and Export Wizard)

Esto solo parece suceder cuando una cita y una coma están juntas en un valor de texto. Valores como

AB "AB que se convierte en" AB "" AB "o AB, AB que se convierte en" AB, AB "

trabaja bien.

Aquí hay algunas filas de ejemplo ...

"1464885","LEVER WM","","B","MP17" "1465075",":PLT-BC !!NOTE!!","","B","" "1465076","BRKT-STR MTR !NOTE!","","B","" "1465172",":BRKT-SW MTG !NOTE!","","B","MP16" "1465388","BUSS BAR !NOTE!","","B","MP10" "1465391","PLT-BLKHD ""NOTE""","","B","MP20" "1465564","SPROCKET:13TEETH,74MM OD,66MM","ID W/.25"" SETSCR","B","MP6" "S01266330002","CABLE:224"",E122/261,8 CO","","B","MP11"

La última fila es un ejemplo del problema: "", causa el error.


¿Qué tal solo?

  1. Buscar / reemplazar todo "", con ""; (arregla todos los campos rotos)
  2. Buscar / reemplazar todo; ''''; con, "", (para "eliminar" campos debidamente vacíos).
  3. Buscar / reemplazar todo ''''; ''''; con "", "", (para "desactivar" campos debidamente vacíos que siguen una encapsulación correcta de delimitadores incrustados).

Eso convierte tu original en:

"1464885","LEVER WM","","B","MP17" "1465075",":PLT-BC !!NOTE!!","","B","" "1465076","BRKT-STR MTR !NOTE!","","B","" "1465172",":BRKT-SW MTG !NOTE!","","B","MP16" "1465388","BUSS BAR !NOTE!","","B","MP10" "1465391","PLT-BLKHD ""NOTE""","","B","MP20" "1465564","SPROCKET:13TEETH,74MM OD,66MM","ID W/.25"" SETSCR","B","MP6" "S01266330002","CABLE:224'''';E122/261,8 CO","","B","MP11"

Lo cual parece funcionar bien con el guantelete en SSIS. Es posible que tenga que realizar el paso 3 recursivamente para dar cuenta de 3 campos vacíos en una fila (''''; ''''; '''' ;, etc.), pero la conclusión es que cuando tiene calificadores de texto incrustados, debe o bien escapar de ellos o reemplazarlos. Deje que esto sea una lección en sus procesos de creación de CSV en el futuro.


He tenido problemas importantes con SSIS. Las cosas que Access, Excel e incluso DTS parecían funcionar muy bien, SSIS se ahoga. Los datos variables de longitud de registro son otro problema, pero sí, estos calificadores incrustados son un problema importante. ¡Especialmente si no tienes acceso a los archivos de importación porque están en el servidor de otra persona a los que pagas para obtener acceso e incluso pueden tener un tamaño de 4 a 5 GB! No puedo simplemente "reemplazar todo" en cada importación.

Es posible que desee comprobar esto en Descargas de Microsoft llamado " UnDouble " y aquí hay otra solución que puede probar.

Parece que con SSIS en SQL Server 2008, el error sigue ahí. No sé por qué no han abordado esto en el analizador, pero es como si hubiésemos retrocedido en el tiempo con SSIS en la funcionalidad de importación básica.

ACTUALIZACIÓN 18/11/2010: Este error todavía existe en SSIS. Asombroso.


Microsoft dice que las dobles comillas dobles dentro de los campos delimitados por comillas dobles simplemente no funcionan. Se planea una solución para finales de 2011 ...

Mientras tanto, tendremos que usar soluciones alternativas como se describe en las otras respuestas.