Table-Valued 参数行集创建

尽管使用者可以为表值参数提供任何行集对象,但典型的行集对象针对后端数据存储实现,因此提供有限的性能。 因此,SQL Server Native Client OLE DB 访问接口使使用者能够在内存中数据的基础上创建专用行集对象。 此特殊的内存中行集对象是一个名为表值参数行集的新 COM 对象。 它提供的功能类似于参数集。

表值参数行集对象由使用者通过多个会话级接口显式创建输入参数。 每个表值参数都有一个表值参数行集对象的实例。 使用者可以通过提供已知元数据信息(静态方案)或通过提供程序接口(动态方案)发现表值参数行集对象来创建表值参数行集对象。 以下部分介绍了这两种方案。

静态方案

当类型信息已知时,使用者使用 ITableDefinitionWithConstraints::CreateTableWithConstraints 实例化与表值参数对应的表值参数行集对象。

guid 字段(pTableID 参数)包含特殊的 GUID(CLSID_ROWSET_TVP)。 pwszName 成员包含使用者想要实例化的表值参数类型的名称。 eKind 字段将设置为DBKIND_GUID_NAME。 当语句是即席 SQL 时,需要此名称;如果名称是过程调用,则为可选名称。

对于聚合,使用者使用控制 IUnknown 传递 pUnkOuter 参数。

表值参数行集对象属性是只读的,因此使用者不应在 rgPropertySets 中设置任何属性。

对于每个 DBCOLUMNDESC 结构的 rgPropertySets 成员,使用者可以为每个列指定其他属性。 这些属性属于DBPROPSET_SQLSERVERCOLUMN属性集。 它们使你能够为每个列指定计算设置和默认设置。 它们还支持现有的列属性,例如可为 null 性和标识。

若要从表值参数行集对象检索相应的信息,使用者使用 IRowsetInfo::GetProperties。

若要检索有关每个列的 null、唯一、计算和更新状态的信息,使用者使用 IColumnsRowset::GetColumnsRowset 或 IColumnsInfo::GetColumnInfo。 这些方法提供有关每个表值参数行集列的详细信息。

使用者指定表值参数的每个列的类型。 这类似于在 SQL Server 中创建表时指定列的方式。 使用者通过 ppRowset 输出参数从 SQL Server Native Client OLE DB 提供程序获取表值参数行集对象。

动态方案

当使用者没有类型信息时,它应使用 IOpenRowset::OpenRowset 实例化表值参数行集对象。 向提供程序提供的所有使用者都是类型名称。

在此方案中,提供程序代表使用者从服务器获取有关表值参数行集对象的类型信息。

pTableIDpUnkOuter 参数应设置为静态方案。 然后,SQL Server Native Client OLE DB 访问接口从服务器获取类型信息(列信息和约束),并通过 ppRowset 参数返回表值参数行集对象。 此作需要与服务器通信,因此无法执行静态方案。 动态方案仅适用于参数化过程调用。

另请参阅

Table-Valued 参数 (OLE DB)
使用 Table-Valued 参数 (OLE DB)