执行包含表值参数的命令需要两个阶段:
- 指定参数类型。 
- 绑定参数数据。 
Table-Valued 参数规范
使用者可以指定表值参数的类型。 此信息包括表值参数类型名称。 如果表值参数的用户定义表类型不在连接的当前默认架构中,则它还包括架构名称。 根据服务器支持,使用者还可以指定可选的元数据信息,例如列排序,并且可以指定特定列的所有行都具有默认值。
若要指定表值参数,使用者调用 ISSCommandWithParameter::SetParameterInfo,并选择性地调用 ISSCommandWithParameters::SetParameterProperties。 对于表值参数,DBPARAMBINDINFO 结构中的 pwszDataSourceType 字段的值为 DBTYPE_TABLE。 ulParamSize 字段设置为 ~0 以指示长度未知。 可以通过 ISSCommandWithParameters::SetParameterProperties 设置表值参数的特定属性,例如架构名称、类型名称、列顺序和默认列。
Table-Valued 参数绑定
表值参数可以是任何行集对象。 提供程序在执行期间向服务器发送表值参数时从此对象读取。
若要绑定表值参数,使用者调用 IAccessor::CreateAccessor。 表值参数的 DBBINDING 结构的 wType 字段设置为DBTYPE_TABLE。 DBBINDING 结构的 pObject 成员为非 NULL,pObject 的 iid 成员设置为IID_IRowset或任何其他表值参数行集对象接口。 DBBINDING 结构中的剩余字段应设置与为流式传输 BLOB 设置的相同方式。
在与表值参数关联的表值参数和行集对象的绑定中,适用以下限制:
- 表值参数行集列数据允许的唯一状态值是DBSTATUS_S_ISNULL和DBSTATUS_S_OK。 DBSTATUS_S_DEFAULT将导致失败,绑定状态值将设置为DBSTATUS_E_BADSTATUS。 
- 可以使用状态DBSTATUS_S_DEFAULT标记表值参数。 唯一的有效值是DBSTATUS_S_DEFAULT和DBSTATUS_S_OK。 当状态设置为DBSTATUS_S_DEFAULT时,表值参数的值对应于空表。 
- 表值参数(标识列或计算列)中的只读列必须默认使用 SSPROP_PARAM_TABLE_DEFAULT_COLUMNS 属性进行标记。 还必须通过 SSPROP_PARAM_TABLE_DEFAULT_COLUMNS 属性将具有默认值的列标记为默认值,以便将默认值用于特定表值参数的列的数据值。 提供程序将忽略为标记为默认值的列绑定的数据值。 
- 除非还设置了SSPROP_PARAM_TABLE_DEFAULT,否则数据将发送到服务器以获取具有DBPROP_COL_AUTOINCREMENT或SSPROP_COL_COMPUTED的列。