Traitements

Un lot est un groupe d'instructions Transact-SQL qu'une application envoie simultanément à SQL Server en vue de leur exécution. SQL Server compile les instructions d'un lot en une unité exécutable unique, appelée plan d'exécution. Les instructions appartenant à un plan d'exécution sont ensuite exécutées simultanément.

Chaque instruction Transact-SQL doit se terminer par un point-virgule. Cette spécification n'est pas appliquée, mais la possibilité de ne pas terminer une instruction par un point-virgule est désapprouvée et peut être supprimée dans une version ultérieure de MicrosoftSQL Server.

Une erreur de compilation, comme une erreur de syntaxe, empêche la compilation du plan d'exécution. En conséquence, aucune instruction du traitement n'est exécutée.

Une erreur au moment de l'exécution, tel qu'un débordement arithmétique ou une violation de contrainte, entraîne l'un des effets suivants :

  • La plupart des erreurs d'exécution interrompent l'instruction en cours ainsi que celles qui la suivent dans le traitement.

  • Quelques erreurs d'exécution, telles que les violations de contraintes, n'interrompent que l'instruction en cours. Toutes les instructions restantes dans le traitement sont exécutées.

Les instructions exécutées avant celle ayant rencontré l'erreur d'exécution ne sont pas affectées. La seule exception s'applique lorsque le traitement se trouve dans une transaction et que l'erreur provoque l'annulation de celle-ci (rollback). Dans ce cas, toutes les modifications de données non validées et effectuées avant l'erreur d'exécution sont annulées.

Supposons, par exemple, qu'un traitement comporte 10 instructions. Si la cinquième instruction comporte une erreur de syntaxe, aucune des instructions du traitement ne sera exécutée. Si le traitement est compilé et que la seconde instruction échoue pendant son exécution, les résultats de la première instruction ne sont pas affectés, car elle a déjà été exécutée.

SQL Server fournit une recompilation au niveau de l'instruction. Autrement dit, si une instruction déclenche une recompilation, seule cette instruction fait l'objet d'une recompilation, et non la totalité du traitement. Ce comportement diffère de SQL Server 2000. Imaginons l'exemple suivant, qui contient une instruction CREATE TABLE et quatre instructions INSERT dans le même traitement.

CREATE TABLE dbo.t3(a int) ;
INSERT INTO dbo.t3 VALUES (1) ;
INSERT INTO dbo.t3 VALUES (1,1) ;
INSERT INTO dbo.t3 VALUES (3) ;
GO

SELECT * FROM dbo.t3 ;

D'abord, le traitement est compilé. L'instruction CREATE TABLE est compilée, mais comme la table dbo.t3 n'existe pas encore, les instructions INSERT ne sont pas compilées.

Puis, l'exécution du traitement démarre. La table est créée. La première instruction INSERT est compilée, puis immédiatement exécutée. La table possède désormais une ligne. Ensuite, la deuxième instruction INSERT est compilée. La compilation échoue, et le traitement se termine. L'instruction SELECT retourne une seule ligne.

Dans SQL Server 2000, le traitement commence à s'exécuter et la table est créée. Les trois instructions INSERT sont compilées l'une après l'autre, mais ne sont pas exécutées. Comme la deuxième instruction INSERT a provoqué une erreur de compilation, l'ensemble du traitement est terminé. L'instruction SELECT ne retourne aucune ligne.

Règles d'utilisation des traitements

Les règles suivantes s'appliquent à l'utilisation des traitements :

  • Les instructions CREATE DEFAULT, CREATE FUNCTION, CREATE PROCEDURE, CREATE RULE, CREATE SCHEMA, CREATE TRIGGER et CREATE VIEW ne peuvent pas être combinées avec d'autres instructions dans un traitement. L'instruction CREATE doit démarrer le traitement. Toutes les autres instructions qui suivent dans ce traitement seront interprétées comme une partie de la définition de la première instruction CREATE.

  • Dans le même traitement, vous ne pouvez pas modifier une table puis faire référence aux nouvelles colonnes.

  • Si une instruction EXECUTE est la première instruction d'un traitement, le mot clé EXECUTE n'est pas nécessaire. Le mot clé EXECUTE n'est nécessaire que si l'instruction EXECUTE n'est pas la première instruction du traitement.

Important

Les fichiers du traitement peuvent contenir des informations d'identification stockées en texte brut. Ces informations peuvent s'afficher sur l'écran de l'utilisateur pendant l'exécution du traitement.