Ambiente de execução em lote e MARS

A partir do Microsoft SQL Server 2005, podem ser habilitadas conexões para oferecer suporte a vários conjuntos de resultados ativos (MARS). Essas conexões têm ambiente de execução em lote padrão associado.

O ambiente de execução em lote é composto pelos seguintes componentes:

  • Valores de opção SET (incluindo ANSI_NULLS, DATE_FORMAT, LANGUAGE e TEXTSIZE)

  • Contexto de segurança (a função do usuário ou do aplicativo do ambiente de execução em lote)

  • Contexto do banco de dados (o banco de dados atual do ambiente)

  • Funções de estado de execução (incluindo @@ERROR, @@ROWCOUNT, @@FETCH_STATUS e @@IDENTITY)

  • Tabelas temporárias de alto nível

Cada lote novo que inicia a execução de uma conexão específica recebe uma cópia do ambiente padrão. Sempre que um lote é executado, todas as alterações feitas no ambiente de execução são colocadas no escopo daquele lote específico. Quando a execução é concluída, as configurações de execução são copiadas no ambiente padrão. No caso de um único lote que envia vários comandos a serem executados consecutivamente, o comportamento observado é o mesmo que o descrito pelas conexões que envolvem clientes ou servidores de versões anteriores do SQL Server.

Nas versões anteriores do SQL Server apenas um lote pode podia ser executado por vez. Portanto, as mudanças feitas ao ambiente de lote por um lote eram visíveis a todos os lotes subseqüentes.

Para procedimentos armazenados e funções, o ambiente padrão de um lote é o padrão para a conexão, mas quando a execução é concluída, as alterações não são copiadas novamente no ambiente de execução em lote padrão.

Por exemplo, assuma que dois lotes são executados como segue:

--First Batch
SET ARITHABORT ON
SET ANSI_WARNINGS ON
SELECT 1/0
GO
--Second Batch
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
SELECT 1/0
GO

Assuma também que os MARS estão habilitados para a conexão com o ambiente de execução padrão, com SET ARITHABORT configurado como OFF e SET ANSI_WARNINGS configurado como ON.

Se ambos os lotes forem enviados simultaneamente na conexão, eles iniciarão a execução com as configurações do ambiente de lote padrão da conexão. Durante a execução, seus ambientes são colocados no escopo para garantir que as mudanças de ambiente em um lote não afetem as mudanças no outro lote. Quando um lote conclui a execução, ele copia o ambiente resultante no padrão da conexão. O ambiente padrão resultante da conexão depende do último lote para concluir a execução. Esse será o ambiente utilizado pelo próximo lote a ser executado.