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


bcp_control

Изменяет параметры по умолчанию для различных параметров элемента управления для массового копирования между файлом и SQL Server.

Синтаксис

  
RETCODE bcp_control (  
HDBC   
hdbc  
,  
INT   
eOption  
,  
void*   
iValue  
);  
  

Аргументы

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

eOption
Принимает одно из следующих значений.

BCPABORT
Останавливает текущую операцию массового копирования. Вызовите bcp_control с параметром eOption BCPABORT из другого потока, чтобы остановить выполняющуюся операцию массового копирования. Параметр iValue игнорируется.

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

BCPDELAYREADFMT
Логическое значение, если задано значение true, приведет к считывание bcp_readfmt при выполнении. Если задано значение false (значение по умолчанию), bcp_readfmt немедленно считывает файл форматирования. Ошибка последовательности возникает, если BCPDELAYREADFMT имеет значение true и вызывается bcp_columns или bcp_setcolfmt.

Ошибка последовательности также возникает при вызове bcp_control(hdbc, BCPDELAYREADFMT, (void *)FALSE) после вызова bcp_control(hdbc, BCPDELAYREADFMT, (void *)TRUE) и bcp_writefmt.

Дополнительные сведения см. в разделе Обнаружение метаданных.

BCPFILECP
iValue содержит номер кодовой страницы для файла данных. Можно указать номер кодовой страницы, например 1252 или 850, либо одно из следующих значений.

BCPFILE_ACP: данные в файле есть в Microsoft Windows?? кодовая страница клиента.

BCPFILE_OEMCP: данные в файле хранятся в кодовой странице изготовителя оборудования (OEM) клиента (по умолчанию).

BCPFILE_RAW: данные в файле отображаются на кодовой странице SQL Server.

BCPFILEFMT
Номер версии для формата файла данных. Это может быть 80 (SQL Server 2000 г.), 90 (SQL Server 2005 г.), 100 (SQL Server 2008 г. или SQL Server 2008 R2), 110 (SQL Server 2012 г.) или 120 (SQL Server 2014 г.). 120 используется по умолчанию. Это может оказаться полезным при экспорте или импорте данных в форматах, которые поддерживались прежними версиями сервера. Например, чтобы импортировать данные, полученные из текстового столбца на сервере SQL Server 2000, в столбец varchar(max) на сервере SQL Server 2005 или более поздней версии, необходимо указать значение 80. Аналогичным образом, если при экспорте данных из столбца varchar(max) указать значение 80, они будут сохранены так же, как текстовые столбцы сохраняются в формате SQL Server 2000 и могут быть импортированы в текстовый столбец сервера SQL Server 2000.

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

BCPFIRSTEX
В операциях bcp out задает первую строку таблицы базы данных для копирования в файл данных.

В операциях bcp in задает первую строку файла данных для копирования в таблицу базы данных.

Ожидается, что параметр iValue будет адресом 64-разрядного целого числа со знаком, содержащего значение . Максимальное значение, передаваемое в BCPFIRSTEX, составляет 2^63-1.

BCPFMTXML
Указывает, что формируемый файл форматирования должен быть в формате XML. По умолчанию эта настройка отключена.

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

Примечание

XML-файлы форматирования поддерживаются только при установке SQL Server вместе с SQL Server Native Client.

BCPHINTS
iValue содержит указатель строки символов SQLTCHAR. Адресуемая строка задает подсказки для обработки массового копирования SQL Server или инструкцию Transact-SQL , которая возвращает результирующий набор. Если задана инструкция Transact-SQL, которая возвращает несколько результирующих наборов, все результирующие наборы после первого пропускаются. Дополнительные сведения о указаниях по обработке массового копирования см. в разделе служебная программа bcp.

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

BCPKEEPNULLS
Указывает, будут ли пустые значения данных в файле преобразовываться в значения NULL в таблице SQL Server . Если iValue имеет значение TRUE, пустые значения будут преобразованы в NULL в таблице SQL Server. По умолчанию пустые значения преобразовываются в значения по умолчанию для столбца в таблице SQL Server , если значение по умолчанию существует.

BCPLAST
Последняя строка для копирования. По умолчанию установлено копирование всех строк; если задать для этого параметра значение меньше 1, то ему будет установлено значение по умолчанию.

BCPLASTEX
В операциях bcp out задает последнюю строку таблицы базы данных для копирования в файл данных.

В операциях bcp in задает последнюю строку файла данных для копирования в таблицу базы данных.

Ожидается, что параметр iValue будет адресом 64-разрядного целого числа со знаком, содержащего значение . Максимальное значение, передаваемое в BCPLASTEX, составляет 2^63-1.

BCPMAXERRS
Число ошибок, после которого произойдет сбой операции массового копирования. Значение по умолчанию — 10; Значение меньше 1 сбрасывает этот параметр до значения по умолчанию. В операции массового копирования допускается не более 65 535 ошибок. Если выполнить попытку установить этот параметр в значение, превышающее 65 535, будет установлено значение 65 535.

BCPODBC
При значении TRUE указывает, что значения datetime и smalldatetime , сохраненные в символьном формате, будут использовать префикс и суффикс escape-последовательности метки времени ODBC. Параметр BCPODBC применяется только к BCP_OUT.

При значении FALSE значение datetime , представляющее 1 января 1997 года, преобразуется в строку символов: 1997-01-01 00:00:00.000. Если задано значение TRUE, то же значение даты и времени представлено следующим образом: {ts '1997-01-01 00:00:00.000'}.

BCPROWCOUNT
Возвращает число строк, на которые распространяется действие текущей (или последней) операции bcp.

BCPTEXTFILE
Значение TRUE указывает, что файл данных является текстовым, а не двоичным файлом. Если файл является текстовым, BCP определяет, является ли его кодировка кодировкой Юникод, путем проверки байтового маркера Юникода в первых двух байтах файла данных.

BCPUNICODEFILE
В значении TRUE указывает, что входной файл является файлом в кодировке Юникод.

iValue
Значение указанного параметра eOption. iValue — это целочисленное значение (LONGLONG), приведение к указателю void, что позволяет в будущем расширяться до 64-разрядных значений.

Возвращаемое значение

SUCCEED или FAIL.

Комментарии

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

Эта функция также используется для указания инструкции SELECT при массовом копировании из SQL Server результирующий набор SELECT. Задайте для параметра eOption значение BCPHINTS, а для параметра iValue — указатель на строку SQLTCHAR, содержащую инструкцию SELECT.

Эти параметры элемента управления имеют смысл только при копировании между пользовательским файлом и SQL Server таблицей. Параметры параметров элемента управления не влияют на строки, скопированные в SQL Server с bcp_sendrow.

Пример

// Variables like henv not specified.  
SQLHDBC      hdbc;  
DBINT      nRowsProcessed;  
  
// Application initiation, get an ODBC environment handle, allocate the  
// hdbc, and so on.  
...   
  
// Enable bulk copy prior to connecting on allocated hdbc.  
SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP, (SQLPOINTER) SQL_BCP_ON,  
   SQL_IS_INTEGER);  
  
// Connect to the data source, return on error.  
if (!SQL_SUCCEEDED(SQLConnect(hdbc, _T("myDSN"), SQL_NTS,  
   _T("myUser"), SQL_NTS, _T("myPwd"), SQL_NTS)))  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Initialize bulk copy.   
if (bcp_init(hdbc, _T("address"), _T("address.add"), _T("addr.err"),  
   DB_IN) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the number of rows per batch.   
if (bcp_control(hdbc, BCPBATCH, (void*) 1000) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set file column count.   
if (bcp_columns(hdbc, 1) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Set the file format.   
if (bcp_colfmt(hdbc, 1, 0, 0, SQL_VARLEN_DATA, '\n', 1, 1)  
   == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
// Execute the bulk copy.   
if (bcp_exec(hdbc, &nRowsProcessed) == FAIL)  
   {  
   // Raise error and return.  
   return;  
   }  
  
printf_s("%ld rows processed by bulk copy.", nRowsProcessed);  
  

См. также:

Bulk Copy Functions