Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Aplica-se a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Sistema de Plataforma de Análise (PDW)
Base de dados SQL no Microsoft Fabric
O Driver OLE DB para SQL Server suporta dois modelos para o consumidor especificar dados para linhas de parâmetros com valores em tabelas: um modelo push e um modelo pull.
Observação
Uma coluna de parâmetros com valores de tabela deve ter valores não predefinidos em todas as linhas ou valores predefinidos em todas as linhas. Não é possível ter valores predefinidos em algumas linhas mas não noutras. Portanto, em ligações de parâmetros com valores em tabelas, os únicos valores de estado permitidos para dados de colunas de parâmetros com valores em tabela são DBSTATUS_S_ISNULL e DBSTATUS_S_OK. DBSTATUS_S_DEFAULT resultará numa falha e o valor de estado vinculado será definido para DBSTATUS_E_BADSTATUS.
Modelo Push (carrega todos os dados Table-Valued parâmetros na memória)
O modelo push é semelhante à utilização de conjuntos de parâmetros (ou seja, o parâmetro DBPARAMS em ICommand::Execute). O modelo push só é usado se objetos de conjunto de linhas de parâmetros com valores de tabela forem usados sem uma implementação personalizada de interfaces IRowset. O modelo push é recomendado quando o número de linhas no conjunto de parâmetros de tabela é pequeno e não se espera que coloque pressão excessiva na memória da aplicação. Isto é mais simples do que o modelo pull, porque não requer mais funcionalidades da aplicação de consumo do que o que é atualmente comum em aplicações OLE DB típicas.
Espera-se que o consumidor forneça todos os dados dos parâmetros de tabela ao fornecedor antes de executar um comando. Para fornecer os dados, o consumidor preenche um objeto de conjunto de linhas de parâmetros com valores de tabela para cada parâmetro com valores de tabela. O objeto conjunto de linhas com valores de tabela expõe as operações de Inserir, Definir e Eliminar o conjunto de linhas, que o consumidor utilizará para manipular os dados dos parâmetros com valores na tabela. O fornecedor irá buscar os dados deste objeto de linhas de parâmetros com valores de tabela no momento da execução.
Quando um objeto de conjunto de linhas com valor em tabela é fornecido ao consumidor, este pode processá-lo como um objeto de conjunto de linhas. O consumidor pode obter a informação de tipo de cada coluna (tipo, comprimento máximo, precisão e escala) utilizando o método de interface IColumnsInfo::GetColumnInfo ou IColumnsRowset::GetColumnsRowset. O consumidor cria então um acessório para especificar as ligações dos dados. O passo seguinte é inserir linhas de dados no conjunto de linhas de parâmetros com valores da tabela. Isto pode ser feito usando IRowsetChange::InsertRow. IRowsetChange::SetData ou IRowsetChange::D eleteRows também podem ser usados no objeto de conjunto de parâmetros de tabela se tiver de manipular os dados. Os objetos de conjunto de linhas de parâmetros com valores de tabela são contabilizados por referência, semelhante aos objetos de fluxo.
Se for usado IColumnsRowset::GetColumnsRowset, haverá chamadas subsequentes para os métodos IRowset::GetNextRows, IRowset::GetData e IRowset::ReleaseRows no objeto de conjunto de linhas da coluna resultante.
Depois de o Driver OLE DB para SQL Server começar a executar o comando, os valores dos parâmetros com valores de tabela serão recolhidos deste objeto de conjunto de parâmetros com valores de tabela e enviados para o servidor.
O modelo push requer trabalho mínimo por parte do consumidor, mas usa mais memória do que o modelo pull, porque todos os dados dos parâmetros com valores de tabela têm de estar em memória no momento da execução.
Modelo de Pull (Obtenção de Dados de Parâmetros Table-Valued a Pedido do Consumidor)
O modelo de puxada é útil para dois cenários:
Para as linhas de stream.
Se um conjunto de linhas de outro fornecedor estiver a ser usado como valor do parâmetro da tabela.
No modelo de pull, o consumidor fornece dados a pedido ao fornecedor. Use esta abordagem se a sua aplicação tiver muitas inserções de dados, e dados de conjuntos de linhas de parâmetros com valores de tabela na memória resultarem em acesso excessivo à memória. Se forem usados vários fornecedores OLE DB, o modelo de pull do consumidor permite ao consumidor fornecer qualquer objeto de conjunto de linhas como valor do parâmetro da tabela.
Para usar o modelo de pull, os consumidores têm de fornecer a sua própria implementação de um objeto de conjunto de linhas. Ao usar o modelo pull com conjuntos de linhas de parâmetros com valores de tabela (CLSID_ROWSET_TVP), o consumidor é obrigado a agregar o objeto de conjunto de linhas de parâmetros com valores de tabela que o fornecedor expõe através do método ITableDefinitionWithConstraints::CreateTableWithConstraints ou do método IOpenRowset::OpenRowset. Espera-se apenas que o objeto consumidor sobreponha a implementação da interface IRowset. Deve sobrescrever as seguintes funções:
IRowset::GetNextRows
IRowset::AddRefRows
IRowset::GetData
IRowset::ReleaseRows
IRowset::ReiniciarPosiçãoT
O Driver OLE DB para SQL Server lê uma ou mais linhas de cada vez a partir do objeto de conjunto de linhas do consumidor para suportar o comportamento de streaming em parâmetros com valores de tabela. Por exemplo, o utilizador pode ter os dados do conjunto de linhas de parâmetros com valores de tabela no disco (não na memória) e pode implementar a funcionalidade de ler dados do disco quando necessário pelo OLE DB Driver for SQL Server.
O consumidor irá comunicar o seu formato de dados ao OLE DB Driver para SQL Server usando IAccessor::CreateAccessor no objeto de parâmetros de tabela de linhas. Ao ler dados do buffer de consumidor, o fornecedor verifica que todas as colunas graváveis e não padrão estejam disponíveis através de pelo menos um handle de acesso e utiliza os handles correspondentes para ler os dados das colunas. Para evitar ambiguidade, deve haver uma correspondência bidirecional entre uma coluna de conjunto de linhas de parâmetros com valores de tabela e uma ligação. Duplicar ligações à mesma coluna resultará num erro. Além disso, espera-se que cada acessor tenha o membro iOrdinal de DBBindings em sequência. Haverá tantas chamadas para IRowset::GetData como o número de acessores por linha, e a ordem das chamadas será baseada na ordem do valor iOrdinal dos valores inferiores para os mais altos.
Espera-se que o fornecedor implemente a maioria das interfaces expostas pelo objeto de conjunto de linhas de parâmetros com valores de tabela. O consumidor irá implementar um objeto rowset com interfaces mínimas (IRowset). Devido à agregação cega, as restantes interfaces obrigatórias de objetos de conjunto de linhas serão implementadas pelo objeto de conjunto de linhas com valor de tabela de parâmetros.
Para qualquer outro objeto de conjunto de linhas, como objetos de conjunto de linhas obtidos para qualquer fornecedor de OLE DB, o conjunto de linhas fornecido pelo consumidor deve implementar todas as interfaces obrigatórias de objetos de conjunto de linhas conforme especificado na especificação OLE DB.
No momento da execução, o OLE DB Driver para SQL Server chama de volta ao objeto de linhas para obter linhas e ler dados das colunas.
Ver também
Table-Valued Parâmetros (OLE DB)
Usar Table-Valued Parâmetros (OLE DB)