Partager via


Type de données JSON (préversion)

S’applique à : Azure SQL Database Azure SQL Managed Instance

Nouveau type de données json natif qui stocke les documents JSON dans un format binaire natif.

Le type json fournit un stockage haute fidélité des documents JSON optimisé pour faciliter l’interrogation et la manipulation, et offre les avantages suivants sur le stockage des données JSON dans varchar ou nvarchar :

  • Lectures plus efficaces, car le document est déjà analysé
  • Écritures plus efficaces, car la requête peut mettre à jour des valeurs individuelles sans accéder à l’intégralité du document
  • Stockage plus efficace, optimisé pour la compression
  • Aucune modification de la compatibilité avec le code existant

Le type json stocke en interne les données à l’aide de l’encodage UTF-8, Latin1_General_100_BIN2_UTF8. Ce comportement correspond à la spécification JSON.

Pour plus d’informations sur l’interrogation de données JSON, consultez les données JSON dans SQL Server.

Exemple de syntaxe

La syntaxe d’utilisation du type json est similaire à tous les autres types de données SQL Server dans une table.

column_name JSON [NOT NULL | NULL] [CHECK(constraint_expression)] [DEFAULT(default_expression)]

Le type json peut être utilisé dans la définition de colonne contenue dans une instruction CREATE TABLE, par exemple :

CREATE TABLE Orders (order_id int, order_details JSON NOT NULL);

Les contraintes peuvent être spécifiées dans le cadre de la définition de colonne, par exemple :

CREATE TABLE Orders (order_id int, order_details JSON NOT NULL
   CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1
);

Disponibilité des fonctionnalités

La prise en charge JSON a été introduite pour la première fois dans SQL Server 2016 (13.x), principalement sous la forme de fonctions JSON. Le nouveau type json natif a été introduit en 2024, dans un premier temps sur les plateformes Azure SQL.

json est disponible sous tous les niveaux de compatibilité de base de données.

Fonction prise en charge

Toutes les fonctions JSON prennent en charge le type json sans modification de code ni différence d’utilisation nécessaire.

Pour obtenir la liste complète des fonctions JSON, consultez Fonctions JSON.

Index

Il n’existe aucun type d’index spécial pour les données JSON.

Le type json ne peut pas être utilisé comme colonne clé dans une instruction CREATE INDEX. Toutefois, une colonne json peut être spécifiée en tant que colonne incluse dans une définition d’index. En outre, une colonne json peut s’afficher dans la clause WHERE d’un index filtré.

Conversion

La conversion explicite à l’aide de CAST ou CONVERT à partir du type json peut être effectuée vers les types char, nchar, varchar et nvarchar. Toutes les conversions implicites ne sont pas autorisées, comme le comportement de xml. De même, seuls char, nchar, varchar et nvarchar peuvent être convertis explicitement en type json.

Le type json ne peut pas être utilisé avec le type sql_variant ou affecté à une variable ou une colonne sql_variant. Cette restriction similaire à varchar(max), varbinary(max), nvarchar(max), xml et CLR.

Pour plus d’informations, consultez Conversions de types de données.

Compatibilité

Le type json peut être utilisé comme paramètre ou type de retour dans une fonction définie par l’utilisateur ou le paramètre d’une procédure stockée. Le type json est compatible avec les déclencheurs et les vues.

Actuellement, le format natif de l’outil bcp contient le document json en tant que varchar ou nvarchar. Vous devez spécifier un fichier de format pour désigner une colonne de type de données json.

La création d’un type d’alias à l’aide de CREATE TYPE du type json n’est pas autorisée. Il s’agit du même comportement que le type xml.

L’utilisation de SELECT ... INTO avec le type JSON crée une table avec le type JSON.

Limites

  • Le comportement de CAST ( ... AS JSON) retourne un type json, mais la procédure stockée système sp_describe_first_result_set ne retourne pas correctement le type de données json. Par conséquent, de nombreux clients et pilotes d’accès aux données voient un type de données varchar ou nvarchar.

    • Actuellement, TDS >= 7.4 (avec la prise en charge UTF-8) verra varchar(max) avec Latin_General_100_bin2_utf8.
    • Actuellement, la prise en charge de TDS < 7.4 verra nvarchar(max) avec le classement de base de données.
  • Actuellement, la fonction OPENJSON() n’accepte pas le type json, qui est actuellement une conversion implicite. Convertissez explicitement en nvarchar(max) en premier.