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


Перевод массового копирования с DB-Library на ODBC

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

Преобразование программы массового копирования библиотеки БАЗЫ данных в ODBC легко, так как функции массового копирования, поддерживаемые драйвером ODBC для собственного клиента SQL Server, похожи на функции массового копирования библиотеки СУБД с следующими исключениями:

  • Приложения DB-Library передают указатель на структуру DBPROCESS как первый параметр функций массового копирования. В приложениях ODBC указатель DBPROCESS заменяется дескриптором соединения ODBC.

  • Приложения библиотеки DB вызывают BCP_SETL перед подключением, чтобы включить операции массового копирования в DBPROCESS. Вместо этого приложения ODBC вызывают SQLSetConnectAttr перед подключением, чтобы включить массовые операции в дескрипторе подключения:

    SQLSetConnectAttr(hdbc, SQL_COPT_SS_BCP,  
        (void *)SQL_BCP_ON, SQL_IS_INTEGER);  
    
  • Драйвер ODBC собственного клиента SQL Server не поддерживает сообщения и обработчики ошибок библиотеки DB; Для получения ошибок и сообщений, вызванных функциями массового копирования ODBC, необходимо вызвать SQLGetDiagRec . Версии ODBC функций массового копирования возвращают стандартные коды возврата массового копирования SUCCEED или FAILED, а не коды возврата ODBC, такие как SQL_SUCCESS или SQL_ERROR.

  • Значения, указанные для параметра DB-Library bcp_bindvarlen , интерпретируются по-разному, чем параметр ODBC bcp_bindcbData .

    Указанное условие Значение varlen библиотеки DB Значение CBData ODBC
    Предоставлены значения NULL 0 -1 (SQL_NULL_DATA)
    Предоставлены данные переменной длины -1 -10 (SQL_VARLEN_DATA)
    Символьная или двоичная строка нулевой длины Неприменимо 0

    В библиотеке DB значение varlen равно -1 указывает, что данные переменной длины предоставляются, что в ODBC cbData интерпретируется так, чтобы означать, что предоставляются только значения NULL. Измените спецификации varlen библиотеки DB для -1 на SQL_VARLEN_DATA и все спецификации varlen 0 на SQL_NULL_DATA.

  • Bcp_colfmt библиотеки СУБД и ODBC bcp_colfmtcbUserData имеют ту же проблему, bcp_bindчто и параметры file_collen varlen и cbData, указанные выше. Измените спецификации библиотеки БАЗЫ данных file_collen -1 на SQL_VARLEN_DATA и все спецификации file_collen 0 на SQL_NULL_DATA.

  • Параметр iValue функции ODBC bcp_control является указателем void. В библиотеке DB iValue было целым числом. Приведение значений для ODBC iValue в void *.

  • Параметр BCPMAXERRS bcp_control указывает, сколько отдельных строк может иметь ошибки до сбоя операции массового копирования. Значение по умолчанию для BCPMAXERRS равно 0 (сбой при первой ошибке) в версии библиотеки БАЗЫ данных bcp_control и 10 в версии ODBC. Приложения библиотеки DB, зависящие от 0 по умолчанию для завершения операции массового копирования, необходимо изменить для вызова ODBC bcp_control , чтобы задать для BCPMAXERRS значение 0.

  • Функция ODBC bcp_control поддерживает следующие параметры, которые не поддерживаются версией библиотеки DB bcp_control:

    • BCPODBC

      Если задано значение TRUE, указывает, что значения datetime и smalldatetime, сохраненные в формате символов, будут иметь префикс и суффикс временной метки ODBC. Это относится только к операциям BCP_OUT.

      Если для BCPODBC установлено значение FALSE, значение даты и времени, преобразованное в символьную строку, выводится следующим образом:

      1997-01-01 00:00:00.000  
      

      Если для BCPODBC установлено значение TRUE, то же значение даты и времени выводится следующим образом:

      {ts '1997-01-01 00:00:00.000' }  
      
    • BCPKEEPIDENTITY

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

    • BCPHINTS

      Определяет различные оптимизации для массового копирования. Этот параметр нельзя использовать в версии 6.5 или более ранних версий SQL Server.

    • BCPFILECP

      Задает кодовую страницу файла массового копирования.

    • BCPUNICODEFILE

      Указывает, что файл массового копирования в символьном формате является файлом в Юникоде.

  • Функция ODBC bcp_colfmt не поддерживает индикатор file_type SQLCHAR, так как он конфликтует с типом ODBC SQLCHAR. Вместо этого используйте SQLCHARACTER для bcp_colfmt.

  • В версиях функций массового копирования ODBC формат для работы с значениями datetime и smalldatetime в строках символов — формат ODBC y-mm-dd hh:mm:ss.sss; Значения smalldatetime используют формат ODBC yy-mm-dd hh:mm:ss.

    Версии библиотеки СУБД функций массового копирования принимают значения datetime и smalldatetime в символьных строках с использованием нескольких форматов:

    • Формат по умолчанию — mmm dd гггг hh:mmxx , где xx — AM или PM.

    • строки символов datetime и smalldatetime в любом формате, поддерживаемом функцией DB-Library dbconvert.

    • Если флажок "Использовать международные параметры" установлен на вкладке "Параметры библиотеки базы данных" служебной программы клиентской сети SQL Server, функции массового копирования библиотеки БАЗЫ данных также принимают даты в формате региональных дат, определенных для параметра языкового стандарта реестра клиентских компьютеров.

    Функции массового копирования библиотеки СУБД не принимают форматы даты и smalldatetime ODBC.

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

  • При выводе денежных значений в формате символов функции массового копирования ODBC предоставляют четыре цифры точности и нет разделителей запятых; Версии библиотеки DB предоставляют только две цифры точности и включают разделители запятых.

См. также

Выполнение операций массового копирования (ODBC)
Функции массового копирования