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


srv_convert (API-интерфейс расширенных хранимых процедур)

Важное примечаниеВажно!

В будущей версии Microsoft SQL Server эта возможность будет удалена. Не используйте ее при работе над новыми приложениями и как можно быстрее измените приложения, в которых она в настоящее время используется. Пользуйтесь вместо этого интеграцией со средой CLR.

Преобразует данные из одного типа в другой.

Синтаксис

        int srv_convert (
        SRV_PROC *
        srvproc
        ,
        int
        srctype
        ,
        void *
        src
        ,
        DBINT
        srclen
        ,
        int
        desttype
        ,
        void *  dest,DBINTdestlen);

Arguments

  • srvproc
    Указатель на структуру SRV_PROC, который представляет собой дескриптор соединения с клиентом. В этой структуре содержатся все сведения, которые библиотека API-интерфейса расширенных хранимых процедур использует для управления обменом сообщениями и данными между приложением и клиентом. Если задан дескриптор srvproc, он передается функции обработки ошибок из API-интерфейса расширенных хранимых процедур в случае возникновения ошибки.

  • srctype
    Задает тип данных, подлежащих преобразованию. Этот параметр может иметь любой из типов данных API-интерфейса расширенных хранимых процедур.

  • src
    Указатель на данные, подлежащие преобразованию. Этот параметр может иметь любой из типов данных API-интерфейса расширенных хранимых процедур.

  • srclen
    Задает длину, в байтах, данных, подлежащих преобразованию. Если параметр srclen равен 0, функция srv_convert помещает в целевую переменную значение NULL. Если значение этого параметра не равно 0, он не учитывается для типов данных с фиксированной длиной, для которых исходные данные предполагаются равными NULL. Для данных типа SRVCHAR длина, равная -1, означает, что строка завершается нулем.

  • desttype
    Задает тип, к которому будут преобразованы исходные данные. Этот параметр может иметь любой из типов данных API-интерфейса расширенных хранимых процедур.

  • dest
    Указатель на целевую переменную, куда будут помещены преобразованные данные. Если этот указатель равен NULL, функция srv_convert вызывает обработчик ошибок, если он был задан пользователем, и возвращает значение -1.

    Если значение параметра desttype равно SRVDECIMAL или SRVNUMERIC, параметр dest должен быть указателем на структуру типа DBNUMERIC или DBDECIMAL с заранее заданными нужными значениями точности и масштаба. Параметр DEFAULTPRECISION позволяет задать точность по умолчанию, а параметр DEFAULTSCALE — масштаб по умолчанию.

  • destlen
    Задает длину целевой переменной, в байтах. Для типов с фиксированной длиной это значение не учитывается. Для целевой переменной типа SRVCHAR, значение параметра destlen представляет собой полную длину буфера назначения. Длина переменной назначения типа SRVCHAR or SRVBINARYравная -1, указывает, что места достаточно. Для переменной назначения типа srvchar длина, равная -1, вызывает завершение строки нулем.

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

Длина преобразованных данных, в байтах, если преобразование типов было проведено успешно. Когда функция srv_convert получает запрос на преобразование, которое не поддерживается, она вызывает обработчик ошибок, если он был задан пользователем, устанавливает глобальный номер ошибки и возвращает значение -1.

Замечания

Функция srv_willconvert определяет, допустимо ли данное преобразование.

Преобразование в приблизительные числовые типы SRVFLT4 и SRVFLT8 могут привести к некоторой потере точности. Преобразование из приблизительных числовых типов SRVFLT4 и SRVFLT8 в типы SRVCHAR и SRVTEXT могут также привести к некоторой потере точности.

Преобразование к типу SRVFLTx, SRVINTx, SRVMONEY, SRVMONEY4, SRVDECIMAL и SRVNUMERIC может привести к переполнению, если число больше максимально допустимого значения для целевого типа, или к потере значимости, если число меньше минимально допустимого значения для целевого типа. Если переполнение происходит при преобразовании к типу SRVCHAR или SRVTEXT, первым символом результирующей величины будет звездочка (*), свидетельствующая об ошибке.

При преобразовании из типа SRVCHAR к типу SRVBINARY функция srv_convert интерпретирует SRVCHAR как шестнадцатеричное значение, независимо от того, начинается ли оно с 0. При преобразовании из типа SRVBINARY в тип SRVCHAR функция srv_convert создает шестнадцатеричную строку, не содержащую начального 0. Во всех остальных случаях преобразование в тип SRVBINARY представляет собой непосредственное побитовое копирование.

В некоторых случаях применяется преобразование значений типа в значения того же типа. Например, преобразование из типа SRVCHAR в тип SRVCHAR с параметром destlen, равным -1, добавляет к строке завершающий ноль.

Описание типов данных и преобразований типов данных API-интерфейса расширенных хранимых процедур см. в разделе Типы данных (API-интерфейс расширенных хранимых процедур).

Вызов функции srv_convert может оказаться неудачным по нескольким причинам:

  • Запрошенное преобразование невозможно.

  • Преобразование привело к усечению, переполнению или потере точности в целевой переменной.

  • При преобразовании строки символов в числовой тип произошла ошибка.

Примечание по безопасностиПримечание по безопасности

Необходимо тщательно просмотреть исходный код расширенных хранимых процедур и проверить скомпилированные DLL-библиотеки перед их установкой на рабочий сервер. Сведения о проверке безопасности см. на следующем веб-узле Майкрософт.