Pour utiliser une syntaxe SQL plus récente dans Azure SQL, ce n'est pas la version du serveur qui compte — c'est le niveau de compatibilité.

Ce matin, un développeur de mon équipe m'a demandé quelle était la version SQL d'une de nos bases de données de production pour savoir s'il pouvait utiliser une syntaxe SQL plus récente dans une requête. La réponse n'était pas aussi simple qu'il l'espérait — et c'est un piège que beaucoup de développeurs rencontrent en passant de SQL Server on-premise à Azure SQL.

En bref

  • La version affichée dans SQL Management Studio peut différer de SELECT @@VERSION
  • Les numéros de version du serveur physique et d'Azure SQL ne sont pas les mêmes
  • Le niveau de compatibilité détermine quelle syntaxe SQL vous pouvez utiliser
  • Vérifiez toujours le niveau de compatibilité avant d'adopter des fonctionnalités récentes

Comment obtenir la version du serveur

Si vous utilisez SQL Management Studio, vous pouvez obtenir la version du serveur SQL dans l'Explorateur d'objets.

SQLManagerSQLVersion

Dans cet exemple, la version du serveur est 12.0.2000.8, ce qui pourrait être interprété comme SQL Server 2014.

Référence : Comment déterminer la version, l'édition et le niveau de mise à jour de SQL Server

Pourquoi SELECT @@VERSION donne un résultat différent

En utilisant SELECT @@VERSION, vous pouvez obtenir une version différente.

SQLVERSION

Dans cet exemple, il semble s'agir de SQL Server 2016. Les numéros de version du serveur SQL physique et du serveur SQL Azure ne sont donc pas les mêmes.

Ce qui compte vraiment : le niveau de compatibilité

Le niveau de compatibilité est ce que vous recherchez lorsque vous voulez utiliser une syntaxe SQL plus récente. L'alignement des versions SQL avec les niveaux de compatibilité par défaut est le suivant :

NiveauVersion SQL ServerAzure SQL Database
100SQL Server 2008Oui
110SQL Server 2012Oui
120SQL Server 2014Oui
130SQL Server 2016Oui
140SQL Server 2017Oui

Référence : Default compatibility level 140 for Azure SQL databases

Vérifier le niveau de compatibilité actuel

SELECT compatibility_level
FROM sys.databases
WHERE name = 'VotreBaseDeDonnees';

Avant d'adopter une syntaxe ou une fonctionnalité introduite dans une version récente, vérifiez que le niveau de compatibilité de votre base le supporte — ou planifiez une mise à niveau en conséquence.

Pour aller plus loin

Vous travaillez sur une migration de plateforme ou une modernisation de requêtes? Échangeons.