Especificar la longitud de campo mediante bcp

La longitud de campo indica el número máximo de caracteres necesarios para representar los datos en formato de caracteres. La longitud de campo se conoce si los datos están almacenados en formato nativo; por ejemplo, el tipo de datos int ocupa 4 bytes. Si ha indicado 0 para la longitud de prefijo, el comando bcp le solicitará la longitud de campo, las longitudes de campo predeterminadas, así como el impacto de la longitud de campo sobre el almacenamiento de datos en los archivos de datos que contienen datos char.

Solicitud bcp para la longitud de campo

Si un comando bcp interactivo contiene la opción in o out sin el modificador de archivo de formato (-f) o sin un modificador de formato de datos (-n, -c, -w o -N), el comando solicita la longitud de campo de cada campo de datos, de la siguiente manera:

Enter length of field <field_name> [<default>]:

Para ver un ejemplo que muestre esta solicitud en contexto, vea Especificar formatos de datos por razones de compatibilidad mediante bcp.

Nota

Después de especificar interactivamente todos los campos de un comando bcp, el comando le solicita que guarde las respuestas para cada campo en un archivo de formato no XML. Para obtener más información acerca de los archivos de formato no XML, vea Descripción de los archivos de formato no XML.

El comando bcp solicita la longitud de campo en las siguientes circunstancias:

  • Si se copian tipos de datos que no son de longitud fija y se especifica una longitud de prefijo 0, bcp solicita la longitud de campo.

  • Si se convierten datos que no son de caracteres al formato de datos de caracteres, bcp recomienda una longitud de campo predeterminada lo suficientemente grande como para almacenar los datos.

  • Si se almacenan tipos de archivos que no son de caracteres, el comando bcp no solicita una longitud de campo. Los datos se almacenan en la representación de datos nativa de Microsoft SQL Server (formato nativo).

Usar longitudes de campo predeterminadas

Por lo general, Microsoft recomienda aceptar los valores predeterminados que bcp sugiere para la longitud de campo. Cuando se crea un archivo de datos en modo de carácter, si especifica la longitud de campo predeterminada, los datos no se truncan ni se producirán errores de desbordamiento numérico.

Si especifica una longitud de campo incorrecta, pueden producirse problemas. Por ejemplo, si copia datos numéricos y especifica una longitud de campo demasiado corta para los datos, la utilidad bcp imprime un mensaje de desbordamiento y no copia los datos. Asimismo, si exporta datos datetime y especifica una longitud de campo inferior a 26 bytes para la cadena de caracteres, la utilidad bcp trunca los datos sin mostrar un mensaje de error.

Nota importanteImportante

Cuando se utiliza la opción de tamaño predeterminado, SQL Server espera leer una cadena entera. En algunos casos, el uso de la longitud de campo predeterminada puede provocar un error del tipo "fin de archivo inesperado". Normalmente, este error se produce con tipos de datos money y datetime cuando sólo parte del campo esperado tiene lugar en el archivo de datos; por ejemplo, cuando un valor datetime de mm/dd/aa se especifica sin el componente de hora y, por tanto, su longitud es inferior a los 24 caracteres esperados de un valor datetime en formato char. Para evitar este tipo de error, puede utilizar terminadores de campo o campos de datos de longitud fija o cambiar la longitud de campo predeterminada especificando otro valor.

Longitudes de campo predeterminadas para el almacenamiento de archivos de caracteres

En la siguiente tabla se enumeran las longitudes de campo predeterminadas de los datos que se almacenan como tipo de almacenamiento de archivo de caracteres. Los datos que aceptan valores NULL tienen la misma longitud que los datos que no aceptan valores NULL.

Tipo de datos

Longitud predeterminada (caracteres)

char

Longitud definida para la columna

varchar

Longitud definida para la columna

nchar

Dos veces la longitud definida para la columna

nvarchar

Dos veces la longitud definida para la columna

Text

0

ntext

0

bit

1

binary

Dos veces la longitud definida para la columna + 1

varbinary

Dos veces la longitud definida para la columna + 1

image

0

datetime

24

smalldatetime

24

float

30

real

30

int

12

bigint

19

smallint

7

tinyint

5

money

30

smallmoney

30

decimal

41*

numeric

41*

uniqueidentifier

37

timestamp

17

varchar(max)

0

varbinary(max)

0

nvarchar(max)

0

UDT

Longitud de la columna del término definido por el usuario (UDT)

XML

0

*Para obtener más información acerca de los tipos de datos decimal y numeric, vea decimal y numeric (Transact-SQL).

Nota

Una columna de tipo tinyint puede contener valores entre 0 y 255; el número máximo de caracteres necesarios para representar cualquier número de este intervalo es tres (que representa valores entre 100 y 255).

Longitudes de campo predeterminadas para el almacenamiento de archivos nativos

En la siguiente tabla se enumeran las longitudes de campo predeterminadas de los datos que se almacenan como tipo de almacenamiento de archivos nativos. Los datos que aceptan valores NULL tienen la misma longitud que los datos que no aceptan valores NULL, y los datos de caracteres siempre se almacenan en formato de caracteres.

Tipo de datos

Longitud predeterminada (caracteres)

bit

1

binary

Longitud definida para la columna

varbinary

Longitud definida para la columna

image

0

datetime

8

smalldatetime

4

float

8

real

4

int

4

bigint

8

smallint

2

tinyint

1

money

8

smallmoney

4

decimal1

*

numeric1

*

uniqueidentifier

16

timestamp

8

1 Para obtener más información acerca de los tipos de datos decimal y numeric, vea decimal y numeric (Transact-SQL).

En todos los casos anteriores, si desea crear un archivo de datos para volverlo a cargar posteriormente en SQL Server y mantener el espacio de almacenamiento mínimo, utilice un prefijo de longitud con el tipo de almacenamiento en archivo y la longitud de campo predeterminados.