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


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

Применимо: SQL Server База данных SQL Azure Управляемый экземпляр SQL Azure azure Synapse Analytics Analytics Platform System (PDW)

Длина поля указывает максимальное количество символов, необходимых для представления данных в символьном формате. Длина поля известна заранее, если данные хранятся в собственном формате, например значение типа 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 (собственный формат).

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

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

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

Внимание

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

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

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

Тип данных Длина по умолчанию (в символах)
char Длина, определенная для столбца
varchar Длина, определенная для столбца
nchar Удвоенная длина, определенная для столбца
nvarchar Удвоенная длина, определенная для столбца
Текст 0
ntext 0
bit 1
binary Удвоенная длина, определенная для столбца + 1
varbinary Удвоенная длина, определенная для столбца + 1
Изображение 0
datetime 24
smalldatetime 24
float 30
real 30
int 12
bigint 19
smallint 7
tinyint 5
money 30
smallmoney 30
десятичное 41*
numeric 41*
uniqueidentifier 37
timestamp 17
varchar(max) 0
varbinary(max) 0
nvarchar(max) 0
(UDT) Длина столбца определенного пользователем типа (UDT)
XML 0

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

Примечание.

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

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

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

Тип данных Длина по умолчанию (в символах)
bit 1
binary Длина, определенная для столбца
varbinary Длина, определенная для столбца
Изображение 0
datetime 8
smalldatetime 4
float 8
real 4
int 4
bigint 8
smallint 2
tinyint 1
money 8
smallmoney 4
десятичное *
numeric *
uniqueidentifier 16
timestamp 8

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

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

См. также

bcp Utility
Типы данных (Transact-SQL)
Определение признаков конца поля и строки (SQL Server)
Указание длины префикса в файлах данных с помощью bcp (SQL Server)
Указание типа хранилища файлов с помощью bcp (SQL Server)
Сохранение значений NULL или использование значений по умолчанию при массовом импорте данных (SQL Server)