SQLDescribeParam
Для описания параметров любой инструкции SQL драйвер ODBC для собственного клиента SQL Server строит и выполняет инструкцию Transact-SQL SELECT при вызове функции SQLDescribeParam в дескрипторе подготовленной инструкции ODBC. При выполнении запроса драйвер использует инструкцию SET FMTONLY. Метаданные результирующего набора определяют характеристики параметров в подготовленной инструкции.
Рассмотрим инструкцию ODBC SQL:
INSERT INTO Shippers (ShipperID, CompanyName, Phone) VALUES (?, ?, ?)
При вызове функции SQLDescribeParam эта инструкция ODBC SQL вызовет драйвер, чтобы выполнить следующие инструкции Transact-SQL:
SET FMTONLY ONSELECT ShipperID, CompanyName, Phone FROM ShippersSET FMTONLY OFF
Поэтому функция SQLDescribeParam может возвратить любой код ошибки, который могут возвратить функции SQLExecute или SQLExecDirect.
Кроме того, драйвер не поддерживает вызов функции SQLDescribeParam в следующих случаях:
После вызова SQLExecDirect для любой из инструкций Transact-SQL UPDATE или DELETE, содержащих предложение FROM.
Для любой инструкции ODBC или Transact-SQL, содержащей параметр в предложении HAVING, или сравниваемой с результатом функции SUM.
Для любой инструкции ODBC или Transact-SQL, зависящей от вложенного запроса, который содержит параметры.
Для инструкций ODBC 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. Для указания, что размером параметра типа данных больших значений является "unlimited", драйвер ODBC для собственного клиента SQL Server устанавливает ParameterSizePtr в значение 0. Для стандартных параметров типа varcharвозвращаются значения фактического размера.
Примечание |
---|
Если параметр уже был привязан к максимальному размеру (для параметров типа SQL_VARCHAR, SQL_VARBINARY или SQL_WVARCHAR), возвращается привязанный размер параметра, а не "unlimited". |
Чтобы привязать входной параметр размера "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 |
date |
SQL_TYPE_DATE |
10 |
0 |
time |
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. Дополнительные сведения см. в разделе Определяемые пользователем типы данных больших значений CLR (ODBC).
См. также