Criação do conjunto de linhas do parâmetro com valor de tabela
Embora os consumidores possam fornecer qualquer objeto do conjunto de linhas a parâmetros com valor de tabela, objetos do conjunto de linhas típicos são implementados com relação a armazenamentos de dados de back-end e, portanto, fornecem desempenho limitado. Por isso, o provedor OLE DB do SQL Server Native Client permite que os consumidores criem um objeto de conjunto de linhas especializado sobre os dados da memória. Esse objeto do conjunto de linhas especial na memória é um novo objeto COM denominado conjunto de linhas do parâmetro com valor de tabela. Ele fornece funcionalidade semelhante para conjuntos de parâmetro.
Os objetos do conjunto de linhas do parâmetro com valor de tabela são criados explicitamente pelo consumidor para parâmetros de entrada por meio de várias interfaces no nível da sessão. Há uma instância de um objeto do conjunto de linhas do parâmetro com valor de tabela por parâmetro com valor de tabela. O consumidor pode criar os objetos do conjunto de linhas do parâmetro com valor de tabela fornecendo informações de metadados já conhecidas (cenário estático) ou descobrindo-as por meio das interfaces do provedor (cenário dinâmico). As seções a seguir descrevem estes 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 conjunto de linhas do parâmetro com valor de tabela que corresponda a um parâmetro com valor de tabela.
O campo guid (parâmetropTableID ) contém a GUID especial (CLSID_ROWSET_TVP). O membro pwszName contém o nome do tipo de parâmetro com valor de tabela para o qual o consumidor deseja criar uma instância. O campo eKind será definido como DBKIND_GUID_NAME. Esse nome é necessário quando a instrução for ad hoc SQL; o nome é opcional, se for uma chamada de procedimento.
Para agregação, o consumidor transmite o parâmetro pUnkOuter com o controlador IUnknown.
As propriedades do objeto do conjunto de linhas do parâmetro com valor de tabela são somente leitura, portanto não é esperado que o consumidor defina propriedades 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 de cada coluna. Elas também dão suporte a propriedades de coluna existentes, como nulidade e identidade.
Para recuperar informações correspondentes de um objeto do conjunto de linhas do parâmetro com valor de tabela, o consumidor usa IRowsetInfo::GetProperties.
Para recuperar informações sobre 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 do conjunto de linhas do parâmetro com valor de tabela.
O consumidor especifica o tipo de cada coluna do parâmetro com valor de tabela. Esse procedimento é semelhante à forma de especificação de colunas quando uma tabela é criada no SQL Server. O consumidor obtém um objeto do conjunto de linhas do parâmetro com valor de tabela do provedor OLE DB do SQL Server Native Client Provedor por meio do parâmetro de saída ppRowset.
Cenário dinâmico
Quando o consumidor não tiver informações de tipo, deve usar IOpenRowset::OpenRowset para criar uma instância dos objetos do conjunto de linhas do parâmetro com valor de tabela. O consumidor deve fornecer ao provedor somente o nome do tipo.
Nesse cenário, o provedor obtém as informações de tipo sobre um objeto do conjunto de linhas do 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 então as informações de tipo (informações e restrições da coluna) do servidor e retorna um objeto do conjunto de linhas do 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 tem desempenho tão satisfatório quanto no cenário estático. O cenário dinâmico funciona somente com chamadas de procedimento com parâmetros.
Consulte também
Tarefas
Usar Parâmetros com valor de tabela (OLE DB)