SQLDescribeParam

为描述所有 SQL 语句的参数,当针对已准备的 ODBC 语句句柄调用 SQLDescribeParam 时,SQL Server Native Client ODBC 驱动程序将生成并执行 Transact-SQL SELECT 语句。 结果集的元数据确定预定义语句中的参数的特征。SQLDescribeParam 可以返回 SQLExecuteSQLExecDirect 可能返回的任何错误代码。

从 SQL Server 2012 开始,数据库引擎中的改进功能允许 SQLDescribeParam 获取关于预期结果的更准确描述。 这些更准确的结果可能与 SQL Server 以前版本中的 SQLDescribeParam 所返回的值有所不同。 有关详细信息,请参阅元数据发现

ParameterSizePtr 现在返回的值与 ODBC specification(ODBC 规范)中所定义的相应参数标记的列或表达式的大小(用字符数表示)定义一致,这也是 SQL Server 2012 中的新功能。 在以前版本的 SQL Server Native Client 中,ParameterSizePtr 可以是用于类型的 SQL_DESC_OCTET_LENGTH 的相应值,或提供给用于类型的 SQLBindParameter 的不相关列大小值,该类型的值应忽略(例如 SQL_INTEGER)。

在以下情况下,该驱动程序不支持调用 SQLDescribeParam

  • 在针对包含 FROM 子句的任何 Transact-SQL UPDATE 或 DELETE 语句执行 SQLExecDirect 之后。

  • 对于 HAVING 子句中包含参数或与 SUM 函数的结果相比较的任何 ODBC 或 Transact-SQL 语句。

  • 对于依赖于包含参数的子查询的任何 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);

当连接到除 master 以外的任何数据库时,在成功准备后执行 SQLDescribeParam 将返回一个空的行集。 按如下方式准备的相同调用将导致 SQLDescribeParam 成功,而不管当前用户数据库如何:

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

对于大型值数据类型,在 DataTypePtr 中返回的值包括 SQL_VARCHAR、SQL_VARBINARY 或 SQL_NVARCHAR。 为了指示大型值数据类型参数的大小为“无限制”,SQL Server Native Client ODBC 驱动程序将 ParameterSizePtr 设置为 0。 将返回标准 varchar 参数的实际大小值。

注意注意

对于 SQL_VARCHAR、SQL_VARBINARY 或 SQL_WVARCHAR 参数,如果参数绑定有最大大小,则返回该参数的绑定大小,而非“无限制”。

若要绑定大小“无限制”的输入参数,必须使用执行时数据。 不能绑定大小“无限制”的输出参数(无法对输出参数中的数据进行流式处理,就像 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 UDT 的支持

SQLDescribeParam 支持大型 CLR 用户定义类型 (UDT)。 有关详细信息,请参阅大型 CLR 用户定义类型 (ODBC)

请参阅

概念

ODBC API 实现细节

其他资源

SQLDescribeParam 函数