Partilhar via


Criação do conjunto de linhas do parâmetro Table-Valued

Embora os consumidores possam fornecer qualquer objeto de conjunto de linhas para parâmetros com valor de tabela, objetos de conjunto de linhas típicos são implementados em armazenamentos de dados de back-end e, portanto, fornecem desempenho limitado. Por esse motivo, o Provedor OLE DB do SQL Server Native Client permite que os consumidores criem um objeto de conjunto de linhas especializado sobre os dados na memória. Este objeto de conjunto de linhas especial na memória é um novo objeto COM chamado conjunto de linhas de parâmetro com valor de tabela. Ele fornece funcionalidade semelhante aos conjuntos de parâmetros.

Objetos de conjunto de linhas de parâmetro com valor de tabela são criados explicitamente pelo consumidor para parâmetros de entrada por meio de várias interfaces de nível de sessão. Há uma instância de um objeto de conjunto de linhas de parâmetro com valor de tabela por parâmetro com valor de tabela. O consumidor pode criar os objetos de conjunto de linhas de parâmetro com valor de tabela fornecendo informações de metadados que já são conhecidas (cenário estático) ou descobrindo-os por meio de interfaces de provedor (cenário dinâmico). As seções a seguir descrevem esses dois cenários.

Cenário estático

Quando as informações de tipo são conhecidas, o consumidor usa ITableDefinitionWithConstraints::CreateTableWithConstraints para criar uma instância de um objeto de conjunto de linhas de parâmetro com valor de tabela que corresponde a um parâmetro com valor de tabela.

O campo guid (parâmetro pTableID ) contém o GUID especial (CLSID_ROWSET_TVP). O membro pwszName contém o nome do tipo de parâmetro com valor de tabela que o consumidor deseja instanciar. O campo eKind será definido como DBKIND_GUID_NAME. Esse nome é necessário quando a instrução é SQL ad hoc; o nome será opcional se for uma chamada de procedimento.

Para agregação, o consumidor passa o parâmetro pUnkOuter com o IUnknown controlador.

As propriedades do objeto rowset de parâmetro com valor de tabela são somente leitura, portanto, o consumidor não deve definir nenhuma propriedade em rgPropertySets.

Para o membro rgPropertySets de cada estrutura DBCOLUMNDESC, o consumidor pode especificar propriedades adicionais para cada coluna. Essas propriedades pertencem ao conjunto de propriedades DBPROPSET_SQLSERVERCOLUMN. Elas permitem que você especifique as configurações computadas e padrão para cada coluna. Eles também dão suporte a propriedades de coluna existentes, como nulidade e identidade.

Para recuperar informações correspondentes de um objeto de conjunto de linhas de parâmetro com valor de tabela, o consumidor usa IRowsetInfo::GetProperties.

Para recuperar informações sobre o status nulo, exclusivo, computado e atualizado de cada coluna, o consumidor usa IColumnsRowset::GetColumnsRowset ou IColumnsInfo::GetColumnInfo. Esses métodos fornecem informações detalhadas sobre cada coluna de conjunto de linhas de parâmetro com valor de tabela.

O consumidor especifica o tipo de cada coluna do parâmetro com valor de tabela. Isso é semelhante a como as colunas são especificadas quando uma tabela é criada no SQL Server. O consumidor obtém um objeto de conjunto de linhas de parâmetro com valor de tabela do provedor OLE DB do SQL Server Native Client por meio do parâmetro de saída ppRowset .

Cenário dinâmico

Quando o consumidor não tiver informações de tipo, ele deverá usar IOpenRowset::OpenRowset para instanciar objetos de conjunto de linhas de parâmetro com valor de tabela. Tudo o que o consumidor precisa fornecer ao provedor é o nome do tipo.

Nesse cenário, o provedor obtém informações de tipo sobre um objeto de conjunto de linhas de parâmetro com valor de tabela do servidor em nome do consumidor.

Os parâmetros pTableID e pUnkOuter devem ser definidos como no cenário estático. O Provedor OLE DB do SQL Server Native Client obtém as informações de tipo (informações de coluna e restrições) do servidor e retorna um objeto de conjunto de linhas de parâmetro com valor de tabela por meio do parâmetro ppRowset . Essa operação requer comunicação com o servidor e, portanto, não funciona tão bem quanto o cenário estático. O cenário dinâmico funciona apenas com chamadas de procedimento parametrizados.

Consulte Também

Parâmetros deTable-Valued (OLE DB)
Usar parâmetros de Table-Valued (OLE DB)