表值参数的 ODBC SQL 类型

对表值参数的支持是通过新的 ODBC SQL 类型 SQL_SS_TABLE 提供的。

注释

不能将 SQL_SS_TABLE 转换为任何其他 ODBC 或 SQL Server 数据类型。

如果 SQL_SS_TABLE 在 SQLBindParameter 的 ValueType 参数中用作 C 数据类型,或者尝试将应用程序参数描述符 (APD) 记录中的 SQL_DESC_TYPE 设置为 SQL_SS_TABLE,则会返回 SQL_ERROR,并生成带有 SQLSTATE=HY003 的诊断记录“应用程序缓冲区类型无效”。

如果在 IPD 记录中将 SQL_DESC_TYPE 设置为 SQL_SS_TABLE,并且对应的应用程序参数描述符记录不为 SQL_C_DEFAULT,则会返回 SQL_ERROR,并生成带有 SQLSTATE=HY003 的诊断记录“应用程序缓冲区类型无效”。 SQLSetDescFieldSQLSetDescRecSQLBindParameter 的 ParameterType 可能会出现这种情况。

调用 SQLGetData 时,如果 TargetType 参数为 SQL_SS_TABLE,则会返回 SQL_ERROR,并生成带有 SQLSTATE=HY003 的诊断记录“应用程序缓冲区类型无效”。

不能将表值参数列作为 SQL_SS_TABLE 类型绑定。 如果在调用 SQLBindParameter 时将 ParameterType 设置为 SQL_SS_TABLE,则返回 SQL_ERROR,并生成带有 SQLSTATE=HY004 的诊断记录“SQL 数据类型无效”。 SQLSetDescFieldSQLSetDescRec 也可能会出现这种情况。

表值参数列值与参数和结果列具有相同的数据转换选项。

在 SQL Server 2008 或更高版本中只能将表值参数用作输入参数。 如果尝试通过 SQLBindParameterSQLSetDescField 将 SQL_DESC_PARAMETER_TYPE 设置为 SQL_PARAM_INPUT 以外的值,则返回 SQL_ERROR,并且将向该语句添加带有 SQLSTATE=HY105 的诊断记录和消息“参数类型无效”。

表值参数列不能在 StrLen_or_IndPtr 中使用 SQL_DEFAULT_PARAM,因为表值参数不支持按行默认值。 应用程序可以改为将 SQL_CA_SS_COL_HAS_DEFAULT_VALUE 列属性设置为 1。 这表示该列的所有行均具有默认值。 如果 StrLen_or_IndPtr 设置为 SQL_DEFAULT_PARAM,SQLExecuteSQLExecDirect 将返回 SQL_ERROR,并且将向该语句添加带有 SQLSTATE=HY090 的诊断记录和消息“字符串或缓冲区长度无效”。

请参阅

概念

表值参数 (ODBC)