Partilhar via


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

Aplica-se a:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSistema de Plataforma de Análise (PDW)Base de dados SQL no Microsoft Fabric

Baixar driver OLE DB

Embora os consumidores possam fornecer qualquer objeto de conjunto de linhas para parâmetros com valores de tabela, os objetos típicos de conjunto de linhas são implementados contra armazenamentos de dados do back-end e, por isso, proporcionam desempenho limitado. Por esta razão, o OLE DB Driver para SQL Server permite aos consumidores criar um objeto de conjunto de linhas especializado sobre dados em memória. Este objeto especial de conjunto de linhas em memória é um novo objeto COM chamado conjunto de linhas de parâmetros com valores de tabela. Fornece funcionalidades semelhantes a conjuntos de parâmetros.

Os objetos de conjunto de linhas de parâmetros com valores de tabela são criados explicitamente pelo consumidor para parâmetros de entrada através de múltiplas interfaces ao nível da sessão. Há uma instância de um objeto de conjunto de linhas com valor de tabela por parâmetro com valor de tabela. O consumidor pode criar os objetos do conjunto de linhas de parâmetros com valores de tabela fornecendo informação de metadados já conhecida (cenário estático), ou descobrindo-a através de interfaces de fornecedores (cenário dinâmico). As secções seguintes descrevem estes dois cenários.

Cenário Estático

Quando a informação do tipo é conhecida, o consumidor usa ITableDefinitionWithConstraints::CreateTableWithConstraints para instanciar um objeto de conjunto de linhas de parâmetros 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 valores de tabela que o consumidor pretende instanciar. O campo eKind será definido para DBKIND_GUID_NAME. Este nome é necessário quando a instrução é SQL ad hoc; O nome é opcional se for uma chamada de procedimento.

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

As propriedades do objeto de rowset com valores de tabela são apenas leitura, pelo que o consumidor não é esperado que defina quaisquer propriedades em rgPropertySets.

Para o membro rgPropertySets de cada estrutura DBCOLUMNDESC, o consumidor pode especificar propriedades adicionais para cada coluna. Estas propriedades pertencem ao conjunto de propriedades DBPROPSET_SQLSERVERCOLUMN. Permitem-te especificar as definições computadas e predefinidas para cada coluna. Também suportam propriedades de coluna existentes, como nulidade e identidade.

Para recuperar informação correspondente de um objeto de conjunto de parâmetros com valores de tabela, o consumidor utiliza IRowsetInfo::GetProperties.

Para obter informações sobre o estado nulo, único, computado e de atualização de cada coluna, o consumidor pode usar IColumnsRowset::GetColumnsRowset ou IColumnsInfo::GetColumnInfo. Estes métodos fornecem informação detalhada sobre cada coluna de conjunto de linhas de parâmetros com valores de tabela.

O consumidor especifica o tipo de cada coluna do parâmetro com valor na tabela. É semelhante à forma 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âmetros com valores de tabela a partir do OLE DB Driver para SQL Server através do parâmetro de saída ppRowset .

Cenário Dinâmico

Quando o consumidor não tem informação de tipo, deve usar IOpenRowset::OpenRowset para instanciar objetos de rowset de parâmetros com valores de tabela. Tudo o que o consumidor tem de fornecer ao fornecedor é o nome do tipo.

Neste cenário, o fornecedor obtém informação de tipo sobre um objeto de conjunto de linhas de parâmetros com valores de tabela do servidor em nome do consumidor.

Os parâmetros pTableID e pUnkOuter devem ser definidos como no cenário estático. O Driver OLE DB para SQL Server obtém então a informação do tipo (informação da coluna e restrições) do servidor e devolve um objeto de conjunto de linhas com valor de tabela através do parâmetro ppRowset . Esta operação requer comunicação com o servidor e, por isso, não funciona tão bem como o cenário estático. O cenário dinâmico funciona apenas com chamadas de procedimentos parametrizados.

Ver também

Table-Valued Parâmetros (OLE DB)
Usar Table-Valued Parâmetros (OLE DB)