Développeur T-SQL SQL Server, procédures stockées et plans d'exécution

Vous recrutez un développeur T-SQL pour écrire et maintenir les procédures stockées d'une application ou d'un entrepôt SQL Server. Les questions aident à repérer celui qui ouvre le plan d'exécution et le Query Store avant de conclure qu'il faut plus de serveur.

Recevoir la fiche complète

Mis à jour le Par l'équipe Delectus5 min de lecture

La fiche Développeur T-SQL SQL Server : technologies, chaîne du poste, une question et la grille d'évaluation

Le développeur T-SQL travaille sur la couche de données d'applications .NET, de progiciels ou d'entrepôts Microsoft. Il écrit des procédures stockées appelées par le code applicatif, des requêtes pour les rapports SSRS ou Power BI, des traitements de nuit lancés par SQL Server Agent ou par des packages SSIS. Les offres le cherchent souvent en double compétence : .NET et T-SQL côté application, SSIS et T-SQL côté décisionnel.

En entretien, le T-SQL est souvent évalué comme du SQL générique, avec des jointures et des GROUP BY. Les problèmes de production sont ailleurs : un plan compilé pour un gros client qui ralentit tous les autres, une transaction restée ouverte après une erreur, des NOLOCK posés partout pour contourner les blocages. Ces sujets séparent un développeur qui a tenu une base sous charge d'un profil qui a surtout écrit des requêtes de lecture.

Chaque question de la page indique le niveau visé, la bonne réponse et le signal d'alerte. Le PDF va plus loin avec 30 questions, un cas de 20 minutes sur un calcul de stock qui bloque la saisie des commandes et une grille de 1 à 4 par axe.

SQL Server et ses outils, côté développeur T-SQL

T-SQL

Le dialecte SQL de Microsoft, avec ses variables, ses blocs TRY/CATCH, ses procédures stockées, fonctions et triggers. C'est le langage du poste au quotidien. Le niveau se voit à la façon de gérer les erreurs et les transactions plus qu'à la syntaxe.

Plans d'exécution et SSMS

SQL Server Management Studio affiche le plan estimé ou réel d'une requête : les index utilisés, les jointures, le nombre de lignes prévu et lu. Savoir le lire est la base de toute optimisation. Un candidat qui n'en a jamais ouvert un n'a pas fait d'optimisation.

Query Store

Une boîte noire intégrée à la base, active par défaut sur les bases créées depuis SQL Server 2022. Elle garde l'historique des requêtes, de leurs plans et de leurs durées, ce qui permet de voir qu'un plan a changé et de forcer l'ancien. C'est l'outil de diagnostic des ralentissements soudains.

Index et statistiques

Index clustered, non clustered avec colonnes incluses, columnstore pour l'analytique. Les statistiques décrivent la répartition des valeurs et guident l'optimiseur. La plupart des requêtes lentes se règlent ici, en ajoutant ou en modifiant un index ou en mettant à jour des statistiques.

tempdb, tables temporaires et variables de table

tempdb sert aux tables temporaires, aux variables de table, aux tris et au stockage de versions des lectures sans blocage. Le choix entre table temporaire et variable de table change les estimations de l'optimiseur et donc les performances.

SSIS, SSRS et SQL Server Agent

SSIS charge les données, SQL Server Agent planifie les traitements, SSRS publie les rapports. Depuis SQL Server 2025, les rapports SSRS sont regroupés dans Power BI Report Server. Le développeur T-SQL écrit le plus souvent les procédures que ces outils appellent.

Azure SQL Database et Managed Instance

Les deux offres SQL Server managées d'Azure. Managed Instance est proche d'un serveur installé, avec SQL Server Agent. Azure SQL Database est une base isolée, sans Agent ni requêtes simples entre bases. Le code T-SQL doit parfois être adapté au passage de l'un à l'autre.

SQL Server 2025

Sortie fin 2025, cette version ajoute un type JSON natif, des fonctions d'expressions régulières (REGEXP_LIKE, REGEXP_REPLACE), le verrouillage optimisé et un type vectoriel. Beaucoup d'entreprises sont encore en 2019 ou 2022, mais un candidat curieux en connaît les apports.

Le poste se présente sous deux formes. Côté applicatif, le développeur T-SQL travaille avec une équipe .NET, écrit les procédures appelées par l'application et tient les temps de réponse en journée. Côté décisionnel, il alimente un entrepôt avec SSIS et des procédures, prépare les données des rapports et répond des chargements de nuit. Dans les deux cas, il partage la base avec un DBA qui gère les sauvegardes, la haute disponibilité et les droits. Les ESN placent souvent ce profil en mission longue chez des assureurs, des mutuelles ou des éditeurs. La certification Microsoft Azure Database Administrator Associate (DP-300) concerne plutôt l'administration et ne mesure pas le niveau en développement T-SQL.

Les compétences T-SQL à vérifier

  • Procédures stockées et gestion des erreurs
  • Fonctions fenêtrées, CTE et requêtes complexes
  • Lecture des plans d'exécution et indexation
  • Transactions, verrous et isolation
  • Chargements de masse et incrémentaux
  • Déploiement, tests et Query Store

Cinq questions T-SQL qui demandent une expérience de production

Chaque question vient avec ce qu'une bonne réponse contient et le signal qui doit vous alerter. Pas besoin d'être technique pour les poser : écoutez si le candidat raconte du vécu.

  1. Question 1 · senior

    Une procédure stockée répond en 200 millisecondes pour la plupart des clients et en 30 secondes pour quelques gros comptes. Quelle est votre première hypothèse ?

    Une bonne réponseLe reniflage de paramètres (parameter sniffing) : le plan a été compilé avec la valeur du premier appel et ne convient pas aux autres. Il le confirme dans le Query Store, qui montre plusieurs plans pour la même requête et leurs durées. Selon le cas : OPTION (RECOMPILE) sur l'ordre concerné si la procédure est peu appelée, OPTIMIZE FOR, un plan forcé ou un indicateur posé par le Query Store, ou deux chemins de code séparés. Il cite l'optimisation des plans sensibles aux paramètres apparue avec SQL Server 2022.

    Signal d'alerteVider le cache des plans en production avec DBCC FREEPROCCACHE comme correctif, ou mettre WITH RECOMPILE sur toutes les procédures sans mesurer le coût de compilation.

  2. Question 2 · confirmé

    Écrivez à voix haute la structure d'une procédure qui modifie trois tables dans une transaction et doit tout annuler en cas d'erreur.

    Une bonne réponseSET XACT_ABORT ON en tête, BEGIN TRANSACTION dans un bloc TRY, COMMIT à la fin du bloc. Dans le CATCH, IF @@TRANCOUNT > 0 ROLLBACK, puis journalisation de l'erreur (ERROR_NUMBER, ERROR_MESSAGE, ERROR_PROCEDURE, ERROR_LINE) et THROW pour la renvoyer à l'appelant. Il sait qu'une variable de table garde son contenu après un ROLLBACK, ce qui permet de conserver des informations à journaliser.

    Signal d'alerteUn test de @@ERROR après chaque ordre comme seule protection, un CATCH qui journalise sans ROLLBACK et laisse une transaction ouverte avec ses verrous, ou un RAISERROR qui masque le numéro d'erreur d'origine.

  3. Question 3 · confirmé

    Pour stocker 500 000 lignes intermédiaires avant une jointure, table temporaire ou variable de table ?

    Une bonne réponseUne table temporaire (#table). Elle a des statistiques, accepte des index créés après coup et donne à l'optimiseur une estimation correcte du nombre de lignes. La variable de table convient à quelques centaines de lignes. Depuis SQL Server 2019, la compilation différée améliore son estimation, sans lui donner de statistiques par colonne. Les deux vivent dans tempdb. Une CTE n'est pas matérialisée et sera réévaluée à chaque référence.

    Signal d'alerte« La variable de table est en mémoire, donc plus rapide », ou « la CTE stocke le résultat comme une table temporaire ».

  4. Question 4 · junior à confirmé

    On veut le dernier statut connu de chaque commande à partir d'une table d'historique de 50 millions de lignes. Comment écrivez-vous la requête ?

    Une bonne réponseROW_NUMBER() OVER (PARTITION BY id_commande ORDER BY date_statut DESC) dans une CTE, puis un filtre sur le rang 1. Ou CROSS APPLY avec un TOP (1) ordonné quand un index (id_commande, date_statut DESC) existe et qu'on ne veut qu'une partie des commandes. Il pose la question des égalités de date et ajoute une colonne au ORDER BY pour trancher les ex aequo de façon stable.

    Signal d'alerteUne sous-requête corrélée sur MAX(date_statut) qui ramène deux lignes quand deux statuts ont la même date, ou un curseur qui parcourt les commandes une par une.

  5. Question 5 · senior

    Pendant qu'un traitement met à jour cinq millions de lignes, la saisie des commandes est bloquée. Comment diagnostiquez-vous puis corrigez-vous ?

    Une bonne réponseIl identifie la chaîne de blocage avec sys.dm_exec_requests (blocking_session_id) et sys.dm_tran_locks, et regarde si les verrous ont été escaladés au niveau de la table, ce qui arrive vers 5 000 verrous sur un même objet. Corrections : mise à jour par lots (UPDATE TOP (n) en boucle, chaque lot commité), un index qui évite le parcours complet, une transaction plus courte. Pour les lectures, READ_COMMITTED_SNAPSHOT supprime le blocage lecteurs-écrivains au prix d'un stockage de versions dans tempdb.

    Signal d'alerteMettre NOLOCK partout. Les lectures peuvent alors renvoyer des données non validées, sauter des lignes ou les compter deux fois.

Recevez la fiche d'entretien complète en PDF

La fiche pour mener l'entretien de bout en bout, prête à imprimer ou à partager avec le manager.

  • 30 questions sur 6 axes, avec la bonne réponse, le signal d'alerte et la relance
  • Le niveau visé pour chaque question
  • Une mise en situation de 20 minutes et ce qu'on attend du candidat
  • La grille d'évaluation de 1 à 4, axe par axe

Développeur T-SQL : réponses aux recruteurs

Où passe la limite entre développeur T-SQL et DBA SQL Server ?

Le développeur T-SQL écrit le code qui tourne dans la base : procédures, fonctions, requêtes, chargements. Le DBA administre l'instance : sauvegardes et restaurations, Always On, sécurité, mises à jour, surveillance du serveur. Les deux se rejoignent sur la performance, les index et les verrous. Dans une petite équipe, une seule personne fait souvent les deux, et il faut alors ajouter un axe d'administration à l'entretien.

Faut-il exiger SSIS et SSRS pour un poste de développeur T-SQL ?

Seulement si le poste comporte du décisionnel. Sur une équipe applicative .NET, SSIS et SSRS sont rarement utilisés et le cœur reste le T-SQL, les index et les transactions. Sur un entrepôt, ils font partie du quotidien, et la personne doit savoir écrire des chargements rejouables et des procédures pour les rapports. Les offres qui les mentionnent en vrac recopient souvent une fiche de poste ancienne.

Quel format de test technique pour un développeur T-SQL ?

Une requête lente avec son plan d'exécution réel, à commenter en direct, en dit beaucoup en quinze minutes. Ajoutez une procédure sans gestion d'erreurs à corriger et une question de top-N par groupe à écrire. L'exercice doit tourner sur une base fournie, avec des volumes réalistes, faute de quoi toutes les requêtes paraissent rapides. Laissez la personne utiliser la documentation, comme au travail.

SQL Server 2025 change-t-il ce qu'on attend d'un développeur ?

Pas sur le socle. Les procédures, les plans, les index et les verrous restent la base. La version 2025 apporte le type JSON natif, les expressions régulières en T-SQL, le verrouillage optimisé qui réduit les blocages, un type vectoriel et l'appel de services REST depuis la base. Un candidat qui connaît ces ajouts se tient à jour. Leur absence n'est pas éliminatoire sur une base en 2019 ou 2022.

Pour structurer vos autres entretiens, consultez aussi nos pages sur les questions d'entretien de recrutement, la méthode de l'entretien structuré et la grille d'évaluation d'entretien.

Les fiches voisines

Toutes les fiches →

Voyez Delectus sur vos propres offres.

Commencez gratuitement. Passez à l'échelle quand vous êtes prêt.

Demander une démo

Votre ATS, connecté à Delectus

  • Workable
  • Teamtailor
  • iCIMS
  • Lever
  • SmartRecruiters
  • Jobvite
  • Greenhouse
  • Pinpoint