Compartilhar via


Criação de conjunto de linhas de parâmetro com valor de tabela no SQL Server Native Client

Aplica-se a: SQL Server Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure PDW (Sistema de Plataforma de Análise) do Azure Synapse Analytics

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 do SQL Server Native Client permite que os consumidores criem um objeto de conjunto de linhas especializado sobre os dados na 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â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 do conjunto de linhas do 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 o status nulo, exclusivo, calculado e de atualização 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 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 tem informações de tipo, ele deve 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. Em seguida, o provedor OLE DB do SQL Server Native Client obtém as informações de tipo (informações e restrições de coluna) 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 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)