bcp_setcolfmt

Функция bcp_setcolfmt заменяет bcp_colfmt. При указании сортировки столбцов необходимо использовать функцию bcp_setcolfmt . bcp_setbulkmode можно использовать для указания нескольких форматов столбцов.

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

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

Синтаксис

  
RETCODE bcp_setcolfmt (  
HDBC   
hdbc  
,  
INT   
field  
,  
INT   
property  
,  
void*   
pValue  
,  
INT   
cbValue  
);  
  

Аргументы

hdbc
Дескриптор соединения ODBC с поддержкой массового копирования.

поле
Номер порядкового столбца, для которого задано свойство.

свойство
Является одной из констант свойств. Константы свойств определены в этой таблице.

Недвижимость Ценность Описание
BCP_FMT_TYPE БАЙТ Тип данных этого столбца в пользовательском файле. Если это отличается от типа данных соответствующего столбца в таблице базы данных, массовое копирование преобразует данные, если это возможно.

Параметр BCP_FMT_TYPE перечисляется маркерами типа данных SQL Server в sqlncli.h, а не перечислителями типов данных ODBC C. Например, можно указать символьную строку, тип ODBC SQL_C_CHAR, используя тип SQLCHARACTER, относящийся к SQL Server.

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

Для массового копирования из SQL Server в файл, если BCP_FMT_TYPE является SQLDECIMAL или SQLNUMERIC:

— Если исходный столбец не является десятичным или числовым, используется точность и масштабирование по умолчанию.
— Если исходный столбец является десятичным или числовым, используется точность и масштаб исходного столбца.
BCP_FMT_INDICATOR_LEN ИНТ Длина индикатора (префикс) в байтах.

Это длина (в байтах) индикатора длины или null в данных столбца. Допустимые значения длины индикатора : 0 (при использовании без индикатора), 1, 2 или 4.

Чтобы указать использование индикатора массового копирования по умолчанию, задайте для этого параметра значение SQL_VARLEN_DATA.

Индикаторы отображаются в памяти непосредственно перед любыми данными и непосредственно перед данными, к которым они применяются.

Если используется несколько средств указания длины столбца файла данных (например, индикатора и максимальной длины столбца, или индикатора и последовательности конца), массовое копирование выбирает тот, который приводит к наименьшей сумме копируемых данных.

Файлы данных, созданные при массовом копировании, если вмешательство пользователя не изменяет формат данных, содержащих индикаторы, если данные столбца могут отличаться в длине, или столбец может принимать ЗНАЧЕНИЕ NULL в качестве значения.
BCP_FMT_DATA_LEN DBINT Длина в байтах данных (длина столбца)

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

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

Если BCP_FMT_DATA_LEN SQL_VARLEN_DATA, система должна определить длину данных в каждом столбце. Для некоторых столбцов это может означать, что индикатор длины или null создается перед данными копии из SQL Server или что индикатор ожидается в данных, скопированных в SQL Server.

Для типов символов SQL Server и двоичных данных BCP_FMT_DATA_LEN можно SQL_VARLEN_DATA, SQL_NULL_DATA, 0 или некоторое положительное значение. Если BCP_FMT_DATA_LEN SQL_VARLEN_DATA, система использует либо индикатор длины, либо последовательность конца для определения длины данных. Если указан индикатор длины и последовательность конца, массовая копия использует тот, который приводит к минимальному объему копируемых данных. Если BCP_FMT_DATA_LEN SQL_VARLEN_DATA, тип данных является символом SQL Server или двоичным типом, и ни индикатор длины, ни последовательность конца не указана, система возвращает сообщение об ошибке.

Если BCP_FMT_DATA_LEN равно 0 или положительному значению, система использует BCP_FMT_DATA_LEN в качестве максимальной длины данных. Однако если в дополнение к положительному BCP_FMT_DATA_LEN предоставляется индикатор длины или последовательность конца, система определяет длину данных с помощью метода, который приводит к наименьшей сумме копируемых данных.

Значение BCP_FMT_DATA_LEN представляет количество байтов данных. Если символьные данные представлены широкими символами Юникода, положительное значение параметра BCP_FMT_DATA_LEN представляет количество символов, умноженных на размер в байтах каждого символа.
BCP_FMT_TERMINATOR LPCBYTE Указатель на последовательность конца (ANSI или Юникод в соответствии с соответствующими параметрами) для этого столбца. Этот параметр используется главным образом для типов символьных данных, так как все остальные типы имеют фиксированную длину или, в случае двоичных данных, требуют индикатор длины для точной записи количества байтов.

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

Если используется несколько способов указания длины столбца пользовательского файла (например, индикатора конца и длины или конца и максимальной длины столбца), массовое копирование выбирает тот, который приводит к наименьшей сумме копируемых данных.

При необходимости API-интерфейс массового копирования выполнит преобразование символов из Юникода в многобайтовую кодировку (MBCS). Необходимо принять меры, чтобы убедиться, что строка байтов и длина строки байтов заданы правильно.
BCP_FMT_SERVER_COL ИНТ Порядковое положение столбца в базе данных
BCP_FMT_COLLATION LPCSTR Имя сортировки.

pValue
Указатель на значение, которое необходимо связать с свойством. Он позволяет задать каждое свойство формата столбца по отдельности.

cbvalue
Длина буфера свойств в байтах.

Возвраты

SUCCEED или FAIL.

Замечания

Эта функция заменяет функцию bcp_colfmt . Все функциональные возможности bcp_colfmt предоставляются в bcp_setcolfmt функции. Кроме того, также предоставляется поддержка сортировки столбцов. Рекомендуется задать следующие атрибуты формата столбцов в указанном ниже порядке:

BCP_FMT_SERVER_COL

BCP_FMT_DATA_LEN

BCP_FMT_TYPE

Функция bcp_setcolfmt позволяет указать формат пользовательского файла для массовых копий. Для массового копирования формат содержит следующие части:

  • Сопоставление столбцов пользовательского файла с столбцами базы данных.

  • Тип данных каждого столбца пользовательского файла.

  • Длина необязательного индикатора для каждого столбца.

  • Максимальная длина данных для столбца пользовательского файла.

  • Необязательная байтовая последовательность для каждого столбца.

  • Длина необязательной последовательности байтов.

Каждый вызов bcp_setcolfmt задает формат для одного столбца пользовательского файла. Например, чтобы изменить параметры по умолчанию для трех столбцов в файле данных пользователя с пятью столбцами, сначала вызовите bcp_columns(5), а затем вызовите bcp_setcolfmt пять раз с тремя из этих вызовов, задав настраиваемый формат. Для оставшихся двух вызовов задайте для BCP_FMT_TYPE значение 0 и задайте BCP_FMT_INDICATOR_LENGTH, BCP_FMT_DATA_LEN и cbValue значение 0, SQL_VARLEN_DATA и 0 соответственно. Эта процедура копирует все пять столбцов, три с настраиваемым форматом и двумя с форматом по умолчанию.

Перед вызовом bcp_setcolfmt необходимо вызвать функцию bcp_columns.

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

Не нужно копировать все данные в пользовательском файле в таблицу SQL Server. Чтобы пропустить столбец, укажите формат данных для столбца, задав параметр BCP_FMT_SERVER_COL значение 0. Если вы хотите пропустить столбец, необходимо указать его тип.

Функцию bcp_writefmt можно использовать для сохранения спецификации формата.

поддержка расширенных функций даты и времени bcp_setcolfmt

Типы, используемые со свойством BCP_FMT_TYPE для типов даты и времени, указаны в разделе "Изменения массового копирования для расширенных типов даты и времени" (OLE DB и ODBC).

Дополнительные сведения см. в разделе "Улучшения даты и времени" (ODBC).

См. также

Функции массового копирования