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 ON
SELECT ShipperID, CompanyName, Phone FROM Shippers
SET FMTONLY OFF
Поэтому функция SQLDescribeParam может возвратить любой код ошибки, который могут возвратить функции SQLExecute или SQLExecDirect.
Кроме того, драйвер не поддерживает вызов функции 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. Для указания, что размером параметра типа данных больших значений является «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).
См. также