创建表值参数行集
尽管使用者可以为表值参数提供任意行集对象,但是典型的行集对象要针对后端数据存储来实现,因此提供有限的性能。 因此,SQL Server Native Client OLE DB 访问接口使使用者能够在内存中数据的基础上创建专用行集对象。 此特殊的内存中行集对象是一个新的 COM 对象,称为表值参数行集 。 它提供与参数集相似的功能。
表值参数行集对象由使用者通过多个会话级接口为输入参数显式创建。 每个表值参数对应一个表值参数行集对象实例。 使用者可以通过以下两种方法之一创建表值参数行集对象:提供已知的元数据信息(静态方案);或者通过访问接口发现元数据信息(动态方案)。 以下各节介绍这两种方案。
静态方案
如果类型信息已知,使用者使用 ITableDefinitionWithConstraints::CreateTableWithConstraints 对与表值参数对应的表值参数行集对象进行实例化。
guid 字段(pTableID 参数)包含特殊 GUID (CLSID_ROWSET_TVP)。 pwszName 成员包含使用者要实例化的表值参数类型的名称 。 eKind 字段将设置为 DBKIND_GUID_NAME 。 此名称在使用特殊 SQL 语句时是必需的,在使用过程调用时是可选的。
对于聚合,使用者传递 pUnkOuter 参数(带有控制的 IUnknown)。
表值参数行集对象属性是只读的,因此使用者不应在 rgPropertySets 中设置任何属性。
对于每个 DBCOLUMNDESC 结构中的 rgPropertySets 成员,使用者可为每列指定附加属性 。 这些属性属于 DBPROPSET_SQLSERVERCOLUMN 属性集。 它们支持您为每一列指定计算设置和默认设置。 它们还支持现有列属性,如为空性和标识。
要从表值参数行集对象中检索相应的信息,使用者应使用 IRowsetInfo::GetProperties。
若要检索有关每个列的 null、唯一、计算和更新状态的信息,使用者使用 IColumnsRowset::GetColumnsRowset 或 IColumnsInfo::GetColumnInfo。 以下方法提供有关每个表值参数行集列的详细信息。
使用者指定表值参数每一列的类型。 这类似于在 SQL Server 中创建表时指定列的方式。 使用者通过 ppRowset 输出参数从SQL Server Native Client OLE DB 提供程序获取表值参数行集对象。
动态方案
当使用者没有类型信息时,它应使用 IOpenRowset::OpenRowset 来实例化表值参数行集对象。 使用者只需向访问接口提供类型名称。
在此方案中,访问接口代表使用者从服务器获取有关表值参数行集对象的类型信息。
应按照静态方案的设置对 pTableID 和 pUnkOuter 参数进行设置。 然后,SQL Server Native Client OLE DB 访问接口从服务器获取类型信息 (列信息和约束) ,并通过 ppRowset 参数返回表值参数行集对象。 此操作要求与服务器通信,因此性能不如静态方案。 动态方案仅适用于参数化过程调用。