Cursus
T-SQL (Transact-SQL) est l’extension de SQL standard par Microsoft, conçue spécifiquement pour Microsoft SQL Server. Tout en conservant les fonctionnalités essentielles de SQL pour interroger et gérer les données, T-SQL ajoute des capacités de programmation procédurale qui vous permettent d’écrire une logique de base de données plus puissante et dynamique.
Dans ce guide, je vous montre le fonctionnement de T-SQL et comment l’utiliser efficacement dans des contextes concrets. Nous aborderons aussi des cas d’usage courants comme l’interrogation des bases, l’écriture de procédures stockées et l’automatisation de tâches récurrentes, avec des exemples pratiques.
Si vous débutez en SQL, commencez par notre cours Introduction to SQL, ou le cours Intermediate SQL si vous avez déjà quelques bases. Par ailleurs, notre fiche mémo SQL Basics à télécharger est une excellente référence : elle regroupe les fonctions SQL les plus courantes.
Qu’est-ce que T-SQL et en quoi diffère-t-il de SQL
Pour mieux comprendre T-SQL, pensez à SQL comme à une langue universelle, et à T-SQL comme à un dialecte professionnel spécialisé.
SQL (Structured Query Language) est le langage standard pour interagir avec les bases de données relationnelles. Il est déclaratif : vous indiquez le résultat souhaité (sélectionner, filtrer…), et le moteur de base de données choisit comment exécuter la requête.
T-SQL, de son côté, est l’extension de SQL par Microsoft, utilisée dans Microsoft SQL Server. Elle enrichit SQL standard avec des capacités procédurales qui permettent de contrôler l’exécution des opérations étape par étape.
Concrètement, T-SQL introduit plusieurs fonctionnalités puissantes au-delà des requêtes de base, notamment :
-
Variables : vous pouvez utiliser les mots-clés
DECLAREetSETpour stocker des données en mémoire et les réutiliser dans vos scripts. -
Contrôle de flux : vous pouvez utiliser des instructions comme
IF,WHILEetBEGIN...ENDpour piloter l’exécution et décider quel code s’exécute. -
Gestion des erreurs : T-SQL introduit les blocs
TRY...CATCH, qui permettent d’intercepter une erreur et de la traiter proprement sans interrompre toute l’opération. -
Procédures stockées : vous pouvez créer des blocs de logique réutilisables qui s’exécutent côté base de données.
Si vous travaillez avec SQL Server, DataCamp propose de nombreuses ressources utiles. Pour commencer, je vous recommande le cours Introduction to SQL Server pour maîtriser les fondamentaux de SQL Server appliqués à l’analyse de données.
Syntaxe et structure de base de T-SQL
T-SQL reprend la syntaxe centrale de SQL standard, donc si vous connaissez déjà SQL, vous le comprendrez rapidement. Dans cette section, je passe en revue les instructions T-SQL les plus courantes à travers des exemples simples et concrets.
SELECT, INSERT, UPDATE, DELETE
Ces commandes sont standard dans la plupart des dialectes SQL, y compris Microsoft SQL Server, pour lequel T-SQL est conçu.
SELECT
Commande utilisée pour récupérer des données de tables spécifiques. Par exemple, la requête ci-dessous récupère FirstName et LastName depuis la table Customers.
-- Retrieve data from the Customers table
SELECT FirstName, LastName
FROM Customers
WHERE Country = ‘USA’; -- Filters rows to only customers in the USA
INSERT
Cette commande insère de nouvelles données dans une table. La requête ci-dessous insère une nouvelle ligne dans la table customers.
-- Insert a new row into a table
INSERT INTO customers (FirstName, city)
VALUES (‘Alice’, ‘Nairobi’);
UPDATE
Cette commande modifie des données existantes dans la base. Par exemple, la requête ci-dessous remplace la valeur de la ville par « Mombasa » pour l’utilisatrice « Alice ».
-- Update existing data
UPDATE customers
SET city = ‘Mombasa’
WHERE FirstName= ‘Alice’; -- Always use WHERE to avoid updating all rows
DELETE
Cette commande supprime des données de la base. Par exemple, la requête ci-dessous supprime la ligne où FirstName vaut « Alice ».
-- Delete data from a table
DELETE FROM customers
WHERE FirstName= ‘Alice’; -- Filters which rows to remove
Je vous recommande notre parcours de compétences SQL Server Fundamentals pour aller plus loin sur la synthèse et l’analyse de données avec les fonctions de SQL Server.
Exécution par lots
Une particularité de T-SQL est l’exécution du code par lots. Un lot regroupe une ou plusieurs instructions SQL envoyées à SQL Server comme une seule unité.
Le mot-clé GO sert à séparer les lots :
-- First batch
SELECT * FROM Customers;
GO
-- Second batch (executed separately)
SELECT * FROM Orders;
GO
À retenir :
-
GOn’est pas une commande T-SQL, mais il est reconnu par des outils comme SQL Server Management Studio. -
Il marque la fin d’un lot et le début d’un autre.
-
Les variables ne persistent pas d’un lot à l’autre. En revanche, les objets temporaires persistent entre lots au sein de la même session.
Commentaires et formatage
Vous pouvez ajouter des commentaires en T-SQL pour rendre votre code plus lisible et facile à maintenir. Utilisez des commentaires sur une ligne ou sur plusieurs lignes comme ci-dessous :
-- This query retrieves all customers
SELECT * FROM Customers;
/* This query retrieves customers
from the USA and Canada */
SELECT *
FROM Customers
WHERE Country IN ('USA', 'Canada');
Variables et types de données dans T-SQL
T-SQL permet de stocker des valeurs dans des variables et de les utiliser dans vos requêtes, ce qui rend vos scripts plus flexibles et dynamiques. Voyons comment créer ces variables.
Déclarer des variables
Pour créer une variable, utilisez le mot-clé DECLARE. Par convention, tous les noms de variables T-SQL commencent par le symbole @.
-- Declares a variable to store text
DECLARE @CustomerName VARCHAR(50);
Affecter des valeurs
Vous pouvez affecter des valeurs avec SET (recommandé pour une seule valeur) ou SELECT (utile pour récupérer depuis une table).
-- Assign using SET
SET @CustomerName = 'Alice';
-- Assign using SELECT
SELECT @Age = 30;
Par exemple, la requête ci-dessous renvoie la liste des clients qui vivent à Londres, en utilisant une variable au lieu de coder la valeur en dur.
-- Assign the variable city
DECLARE @City VARCHAR(50);
SET @City = 'London';
-- Use the variable in a query
SELECT name, city
FROM customers
WHERE city = @City; -- Filters results based on variable value
Types de données courants
Voici quelques types de données T-SQL fréquemment utilisés, communs aux types de données SQL :
-
INT: nombres entiers, par exemple 1, 100. -
VARCHAR(n): texte de longueur variable (noms, e-mails…). -
DATETIME: valeurs de date et d’heure. -
DECIMAL(p, s): nombres à précision fixe (par exemple, des montants).
Contrôle de flux dans T-SQL (IF, WHILE, BEGIN...END)
L’un des atouts de T-SQL est d’ajouter de la logique de programmation à vos requêtes. Au-delà de la simple récupération de données, vous pouvez maîtriser comment et quand le code s’exécute. Voici quelques exemples de contrôle de flux.
IF...ELSE (exécution conditionnelle)
L’instruction IF vous permet d’exécuter un bloc de code seulement si une condition est remplie. Si la condition est fausse, utilisez ELSE pour définir une action alternative.
Par exemple, la requête ci-dessous compte le nombre total de commandes, puis affiche « High order volume » au-delà de 100 commandes, ou « Low order volume » en dessous de 100.
DECLARE @TotalOrders INT;
SELECT @TotalOrders = COUNT(*)
FROM Orders; -- Count total number of orders
IF @TotalOrders > 100
BEGIN
PRINT 'High order volume'; -- Runs if condition is true
END
ELSE
BEGIN
PRINT 'Low order volume'; -- Runs if condition is false
END
Boucles WHILE (logique itérative)
La boucle WHILE répète un bloc tant qu’une condition reste vraie. Utile pour traiter par « lots » ou générer des données de test.
Ici, la requête initialise un compteur à 1, affiche sa valeur et l’incrémente jusqu’à 5.
DECLARE @Counter INT = 1;
WHILE @Counter <= 5
BEGIN
PRINT @Counter; -- Prints numbers from 1 to 5
SET @Counter = @Counter + 1; -- Increment counter
END
BEGIN...END (regrouper des instructions)
Le bloc BEGIN...END regroupe plusieurs instructions afin qu’elles s’exécutent ensemble de manière atomique.
Par exemple, la requête ci-dessous affichera à la fois « Customers found in USA » et « Proceeding with operation. ». Sans BEGIN...END, seule la première instruction après IF s’exécuterait.
IF EXISTS (SELECT 1 FROM Customers WHERE Country = 'USA')
BEGIN
PRINT 'Customers found in USA';
PRINT 'Proceeding with operation'; -- Both statements run together
END
Quand utiliser le contrôle de flux ?
Le contrôle de flux en T-SQL sert couramment à :
- Automatisation : exécuter des scripts planifiés ou des tâches de maintenance
- Validation des données : vérifier des conditions avant insertion ou mise à jour
- Traitement par lots : gérer les données par étapes ou en boucle
- Règles métiers : appliquer la logique directement dans la base
Procédures stockées en T-SQL
Une procédure stockée est un ensemble d’instructions T-SQL enregistré et réutilisable. Au lieu d’envoyer à chaque fois un bloc de code volumineux depuis votre application, vous enregistrez ce code sur le serveur et ne faites qu’appeler son nom.
Les procédures stockées sont utiles car vous pouvez les réutiliser de nombreuses fois. Les plans d’exécution précompilés améliorent les performances et masquent une logique complexe derrière une interface simple.
Par exemple, cette procédure stockée récupère le prénom et le nom d’un client à partir de l’ID fourni.
-- Create a stored procedure named GetCustomerByID
CREATE PROCEDURE GetCustomerByID
@CustomerID INT -- Input parameter to pass a customer ID
AS
BEGIN
-- Select the first and last name of a customer
SELECT FirstName, LastName
FROM Customers
WHERE CustomerID = @CustomerID; -- Filter to match the given ID
END;
Vous pouvez ensuite exécuter la procédure stockée avec la requête ci-dessous :
-- Calls the procedure
EXEC GetCustomerByID @CustomerID = 1; Obtenez une certification SQL de haut niveau
Fonctions dans T-SQL
T-SQL inclut des fonctions intégrées et des fonctions définies par l’utilisateur (UDF) pour transformer les données.
Fonctions intégrées
Ces fonctions sont disponibles nativement dans SQL Server et s’utilisent directement dans les requêtes.
Fonction de chaîne
Transforme des types texte. Par exemple, la requête ci-dessous récupère tous les prénoms de la table Customers et les convertit en majuscules.
-- Converts text to uppercase
SELECT UPPER(FirstName)
FROM Customers;
Fonction de date
Transforme ou renvoie des informations de date. La requête ci-dessous renvoie la date et l’heure système actuelles.
-- Returns current date and time
SELECT GETDATE();
Fonction d’agrégation
Ces fonctions agrègent des valeurs d’une table. Par exemple, la requête ci-dessous compte le nombre total de lignes (clients) dans la table Customers.
-- Counts rows
SELECT COUNT(*) AS TotalCustomers
FROM Customers;
Fonctions définies par l’utilisateur (UDF)
Vous pouvez aussi créer vos propres fonctions pour réutiliser une logique dans plusieurs requêtes.
Fonction scalaire
Une fonction scalaire renvoie une valeur unique et s’avère utile pour des calculs ou des formats spécifiques. Dans l’exemple ci-dessous, la fonction prend un prénom et un nom en entrée et renvoie le nom complet.
-- Create a function that combines the first and last name
CREATE FUNCTION GetFullName
(@FirstName VARCHAR(50), @LastName VARCHAR(50))
RETURNS VARCHAR(100)
AS
BEGIN
RETURN @FirstName + ' ' + @LastName; -- Concatenates the two values
END;
Fonctions renvoyant une table
Les fonctions table retournent une table. Par exemple, la fonction ci-dessous renvoie la table de tous les clients appartenant au pays indiqué.
-- Create a table-valued function named GetCustomersByCountry
CREATE FUNCTION GetCustomersByCountry (@Country VARCHAR(50))
RETURNS TABLE -- Specifies that the function returns a table
AS
RETURN
(
-- Select all columns from the Customers table
SELECT *
FROM Customers
WHERE Country = @Country -- Filter rows by the given country
);
Je vous recommande notre parcours métier complet SQL Server Developer, qui vous donnera non seulement les compétences pour créer, mettre à jour et exécuter des procédures stockées, mais aussi pour utiliser les fonctions d’agrégation, réaliser des jointures, insérer et supprimer des lignes, et bien plus.
Gestion des erreurs dans T-SQL
T-SQL utilise les blocs TRY...CATCH pour gérer les erreurs sans interrompre l’ensemble du script. C’est essentiel pour éviter les plantages inattendus et renvoyer des messages utiles pour le débogage ou la journalisation.
Par exemple, la requête ci-dessous tente un calcul provoquant une erreur, l’intercepte et affiche un message lisible au lieu de planter.
BEGIN TRY
-- Attempt to run this code
SELECT 1 / 0; -- This causes a divide-by-zero error
END TRY
BEGIN CATCH
-- Runs if an error occurs in the TRY block
PRINT 'An error occurred: ' + ERROR_MESSAGE(); -- Displays the error message
END CATCH;
Transactions dans T-SQL
Une transaction garantit qu’un ensemble d’opérations réussit entièrement ou échoue entièrement. Elle suit le principe ACID et assure la cohérence de la base, même en cas d’interruption en cours d’opération.
Dans l’exemple ci-dessous, la transaction transfère de l’argent d’un compte à un autre et enregistre les deux modifications simultanément.
BEGIN TRANSACTION; -- Start the transaction
-- Deduct money from Account 1
UPDATE Accounts
SET Balance = Balance - 100
WHERE AccountID = 1;
-- Add money to Account 2
UPDATE Accounts
SET Balance = Balance + 100
WHERE AccountID = 2;
COMMIT; -- Save all changes permanently
En cas de problème, vous pouvez utiliser ROLLBACK pour annuler la transaction et restaurer l’état précédent des données.
-- Undo all changes made in the current transaction
ROLLBACK;
Les transactions en T-SQL sont cruciales pour garantir l’intégrité des données, en particulier dans des systèmes critiques comme les applications financières, où des mises à jour partielles créeraient des incohérences.
Testez notre parcours Transactions and Error Handling in SQL Server, qui couvre les transactions et la gestion des erreurs dans SQL Server.
Fonctionnalités T-SQL utiles pour l’analyse de données
T-SQL propose des outils particulièrement utiles aux professionnels de la donnée. Voyons quelques exemples et leur application en analyse.
Fonctions de fenêtre
Les fonctions de fenêtre effectuent des calculs sur plusieurs lignes sans les regrouper en un seul résultat. Elles servent surtout au classement, aux cumuls et à des analyses avancées.
Dans l’exemple ci-dessous, la requête attribue un numéro de ligne unique à chaque client selon son CustomerID.
-- Assigns row numbers to customers
SELECT
FirstName,
ROW_NUMBER() OVER (ORDER BY CustomerID) AS RowNum -- Assigns row numbers
FROM Customers;
Dans cette requête :
-
ROW_NUMBER() : attribue des numéros de ligne uniques
-
RANK(): attribue un rang avec des écarts en cas d’égalité -
OVER(): définit la fenêtre (ordre/partition)
Je vous conseille de télécharger notre SQL Window Functions Cheat Sheet, un mémo pratique sur les différents types de fonctions de fenêtre en SQL. Consultez également le cours Intermediate SQL Server pour apprendre à utiliser T-SQL en analyse de données, notamment les fonctions de fenêtre pour synthétiser des résultats.
Expressions de table communes (CTE)
Les CTE (Common Table Expressions) créent un jeu de résultats temporaire réutilisable dans une requête. La requête ci-dessous crée une liste temporaire de clients aux États-Unis, puis interroge cette liste.
-- Define a CTE
WITH CustomerCTE AS (
SELECT FirstName, Country
FROM Customers
WHERE Country = 'USA' -- Filter only USA customers
)
-- Query the CTE
SELECT *
FROM CustomerCTE;
Les CTE récursives, quant à elles, se référencent elles-mêmes dans leur définition pour réaliser des opérations répétées. Elles sont idéales pour manipuler des données hiérarchiques, comme des organigrammes.
Je vous recommande le cours Hierarchical and Recursive Queries in SQL Server pour apprendre à écrire des requêtes avancées dans SQL Server, y compris avec des CTE et CTE récursives, à travers des exemples concrets.
Tables temporaires
Les tables temporaires stockent des données à court terme pendant une session. Elles sont utiles pour la mise en scène de données, la simplification de transformations en plusieurs étapes ou l’optimisation de requêtes complexes.
Pour illustrer le fonctionnement des tables temporaires en T-SQL, considérez les trois blocs suivants : le premier crée une table temporaire, le second l’alimente avec des données clients, puis le troisième l’interroge dans la même session.
-- Create a temporary table
CREATE TABLE #TempCustomers (
FirstName VARCHAR(50),
Country VARCHAR(50)
);
-- Insert data into the temporary table
INSERT INTO #TempCustomers
SELECT FirstName, Country
FROM Customers;
-- Retrieve data from the temporary table
SELECT * FROM #TempCustomers;
Notez que les tables temporaires sont préfixées par # et sont automatiquement supprimées à la fin de la session.
T-SQL vs. autres dialectes SQL
Tous les dialectes SQL partagent des bases communes, mais chaque système ajoute sa propre syntaxe et ses fonctionnalités. T-SQL est conçu pour Microsoft SQL Server, ce qui influence son fonctionnement et ses principaux cas d’usage.
T-SQL vs. PostgreSQL (PL/pgSQL)
PostgreSQL utilise PL/pgSQL pour la logique procédurale, similaire à T-SQL mais avec une syntaxe et des atouts différents. Le tableau ci-dessous résume ces différences :
|
Catégorie |
T-SQL (SQL Server) |
PostgreSQL (PL/pgSQL) |
|
Langage procédural |
Intégré à T-SQL |
Utilise PL/pgSQL |
|
Syntaxe des variables |
|
|
|
Nommage des variables |
Préfixe |
Pas de préfixe (par ex. |
|
Structure de bloc |
Plus simple, souvent implicite ou |
Explicite : nécessite |
|
Exemple de bloc |
Lot T-SQL standard |
Encapsulé dans |
|
Types de données avancés |
Plus limités |
Prise en charge native avancée (JSONB, tableaux, géométrie) |
|
Outils et intégration |
Intégration étroite avec les outils SQL Server |
Souple et multiplateforme |
|
Écosystème |
Optimisé pour Windows, Azure, SSMS et Power BI |
Open source, multiplateforme |
Découvrez notre parcours de compétences SQL for Database Administrators pour apprendre à concevoir des bases relationnelles et structurer vos requêtes afin d’améliorer les performances.
T-SQL vs. MySQL
MySQL prend également en charge la logique procédurale, mais de manière plus simple et plus limitée. Le tableau ci-dessous compare la syntaxe et les fonctionnalités de ces deux dialectes.
|
Catégorie |
T-SQL (Microsoft) |
MySQL |
|
Limitation du nombre de lignes |
|
|
|
Gestion des erreurs |
Blocs |
Syntaxe DECLARE HANDLER plus limitée |
|
Logique procédurale |
Riche, structurée et très programmable |
Fonctionnalités procédurales plus simples et limitées |
|
Analytique |
Fonctions de fenêtre et CTE |
Fonctionnalités analytiques de base (en progrès dans les versions récentes) |
|
Écosystème |
Lié à SQL Server et aux outils Enterprise |
Léger ; cœur de la pile LAMP (Linux, Apache, etc.) |
|
Idéal pour |
Logique métier complexe et data warehousing |
Applications web et lectures à grande vitesse |
Cas d’usage concrets de T-SQL
T-SQL va bien au-delà des requêtes simples. Voici des exemples où je le trouve particulièrement utile en tant que professionnel de la donnée.
Requêtes de reporting
T-SQL est couramment utilisé pour générer des rapports directement depuis la base. Par exemple, agréger les ventes par région ou classer les produits les plus performants à l’aide de fonctions de fenêtre.
Processus ETL (Extract, Transform, Load)
Les ingénieurs données utilisent T-SQL dans les pipelines pour préparer et déplacer les données : extraire depuis des tables de staging, transformer les formats, corriger les incohérences et charger dans des tables de reporting finales.
Scripts de nettoyage des données
Si votre base contient des millions de lignes avec des adresses incohérentes, un script T-SQL avec des boucles WHILE ou des CTE peut identifier les doublons, remplir les valeurs manquantes ou standardiser les formats.
Logique backend dans les applications
De nombreuses applications s’appuient sur T-SQL pour la logique métier côté base. Vous pouvez utiliser des procédures stockées pour les opérations CRUD, effectuer des validations avant insertion, ou gérer des transactions pour les opérations critiques.
Erreurs courantes et bonnes pratiques
Bien que T-SQL soit très utile pour des requêtes avancées, vous risquez de rencontrer quelques écueils. Voici des erreurs fréquentes que j’ai observées en utilisant T-SQL :
-
Abuser des boucles plutôt que de la logique ensembliste : les boucles, comme
WHILE, pour traiter ligne par ligne, dégradent les performances. SQL est conçu pour travailler sur des ensembles de données. -
Mauvaise utilisation des index : des index mal exploités peuvent rendre les requêtes lentes, surtout sur de grandes tables.
-
Oublier les transactions : exécuter plusieurs opérations liées sans les encapsuler dans une transaction peut laisser des données incohérentes si un échec survient en cours de route.
-
Ignorer la gestion des erreurs : sans blocs
TRY...CATCH, le débogage est plus difficile et les scripts peuvent échouer silencieusement ou de manière imprévisible en production.
Voici les bonnes pratiques que je recommande pour écrire des requêtes plus efficaces et fiables :
-
Privilégier les requêtes ensemblistes : utilisez
JOIN,GROUP BYet les fonctions de fenêtre plutôt que des boucles lorsque c’est possible. C’est conforme à l’architecture de traitement de SQL Server. -
Écrire un code lisible et maintenable : adoptez des conventions de nommage claires, formatez vos requêtes de façon cohérente et commentez lorsque nécessaire. Votre code sera plus facile à relire, à déboguer et à partager.
-
Tester les procédures : testez toujours vos procédures stockées et requêtes avec des entrées variées pour valider leur robustesse et la gestion des cas limites.
Conclusion
T-SQL étend SQL standard avec des capacités de programmation, ce qui en fait un outil souple et puissant pour l’automatisation, le traitement et l’analyse des données. Grâce aux variables, procédures stockées et à la gestion des erreurs, vous concevez des solutions de base de données plus dynamiques et efficaces.
Pour aller plus loin, testez notre parcours métier Associate Data Analyst en SQL pour devenir un analyste confirmé. Notre cours Reporting in SQL vous aidera également à construire des rapports complexes. Enfin, obtenez notre SQL Associate Certification pour démontrer votre maîtrise de SQL au service des enjeux métier et vous démarquer.
FAQ sur T-SQL
En quoi T-SQL diffère-t-il de SQL standard ?
SQL est principalement déclaratif, tandis que T-SQL combine des requêtes déclaratives avec de la programmation procédurale, ce qui vous permet de contrôler la façon dont les opérations s’exécutent.
Dois-je apprendre SQL avant d’apprendre T-SQL ?
Oui, il est important d’avoir des bases en SQL, car T-SQL s’appuie directement sur les concepts centraux comme SELECT, INSERT, UPDATE et DELETE.
T-SQL est-il disponible dans tous les dialectes SQL ?
Non, T-SQL est spécifique à l’écosystème Microsoft et s’utilise principalement avec Microsoft SQL Server et des outils associés comme Azure SQL.
Qu’est-ce qu’une procédure stockée et à quoi sert-elle ?
Les procédures stockées sont des blocs de code T-SQL réutilisables qui s’exécutent dans la base de données. Elles améliorent les performances, garantissent la cohérence et simplifient la logique applicative.
À quoi servent les fonctions de fenêtre en T-SQL ?
Les fonctions de fenêtre servent à des analyses avancées comme le classement, les cumuls et la comparaison de valeurs entre lignes sans regrouper les données.

