Поделиться через


Указание длины поля с помощью программы bcp

Длина поля определяет максимальное количество символов, необходимых для представления данных в символьном формате. Длина поля известна заранее, если данные хранятся в собственном формате, например значение типа int занимает 4 байта. Если команда bcp указана с префиксом длины, равным 0, она запрашивает значение длины поля, значение длины поля по умолчанию и влияние длины поля на хранение в файлах, содержащих данные типа char.

Запрос командой bcp значения длины поля

Если интерактивная команда bcp содержит параметр in или out без ключа формата файла (-f) или формата данных (-n, -c, -w, или -N), то запрашивается длина каждого поля данных:

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

Пример с описанием данного запроса см. в разделе Указание форматов данных для совместимости с помощью программы bcp.

ПримечаниеПримечание

После определения в интерактивном режиме всех полей в команде bcp выводится предложение сохранить настройки каждого поля в файле, имеющем формат, отличный от XML. Дополнительные сведения о файлах в форматах, отличных от XML, см. в разделе Основные сведения о файлах форматирования в формате, отличном от XML.

Выдача командой bcp запроса значения длины поля определяется следующими факторами:

  • При копировании данных переменной длины с указанием префикса длины, равного 0, команда bcp запрашивает значение длины поля.

  • При преобразовании не символьных данных в символьные, команда bcp автоматически предлагает значение длины поля, достаточное для хранения данных.

  • Если хранимые данные имеют не символьный тип, команда bcp не запрашивает значение длины поля. В Microsoft SQL Server данные хранятся в собственном представлении (собственном формате).

Использование значения длины поля по умолчанию

В целом корпорация Майкрософт рекомендует принимать значения длины поля по умолчанию, предлагаемые программой bcp. Использование значений длины поля по умолчанию при создании файла символьных данных помогает избежать усечения данных и возникновения ошибок переполнения.

При указании неправильного значения длины поля могут возникнуть проблемы. Например, если при копировании числовых данных была задана слишком малая длина поля, программа bcp выдает сообщение о переполнении, а копирование данных не выполняется. Если при экспорте данных типа datetime для символьной строки была задана длина поля меньше, чем 26 байт, программа bcp производит усечение данных без предупреждения.

Важное примечаниеВажно!

При использовании размера, заданного по умолчанию, SQL Server считывает всю строку. В некоторых случаях использование значения длины поля по умолчанию приводит к возникновению ошибки «неожиданный конец файла». Обычно эта ошибка возникает при работе с данными типа money и datetime в тех случаях, когда ожидаемая длина поля превышает реальную длину строки данных в файле; например в случае, когда значение типа datetime в формате мм/дд/гг задано без указания времени и, соответственно, имеет длину меньше 24 символов, отведенных под значение datetime в формате char. Чтобы избежать указанной ошибки типов, необходимо использовать признаки конца поля или файлы данных фиксированной длины, либо изменить значение длины поля по умолчанию.

Значения длины поля по умолчанию для файлов символьных данных

В представленной ниже таблице приведены значения длины поля для данных, хранимых в символьной форме. Данные, которые могут и не могут принимать значение NULL, имеют одинаковую длину поля.

Тип данных

Длина по умолчанию (в символах)

char

Длина, определенная для столбца

varchar

Длина, определенная для столбца

nchar

Удвоенная длина, определенная для столбца

nvarchar

Удвоенная длина, определенная для столбца

Text

0

ntext

0

bit

1

binary

Удвоенная длина, определенная для столбца + 1

varbinary

Удвоенная длина, определенная для столбца + 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

Длина столбца определенного пользователем типа (UDT)

XML

0

*Дополнительные сведения о типах данных decimal и numeric см. в разделе десятичные и числовые (Transact-SQL).

ПримечаниеПримечание

Столбец данных типа tinyint может содержать целые значения от 0 до 255; максимальное количество символов, необходимых для представления чисел данного диапазона, равно 3 (для записи чисел от 100 до 255).

Значения длины поля по умолчанию для файлов собственных данных

В представленной ниже таблице приведены значения длины поля для данных, хранимых в собственном формате. Данные, которые могут и не могут принимать значение NULL, имеют одинаковую длину поля, а символьные данные всегда хранятся в собственном формате.

Тип данных

Длина по умолчанию (в символах)

bit

1

binary

Длина, определенная для столбца

varbinary

Длина, определенная для столбца

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. Дополнительные сведения о типах данных decimal и numeric см. в разделе десятичные и числовые (Transact-SQL).

Во всех перечисленных случаях для создания файла данных для SQL Server, занимающего наименьшее количество памяти, необходимо использовать префикс, задающий тип файлов и длину поля по умолчанию.