Environnement d'exécution des traitements et MARS

Avec l'arrivée de Microsoft SQL Server 2005, il est possible de configurer les connexions de manière à prendre en charge MARS (Multiple Active Result Sets). Un environnement d'exécution de traitement est associé par défaut à ces connexions.

L'environnement d'exécution des traitements est constitué des composants suivants :

  • Valeurs de l'option SET (notamment ANSI_NULLS, DATE_FORMAT, LANGUAGE et TEXTSIZE)

  • Contexte de sécurité (rôle d'utilisateur ou d'application de l'environnement d'exécution des traitements)

  • Contexte de base de données (base de données actuelle de l'environnement)

  • Fonctions d'état d'exécution (notamment @@ERROR, @@ROWCOUNT, @@FETCH_STATUS et @@IDENTITY)

  • Tables temporaires de niveau supérieur

Chaque nouveau traitement dont l'exécution commence pour une connexion spécifique reçoit une copie de l'environnement par défaut. Chaque fois qu'un traitement est exécuté, toutes les modifications apportées à l'environnement d'exécution se limitent à ce traitement spécifique. Une fois l'exécution achevée, les paramètres d'exécution sont copiés dans l'environnement par défaut. Dans le cas où un traitement unique émet plusieurs commandes à exécuter de façon séquentielle, le comportement observé est le même que celui exposé par les connexions impliquant des clients ou des serveurs dans les versions précédentes de SQL Server.

Dans les versions précédentes de SQL Server, seul un traitement pouvait être exécuté à un moment donné. Par conséquent, les modifications apportées à l'environnement de traitement par un traitement étaient visibles par tous les traitements ultérieurs.

Dans le cas des procédures stockées et des fonctions, l'environnement par défaut d'un traitement est l'environnement par défaut de la connexion mais, à la fin de l'exécution, les modifications ne sont pas copiées dans l'environnement d'exécution de traitements par défaut de la connexion.

Par exemple, supposons l'exécution suivante de deux traitements :

--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

Supposons également que MARS soit activé pour la connexion avec utilisation de l'environnement d'exécution par défaut et attribution à SET ARITHABORT de la valeur OFF et à SET ANSI_WARNINGS de la valeur ON.

Si les deux traitements sont soumis simultanément pendant la connexion, leur exécution se base sur les paramètres de l'environnement de traitement par défaut de la connexion. Pendant l'exécution, leurs environnements sont délimités afin que les modifications d'environnement apportées dans un traitement n'affectent pas les modifications apportées dans l'autre traitement. À la fin de l'exécution d'un traitement, celui-ci copie l'environnement obtenu dans l'environnement par défaut de la connexion. L'environnement par défaut obtenu pour la connexion dépend du dernier traitement à exécuter. Il s'agira de l'environnement utilisé par le prochain traitement exécuté.