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


SQLDescribeParam

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

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

Кроме того, новое в SQL Server 2012 , 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, возвращается ограниченный размер параметра, а не "неограниченный".

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

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

Параметры SQLDescribeParam и Table-Valued

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

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

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

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

DataTypePtr ParameterSizePtr DecimalDigitsPtr
дата/время SQL_TYPE_TIMESTAMP двадцать три 3
smalldatetime SQL_TYPE_TIMESTAMP 16 0
дата SQL_TYPE_DATE 10 0
Время SQL_SS_TIME2 8, 10..16 0..7
дата-время2 SQL_TYPE_TIMESTAMP 19, 21..27 0..7
смещение даты и времени SQL_SS_TIMESTAMPOFFSET 26, 28..34 0..7

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

Поддержка SQLDescribeParam для больших определяемых пользователем пользователей среды CLR

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

См. также

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