SQLDescribeParam

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

Чтобы описать параметры любой инструкции SQL, драйвер ODBC собственного клиента SQL Server создает и выполняет инструкцию Transact-SQL SELECT при вызове SQLDescribeParam в подготовленном дескрипторе инструкции ODBC. Метаданные результирующего набора определяют характеристики параметров в подготовленной инструкции. SQLDescribeParam может возвращать любой код ошибки, возвращаемый SQLExecute или SQLExecDirect.

Улучшения ядра СУБД, начиная с SQL Server 2012 (11.x), позволяют SQLDescribeParam получать более точные описания ожидаемых результатов. Эти более точные результаты могут отличаться от значений, возвращаемых SQLDescribeParam в предыдущих версиях SQL Server. Дополнительные сведения см. в разделе Обнаружение метаданных.

Кроме того, новые возможности SQL Server 2012 (11.x), ParameterSizePtr теперь возвращает значение, соответствующее определению размера( в символах) столбца или выражения соответствующего маркера параметра, как определено в спецификации ODBC. В предыдущих версиях собственного клиента SQL Server ПараметрSizePtr может быть соответствующим значением SQL_DESC_OCTET_LENGTH для типа или неуместным значением размера столбца, предоставленного SQLBindParameter для типа, значение которого должно игнорироваться (например, SQL_INTEGER).

Драйвер не поддерживает вызов SQLDescribeParam в следующих ситуациях:

  • После SQLExecDirect для любых инструкций Transact-SQL UPDATE или DELETE, содержащих предложение FROM.

  • Для любой инструкции ODBC или Transact-SQL, содержащей параметр в предложении HAVING, или по сравнению с результатом функции SUM.

  • Для любой инструкции ODBC или Transact-SQL в зависимости от вложенных запросов, содержащих параметры.

  • Для инструкций ODBC SQL, содержащих маркеры параметров в обоих сравниваемых выражениях или содержащих предикат с квантором.

  • Для любых запросов, в которых один из параметров является параметром функции.

  • При наличии комментариев (/* */) в команде Transact-SQL.

При обработке пакета инструкций Transact-SQL драйвер также не поддерживает вызов SQLDescribeParam для маркеров параметров в инструкциях после первой инструкции в пакете.

При описании параметров подготовленных хранимых процедур SQLDescribeParam использует системную хранимую процедуру sp_sproc_columns для получения характеристик параметров. sp_sproc_columns может сообщать данные для хранимых процедур в текущей пользовательской базе данных. Подготовка полного имени хранимой процедуры позволяет SQLDescribeParam выполнять в разных базах данных. Например, системная хранимая процедура sp_who может быть подготовлена и выполнена в любой базе данных как:

SQLPrepare(hstmt, "{call sp_who(?)}", SQL_NTS);  

Выполнение SQLDescribeParam после успешной подготовки возвращает пустой набор строк при подключении к любой базе данных, но master. Тот же вызов, подготовленный следующим образом, приводит к успешному выполнению SQLDescribeParam независимо от текущей пользовательской базы данных:

SQLPrepare(hstmt, "{call master..sp_who(?)}", SQL_NTS);  

Для типов данных больших значений значение, возвращаемое в DataTypePtr , SQL_VARCHAR, SQL_VARBINARY или SQL_NVARCHAR. Чтобы указать, что размер параметра типа данных большого значения является "неограниченным", драйвер ODBC собственного клиента SQL Server задает параметрSizePtr равным 0. Фактические значения размера возвращаются для стандартных параметров varchar .

Примечание.

Если параметр уже был привязан к максимальному размеру (для параметров типа SQL_VARCHAR, SQL_VARBINARY или SQL_WVARCHAR), возвращается привязанный размер параметра, а не «unlimited».

Чтобы привязать входной параметр размера «unlimited», необходимо использовать данные времени выполнения. Невозможно привязать выходной параметр неограниченного размера (нет метода потоковой передачи данных из выходного параметра, например SQLGetData для результирующих наборов).

Для выходных параметров буфер должен быть привязан, и, если значение слишком длинное, буфер заполняется, и возвращается сообщение SQL_SUCCESS_WITH_INFO с предупреждением «строковые данные; усечение справа». Данные, которые были усечены, затем отбрасываются.

Функция SQLDescribeParam и возвращающие табличные значения параметры

Приложение может получить сведения о параметре с табличным значением для подготовленной инструкции с помощью SQLDescribeParam. Дополнительные сведения см. в разделе Метаданные параметра с табличным значением для подготовленных инструкций.

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

Поддержка в функции SQLDescribeParam улучшенных возможностей даты-времени

Для типов даты-времени возвращаются следующие значения.

Атрибут DataTypePtr ParameterSizePtr DecimalDigitsPtr
datetime SQL_TYPE_TIMESTAMP 23 3
smalldatetime SQL_TYPE_TIMESTAMP 16 0
Дата SQL_TYPE_DATE 10 0
Время SQL_SS_TIME2 8, 10..16 0..7
datetime2 SQL_TYPE_TIMESTAMP 19, 21..27 0..7
datetimeoffset SQL_SS_TIMESTAMPOFFSET 26, 28..34 0..7

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

Поддержка в функции SQLDescribeParam определяемых пользователем типов больших данных CLR

SQLDescribeParam поддерживает большие определяемые пользователем типы CLR (определяемые пользователем UDTs). Дополнительные сведения см. в разделе "Крупные определяемые пользователем типы CLR" (ODBC).

См. также

Функция SQLDescribeParam
Подробные сведения о реализации API-интерфейсов ODBC