Type de données JSON

S’applique à : Base de données SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceSQL dans Microsoft Fabric

Le type de données json stocke les documents JSON au format binaire.

Le type json offre un stockage haute fidélité des documents JSON optimisé pour l’interrogation et la manipulation. Il offre les avantages suivants par rapport au stockage des données JSON sous forme de varchar ou nvarchar :

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

Le type json stocke en interne les chaînes en utilisant l’encodage UTF-8 (Latin1_General_100_BIN2_UTF8). Les autres types de données sont stockés comme types de données natifs. 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 ) ]

Utilisez le type de données json dans une définition de colonne contenue dans une CREATE TABLE instruction. Par exemple:

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

Spécifier les contraintes comme partie de la définition de la 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

Le support des fonctions JSON a été introduit dans SQL Server 2016 (13.x). Le type de données json intégré est disponible dans Azure SQL Database, Azure SQL Managed Instance et SQL Server 2025 (17.x).

Pour plus d’informations sur la prise en charge JSON dans SQL Server 2025 (17.x), voir Fonctionnalités clés JSON dans SQL Server 2025.

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

Note

Le type de données json et les index JSON sont généralement disponibles en SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance (avec la politique de mise à jourSQL Server 2025 ou Always-up-todate, et la base de données SQL dans Microsoft Fabric.

Méthode de modification

Le type de données json prend en charge la modify méthode. À utiliser modify pour modifier les documents JSON stockés dans une colonne. La modify méthode inclut des optimisations qui effectuent des modifications sur place des données lorsque cela est possible. C’est la méthode préférée pour modifier un document JSON dans une colonne json .

Pour les chaînes JSON, si la nouvelle valeur est de même longueur ou plus courte que la valeur existante, la méthode peut modifier les données en place.

Pour les nombres JSON, si la nouvelle valeur est du même type ou correspond à la plage de la valeur existante, la méthode peut modifier les données en place.

DROP TABLE IF EXISTS JsonTable;

CREATE TABLE JsonTable
(
    id INT PRIMARY KEY,
    d JSON
);

INSERT INTO JsonTable
(
    id,
    d
)
VALUES (1, '{"a":1, "b":"abc", "c":true}');

UPDATE JsonTable
SET d.modify('$.a', 14859)
WHERE id = 1;

UPDATE JsonTable
SET d.modify('$.b', 'def')
WHERE id = 1;

Données valides

L’entrée au type de données JSON doit être un objet JSON ou un tableau JSON. Les scalaires, booléens et NULL valeurs ne sont pas pris en charge. Le type de données JSON est conforme à la norme IETF RFC 4627 qui autorise uniquement un objet ou un tableau JSON.

Utilisez la fonction ISJSON pour vérifier si une chaîne contient du JSON valide. Sans contrainte de type, ISJSON il n’accepte qu’un objet JSON ou un tableau au niveau supérieur, identique au type de données json . La VALUE contrainte de type accepte toute valeur JSON au niveau supérieur, y compris un scalaire, comme le permet la RFC 8259 de l’IETF. Les ARRAYcontraintes , OBJECT, et SCALAR de type n’acceptent que ce type.

Par exemple:

DECLARE @true AS JSON = 'true'; -- invalid
DECLARE @false AS JSON = 'false'; -- invalid
DECLARE @number AS JSON = '1234.56'; -- invalid
DECLARE @string AS JSON = '"contoso"'; -- invalid
DECLARE @null AS JSON = 'null'; -- invalid

DECLARE @null AS JSON = NULL; -- valid
DECLARE @object AS JSON = '{}'; -- valid
DECLARE @array AS JSON = '[]'; -- valid

Prise en charge des fonctions

Toutes les fonctions JSON prennent en charge le type de données json sans nécessiter de modifications de code.

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

Indexes

Une colonne json peut être une colonne incluse dans une définition d’indice, ou apparaître dans la WHERE clause d’un index filtré. Une colonne json ne peut pas être utilisée comme colonne clé dans un index standard.

Pour plus d’informations, consultez CREATE INDEX.

Dans Azure SQL Database, Azure SQL Managed Instance, SQL Server 2025 (17.x) et SQL database dans Microsoft Fabric, vous pouvez créer un index JSON pour optimiser les requêtes qui accèdent aux valeurs dans les documents JSON.

Pour plus d’informations, consultez CREATE JSON INDEX.

Conversion

La conversion de json à char, nchar, varchar et nvarchar doit être explicite. Utilisez CAST ou CONVERT.

La conversion de char, nchar, varchar, nvarchar et vector en json peut être implicite ou explicite. La conversion de json en vecteur peut aussi être implicite ou explicite.

La conversion entre json et tous les autres types de données n’est pas autorisée.

Une valeur que vous convertissez en json doit être un objet JSON ou un tableau JSON. Un scalaire JSON, tel que 1, "abc", true, ou null, provoque l’erreur 13609. Une chaîne vide provoque également l’erreur 13609. Si un objet possède des clés en double, json conserve la première valeur et défausse les autres valeurs. Aucune erreur ne se produit.

La conversion de json vers un type de chaîne renvoie le texte JSON sans espace blanc insignifiant. Si la longueur cible est trop courte pour le texte JSON, l’erreur 13639 apparaît. La valeur n’est pas tronquée.

Le type de données json ne peut pas être utilisé avec le type sql_variant ou affecté à une variable ou une colonne sql_variant . Cette restriction est similaire aux types de données basés sur varchar(max), varbinary(max), nvarchar(max),xml et CLR.

Vous pouvez convertir des colonnes existantes telles que varchar(max) en json à l’aide ALTER TABLEde . Comme pour le type de données xml , vous ne pouvez pas convertir une colonne json en un des types de chaîne ou binaires à l’aide ALTER TABLEde .

Pour plus d’informations, consultez Conversion de type de données (moteur de base de données).

Précision numérique

Lorsque vous convertissez en json depuis char, nchar, varchar ou nvarchar, le texte JSON contenant un numéro JSON peut être arrondi en fonction du format numérique.

Si vous devez conserver la précision, spécifiez le numéro JSON comme une valeur décimale. De même, si vous devez préserver la représentation textuelle du document JSON, stockez le document JSON comme type de chaîne de caractères.

Compatibility

Vous pouvez utiliser le type de données json comme paramètre ou type retour dans une fonction définie par l’utilisateur, ou comme 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 représente les données json sous forme de varchar ou nvarchar. Vous devez spécifier un fichier de format pour désigner une colonne json .

Vous ne pouvez pas créer un type d’alias pour le type de données json avec CREATE TYPE. Ce comportement est identique au type de données xml .

L’utilisation SELECT ... INTO avec le type de données json crée une table avec le type json .

Limitations

CAST et CONVERT retourner le type de données JSON comme prévu.

Limitations du pilote

La procédure stockée du système sp_describe_first_result_set retourne correctement le type de données json si le pilote prend en charge l’extension JSONSUPPORT de la fonctionnalité TDS. Les pilotes qui ne supportent pas cette extension voient plutôt varchar ou nvarchar .

SqlClient (>= 6.0) et JDBC (>= 13.2.0) prennent en charge JSONSUPPORT. Par exemple, la dernière version de SQL Server Management Studio (SSMS) utilise le dernier pilote SqlClient et rapporte correctement le type json dans les métadonnées de l’ensemble des résultats.

  • Sans JSONSUPPORT, TDS >= 7,4 (avec UTF-8) rapporte varchar(max) avec Latin1_General_100_BIN2_UTF8.
  • Sans JSONSUPPORT, TDS < 7.4 rapporte nvarchar(max) avec la compilation de la base de données.

Limites de taille

Limites de taille des données JSON dans le stockage :

Terrain Limitation
Taille du type de données JSON (binaire) Jusqu’à 2 Go
Nombre de clés uniques Jusqu’à 32 000
Par taille de chaîne de clé 7 998 octets
Par taille de valeur de chaîne 536 870 911 octets
Nombre de propriétés dans un objet Jusqu’à 65 535
Nombre d’éléments dans un tableau Jusqu’à 65 535
Nombre de niveaux imbriqués dans le document JSON 128