Compartilhar via


Criação do conjunto de linhas do parâmetro Table-Valued no SQL Server Native Client

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada de SQL do AzureAzure Synapse AnalyticsPDW (Analytics Platform System)

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 esse motivo, o provedor OLE DB SQL Server Native Client permite que os consumidores criem um objeto de conjunto de linhas especializado sobre os dados na memória. Esse 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 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âmetro pTableID) 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 rowset de parâmetro com valor de tabela são somente leitura, portanto, não se espera que o consumidor defina 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 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 os status nulos, exclusivos, computados e atualizados 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. Isso é semelhante a como as colunas são especificadas quando uma tabela é criada em SQL Server. O consumidor obtém um objeto de conjunto de linhas de parâmetro com valor de tabela do provedor OLE DB 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. 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 SQL Server Native Client Provedor OLE DB 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 tem desempenho tão bom quanto no cenário estático. O cenário dinâmico só funciona com chamadas de procedimento com parâmetros.

Consulte Também

Parâmetros com valor de tabela (OLE DB)
Usar Parâmetros com valor de tabela (OLE DB)