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


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

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

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

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

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

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

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

После интерактивного заполнения всех полей в команде bcp отображается запрос на сохранение введенных ответов для каждого поля в файле форматирования в формате, отличном от XML. Дополнительные сведения о файлах форматирования в формате, отличном от XML, см. в разделе Файлы формата, отличные от XML (SQL Server).

Будут ли командные строки bcp выводить запросы для указания значений длины полей, зависит от нескольких факторов, как указано ниже.

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

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

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

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

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

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

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

При использовании размера, заданного по умолчанию, SQL Server считывает всю строку. В некоторых случаях использование значения длины поля по умолчанию приводит к возникновению ошибки «неожиданный конец файла». Как правило, эта ошибка возникает при работе с данными типа money или datetime, если в файле данных обнаруживается только часть ожидаемого поля; например, если значение datetime типа mm, dd или yy указано без компонента времени, и поэтому короче ожидаемой длины на 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)

XML

0

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

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

См. также

Справочник

Программа bcp

Типы данных (Transact-SQL)

Основные понятия

Определение признаков конца поля и строки (SQL Server)

Определение длины префикса в файлах данных с помощью программы bcp (SQL Server)

Указание типа файлового хранилища с помощью программы bcp (SQL Server)

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

Сохранение значений NULL или использование значений по умолчанию при массовом импорте данных (SQL Server)