Published on

January 2, 2012

Importando datos de texto delimitados por TAB en SQL Server

Cuando se trabaja con SQL Server, es común importar datos de fuentes externas a la base de datos. Uno de los desafíos que encontré fue importar datos de texto delimitados por TAB con valores enteros en SQL Server. En esta publicación del blog, compartiré el problema que enfrenté y la solución que encontré para importar los datos correctamente.

El problema

Inicialmente, estaba importando todos mis datos de texto delimitados por TAB como VARCHAR utilizando la Colación de Columna SQL_Latin1_General_CP1_CI_AS en tablas de extracción. Sin embargo, un requisito comercial me obligó a reconsiderar cómo importar los datos con el tipo de datos INT. Intenté usar el programa BCP para generar el archivo de FORMATO, pero los resultados fueron insatisfactorios. Los enteros no se importaban correctamente a las tablas de extracción en SQL Server.

Análisis del problema

Investigué este problema en línea pero no pude encontrar una solución. Fue una sola oración en la documentación de Books-OnLine (BOL) la que proporcionó la clave para comprender el problema real y encontrar una solución. En la documentación de BOL, en la página “Tipo de almacenamiento de archivos”, encontré una oración que decía: “Cuando los tipos de datos no de caracteres (por ejemplo, float, money, datetime o int) se almacenan como sus tipos de base de datos, los datos se escriben en el archivo de datos en el formato de datos binarios interno de SQL Server”.

Esta oración me indicó que los enteros que se importaban como SQLINT se estaban traduciendo a un formato de datos binarios. Para investigar más a fondo, consulté la página “Uso de archivos de formato” en la documentación de BOL y encontré un ejemplo que me ayudó a identificar el problema.

La solución

Me di cuenta de que el ejemplo en la documentación de BOL tenía una colación de columna SQL_Latin1_General_Cp437_Bin para un campo de tipo de datos entero. Esto me llevó a buscar en la biblioteca de MSDN una explicación de este tipo de colación. Descubrí que la primera parte de la colación define una cadena que identifica el alfabeto o idioma cuyas reglas de ordenación se aplican cuando se especifica la ordenación de diccionario, como Latin1_General o Polish. La segunda parte es un número de uno a cuatro dígitos que identifica la página de códigos utilizada por la colación. El sufijo identifica la sensibilidad a mayúsculas y minúsculas (CI, CS), la sensibilidad a los acentos (AI, AS) y el orden de clasificación binario que se utilizará.

Al cambiar el tipo de datos en el archivo de FORMATO a SQLCHAR 4 con una colación de columna de SQL_Latin1_General_Cp437_Bin, pude traducir correctamente los datos enteros al importarlos utilizando BCP o BULKINSERT.

Conclusión

Importar datos de texto delimitados por TAB con valores enteros en SQL Server puede ser una tarea desafiante. Sin embargo, al comprender el formato de datos binarios interno y utilizar la colación de columna adecuada en el archivo de FORMATO, puede asegurarse de que los datos se importen correctamente. Es importante analizar cuidadosamente el problema y consultar la documentación de SQL Server para obtener orientación.

Espero que esta publicación del blog le haya proporcionado información valiosa sobre la importación de datos de texto delimitados por TAB en SQL Server. Si tiene alguna pregunta o sugerencia, no dude en dejar un comentario a continuación.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.