表值参数的 ODBC SQL 类型

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)

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

备注

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

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

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

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

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

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

表值参数只能是 SQL Server 2008 (10.0.x) 或更高版本中的输入参数。 如果尝试通过 SQLBindParameter 或 SQLSetDescField 将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,则 SQLExecute 或 SQLExecDirect 将返回SQL_ERROR,并将诊断记录添加到 SQLSTATE=HY090 和消息“字符串或缓冲区长度无效”的语句中。

另请参阅

表值参数 (ODBC)