Almacenamiento de datos en formato de caracteres

El modo en que los datos con formato de caracteres se almacenan en un archivo de datos exportado depende de cómo estuvieran almacenados los datos en la tabla de Microsoft SQL Server. Hay dos patrones de almacenamiento importantes:

  • SQL Server Datos char

  • Otros tipos de datos convertidos en almacenamiento char

Patrones de almacenamiento de los datos char de SQL Server

SQL Server Los datos char se almacenan siempre en el archivo de datos con la longitud total de la columna definida. Por ejemplo, una columna definida como char(10) ocupa siempre 10 caracteres en el archivo de datos, con independencia de la longitud de los datos almacenados en la columna. Si la longitud de los datos char es menor que la del campo, se anexan espacios a los datos como relleno; para obtener más información, vea SET ANSI_PADDING (Transact-SQL). Sin embargo, para el tipo de datos varchar, sólo se almacena el número real de caracteres, salvo que se elija un prefijo o un terminador.

Patrones de almacenamiento para otros tipos de datos convertidos en datos char

La cantidad de espacio de almacenamiento que se asigna en el archivo para los datos que no son caracteres almacenados en formato de caracteres se determina mediante la combinación de la longitud del campo, la longitud del prefijo y los terminadores, de la manera siguiente:

  • Con una longitud de prefijo 0 y ningún terminador, el campo se trata como si fuera de longitud fija, según se especifique en el valor de longitud de campo. Si se especifica una longitud de prefijo 0 y ningún terminador, la utilidad bcp asigna la cantidad máxima de espacio que se muestra en la pregunta acerca de la longitud de campo, ya que éste es el espacio máximo que se puede necesitar para el tipo de datos en cuestión. Esta práctica hace posible determinar dónde finaliza un campo y dónde comienza el siguiente.

  • Si se especifica una longitud de prefijo 0 y un terminador, se omite el valor de longitud de campo. El espacio de almacenamiento que se utiliza en el campo es la longitud de los datos más los terminadores.

    Nota importanteImportante

    Sólo se admite la especificación de un prefijo y un terminador en archivos con formato no XML.

  • Si se especifica una longitud de prefijo de 1, 2 o 4, se omite el valor de longitud de campo. El espacio que se utiliza en el campo es su longitud, la longitud de los prefijos del campo más los terminadores.

En todos los casos de la lista anterior, puede crear un archivo de datos para cargarlo de nuevo posteriormente en SQL Server que mantenga el espacio de almacenamiento al mínimo. Para minimizar el espacio de almacenamiento, utilice un carácter de prefijo de longitud junto con el tipo de almacenamiento de archivo predeterminado y la longitud de campo predeterminada.

Ejemplos

En los siguientes ejemplos se describe la interacción entre la longitud de campo, la longitud de prefijo y los terminadores cuando los datos se almacenan en formato char. El valor de longitud de prefijo, si está presente, se representa mediante P. El terminador, si está presente, se representa mediante T. Los puntos suspensivos (...) indican que el patrón se repite en cada campo.

Ejemplos de patrones de almacenamiento para los datos char de SQL Server:

Nota

Los datos char siempre se almacenan con la longitud completa (es decir, con uno o varios espacios ' ' como relleno).

El esquema de la tabla es t1 (c1 char(8)). En los ejemplos se da por supuesto un valor de 5 caracteres (representado como Hello), que está almacenado en un campo cuya longitud es de 8 caracteres. En cada uno de los campos de datos de ejemplo, siempre se deben anexar tres espacios al valor Hello de 5 caracteres. Los espacios anexados se representan mediante tres puntos (∙∙∙).

 

Longitud de prefijo = 0

Longitud de prefijo = 1, 2 ó 4

Sin terminador:

Hello∙∙∙Hello∙∙∙...

PHello∙∙∙PHello∙∙∙...

Con terminador:

Hello∙∙∙THello∙∙∙T...

PHello∙∙∙TPHello∙∙∙T...

NotaNota
Este ejemplo sólo se aplica archivos con formato no XML.

Ejemplos de patrones de almacenamiento para los tipos de datos que no son caracteres cuando se convierten en datos de almacenamiento char

El esquema de la tabla es t1 (c1 int) y cada fila tiene un valor entero de 999.

Nota

Para los datos que se convierten en datos de almacenamiento char en presencia de una longitud de prefijo de 1, 2 ó 4, o un terminador de campo, no es necesario anexar espacios al valor de los datos.

 

Longitud de prefijo = 0

Longitud de prefijo = 1, 2 ó 4

Sin terminador:

999∙∙999∙∙...

P999P999...

Con terminador:

999T999T...

P999TP999T...

NotaNota
Este ejemplo sólo se aplica archivos con formato no XML.

Nota

Si no se especifica una longitud de prefijo o un terminador, el valor entero se almacena con 12 bytes, de los cuales los 9 últimos contienen espacios.