Хранение данных в символьном формате

Способ хранения данных, имеющих символьный формат, в файле экспортируемых данных, зависит от способа хранения данных в таблице Microsoft SQL Server. Важны два следующих шаблона хранения данных:

  • SQL Server данные типа char.
  • Другие типы данных, преобразуемые в тип char для хранения.

Шаблоны хранения данных типа char в SQL Server

SQL Server Сохраняемые в файле в формате char данные всегда занимают в нем полную длину столбца согласно его определению. Например, столбец, определенный как char(10), всегда занимает 10 символов в файле независимо от длины хранящихся в столбце данных. Если данные типа char короче указанной длины поля, к концу строки добавляются пробелы в качестве набивки; дополнительные сведения об этом см. в разделе SET ANSI_PADDING (Transact-SQL). Однако для типа данных varchar сохраняются лишь действительно содержащиеся в данных символы, кроме случаев использования префикса или терминатора.

Шаблоны хранения других типов данных, преобразуемых в символьные данные

Объем пространства, выделяемого в файле данных для хранения несимвольных данных, сохраняемых в символьном формате, определяется комбинацией длины поля, длины префикса и терминаторами, как описано ниже.

  • Если длина префикса равна 0, а признак конца отсутствует, поле обрабатывается, как имеющее постоянную длину, определяемую значением длины поля. Если указывается длина префикса, равная 0, и отсутствие признака конца, то программа bcp выделяет максимальный объем пространства, указанный в параметре длины поля, так как он может потребоваться для хранения данных обрабатываемого типа. Такой способ хранения данных позволяет определить конец поля и начало следующего поля.
  • Если длина префикса равна нулю, но признак конца используется, значение длины поля не учитывается. Для хранения данных поля используется пространство, равное длине данных плюс длина признака конца.
    ms190212.note(ru-ru,SQL.90).gifВажно!
    Указание префикса и признака конца поддерживается только в файлах формата, отличного от XML.
  • Если длина префикса равна 1, 2 или 4, значение длины поля не учитывается. Для хранения поля используется пространство, равное длине поля плюс длина префиксов поля и признаков конца (если они есть).

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

Примеры

Следующие примеры демонстрируют эффект применения различной длины поля, длины префиксов и признаков конца при хранении данных в формате char. Значению длины префикса, если оно указывается, соответствует P. Признаку конца, если он присутствует, соответствует T. Многоточие (...) указывает, что шаблон повторяется для каждого поля.

Примеры схем хранения данных типа char в SQL Server:

ms190212.note(ru-ru,SQL.90).gifПримечание.
Данные типа char всегда сохраняются в полной длине (то есть дополняются пробелами).

Таблица имеет схему t1 (c1 char(8)). В следующих примерах предполагается длина символьного значения, равная пяти (для строки Hello), которая хранится в поле длиной 8 символов. В каждом из примеров полей данных к 5-символьному значению Hello всегда должны быть добавлены три пробела. Присоединяемые пробелы изображаются тремя точками (∙∙∙).

 

Длина префикса = 0

Длина префикса = 1, 2 или 4

Отсутствует признак конца

Hello∙∙∙Hello∙∙∙...

PHello∙∙∙PHello∙∙∙...

Признак конца

Hello∙∙∙THello∙∙∙T...

PHello∙∙∙TPHello∙∙∙T...

ms190212.note(ru-ru,SQL.90).gifПримечание.

Этот пример применяется только к файлу формата, отличного от XML.

Примеры шаблонов хранения несимвольных типов данных при преобразовании в символы для хранения

Таблица имеет схему t1 (c1 int), а каждая строка имеет значение 999 целочисленного типа.

ms190212.note(ru-ru,SQL.90).gifПримечание.
Для данных, преобразуемых при хранении в char с использованием префикса длиной 1, 2 или 4 или при использовании признака конца, добавление пробелов после значения данных не требуется.

 

Длина префикса = 0

Длина префикса = 1, 2 или 4

Отсутствует признак конца

999∙∙999∙∙...

P999P999...

Признак конца

999T999T...

P999TP999T...

ms190212.note(ru-ru,SQL.90).gifПримечание.

Этот пример применяется только к файлу формата, отличного от XML.

ms190212.note(ru-ru,SQL.90).gifПримечание.
Если ни длина префикса, ни признак конца не используются, тогда целочисленное значение сохраняется в 12 байт, при этом последние 9 байт содержат пробелы.

См. также

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

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

Другие ресурсы

Программа bcp
Типы данных (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005

Журнал изменений

Версия Журнал

12 декабря 2006 г.

Новое содержимое
  • Добавлено примечание о том, что задание префикса и признака завершения поддерживается только в файлах форматирования не в формате XML.