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
Os consumidores utilizam a interface IMultipleResults para processar resultados devolvidos pelo OLE DB Driver para a execução de comandos SQL Server. Quando o OLE DB Driver para SQL Server submete um comando para execução, o SQL Server executa as instruções e retorna quaisquer resultados.
Um cliente deve processar todos os resultados da execução de comandos. Como o Driver OLE DB para execução de comandos SQL Server pode gerar objetos de múltiplas linhas como resultados, utilize a interface IMultipleResults para garantir que a recuperação de dados da aplicação completa a viagem de ida e volta iniciada pelo cliente.
A seguinte instrução Transact-SQL gera múltiplos conjuntos de linhas, alguns contendo dados de linhas da tabela OrderDetails e outros com resultados da cláusula COMPUTE BY:
SELECT OrderID, FullPrice = (UnitPrice * Quantity), Discount,
Discounted = UnitPrice * (1 - Discount) * Quantity
FROM OrderDetails
ORDER BY OrderID
COMPUTE
SUM(UnitPrice * Quantity), SUM(UnitPrice * (1 - Discount) * Quantity)
BY OrderID
Se um consumidor executar um comando contendo este texto e solicitar um conjunto de linhas como interface de resultados retornados, apenas o primeiro conjunto de linhas é devolvido. O consumidor pode processar todas as linhas do conjunto de linhas devolvidas. Mas, se a propriedade da fonte de dados DBPROP_MULTIPLECONNECTIONS estiver definida para VARIANT_FALSE e o MARS não estiver ativado na ligação, nenhum outro comando pode ser executado no objeto de sessão (o Driver OLE DB para SQL Server não criará outra ligação) até que o comando seja cancelado. Se o MARS não estiver ativado na ligação, o Driver OLE DB para SQL Server devolve um erro de DB_E_OBJECTOPEN se DBPROP_MULTIPLECONNECTIONS estiver VARIANT_FALSE e devolve E_FAIL se houver uma transação ativa.
O Driver OLE DB para SQL Server também devolverá DB_E_OBJECTOPEN ao usar parâmetros de saída em fluxo e a aplicação não consumiu todos os valores dos parâmetros de saída retornados antes de chamar IMultipleResults::GetResults para obter o próximo conjunto de resultados. Se o MARS não estiver ativado e a ligação estiver ocupada a executar um comando que não produz um conjunto de linhas ou que produz um conjunto de linhas que não seja um cursor de servidor, e se a propriedade da fonte de dados DBPROP_MULTIPLECONNECTIONS estiver definida para VARIANT_TRUE, o Driver OLE DB para SQL Server cria ligações adicionais para suportar objetos de comando concorrentes, a menos que uma transação esteja ativa, caso em que devolve um erro. As transações e o bloqueio são geridos pelo SQL Server por cada ligação. Se for gerada uma segunda ligação, o comando nas ligações separadas não partilha bloqueios. Deve-se ter cuidado para garantir que um comando não bloqueia outro mantendo bloqueios nas linhas solicitadas pelo outro comando. Se o MARS estiver ativado, múltiplos comandos podem estar ativos nas ligações e, se forem usadas transações explícitas, todos os comandos partilham uma transação comum.
O consumidor pode cancelar o comando usando ISSAbort::Abort ou libertando todas as referências mantidas no objeto de comando e no conjunto de linhas derivado.
A utilização do IMultipleResults em todas as instâncias permite ao consumidor obter todos os conjuntos de linhas gerados pela execução de comandos e permite aos consumidores determinar adequadamente quando cancelar a execução de comandos e libertar um objeto de sessão para uso por outros comandos.
Observação
Quando usas cursores SQL Server, a execução de comandos cria o cursor. O SQL Server devolve sucesso ou falha na criação do cursor; portanto, a viagem de ida e volta até à instância do SQL Server está completa após o regresso da execução do comando. Cada chamada GetNextRows torna-se então uma viagem de ida e volta. Desta forma, podem existir múltiplos objetos de comando ativos, cada um a processar um conjunto de linhas que resulta de um fetch do cursor do servidor. Para mais informações, consulte Rowsets e SQL Server Cursors.