Указание длины поля с помощью программы 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, занимающего наименьшее количество памяти, необходимо использовать префикс, задающий тип файлов и длину поля по умолчанию.
См. также