Derniers tips / Mémos
Modélise nativement « exactement l'un de ces types », avec un switch exhaustif vérifié par le compilateur.
Fin des state machines générées par le compilateur : moins d'allocations et des stack traces enfin lisibles.
Recherche sémantique directement dans SQL Server 2025, sans base vectorielle séparée, en LINQ typé.
Framework UI cross-platform pour .NET : Windows, macOS, Linux, iOS, Android et WebAssembly.
Découvrez les nouvelles APIs asynchrones pour la compression ZIP et les améliorations de performance dans .NET 10
OPENJSON en T‑SQL
OPENJSON est une fonction table permettant de lire un document JSON (ou un chemin spécifique) et de retourner une table de paires (key, value, type). Avec la clause WITH, on peut projeter des colonnes typées et mappées sur des chemins JSON.
Cas d’usage
Projection typée avec WITH
Extraire des champs scalaires d’un JSON sans écrire de parsing manuel.
-- Sample data
DECLARE @payload NVARCHAR(MAX) = N'{"id":1,"name":"Alice","tags":["vip","tech"]}';
-- Project properties using WITH mapping and paths
SELECT
J.Id,
J.Name
FROM OPENJSON(@payload)
WITH (
Id INT '$.id',
Name NVARCHAR(50) '$.name'
) AS J;Résultat attendu
Id Name
-- -----
1 AliceParcourir un tableau JSON (CROSS APPLY)
Lire chaque élément du tableau et projeter ses propriétés.
-- Sample data
DECLARE @payload NVARCHAR(MAX) = N'{"items":[{"sku":"KB","qty":1},{"sku":"MS","qty":3}]}';
-- Read array elements with CROSS APPLY
SELECT
ITM.[key] AS ItemIndex,
ITM.value AS ItemJson,
X.Sku,
X.Qty
FROM OPENJSON(@payload, '$.items') AS ITM
CROSS APPLY OPENJSON(ITM.value)
WITH (
Sku NVARCHAR(10) '$.sku',
Qty INT '$.qty'
) AS X;Résultat attendu
ItemIndex ItemJson Sku Qty
--------- ---------------------------------------- --- ---
0 {"sku":"KB","qty":1} KB 1
1 {"sku":"MS","qty":3} MS 3Parsing par ligne avec OUTER APPLY
Appliquer OPENJSON sur une colonne JSON par enregistrement et conserver les lignes NULL.
-- Sample table
CREATE TABLE dbo.Events (
Id INT PRIMARY KEY,
Payload NVARCHAR(MAX)
);
INSERT INTO dbo.Events(Id, Payload) VALUES
(1, '{"country":"FR","score":42}'),
(2, NULL);
-- OUTER APPLY preserves rows with NULL payload
SELECT
E.Id,
J.[key] AS Prop,
J.value AS Val
FROM dbo.Events AS E
OUTER APPLY OPENJSON(E.Payload) AS J;Résumé
Utilisez OPENJSON pour transformer du JSON en lignes/colonnes SQL, avec WITH pour un schéma typé. Combinez‑le avec CROSS/OUTER APPLY pour un parsing par ligne.
Avantages
- Mapping typé et explicite (WITH)
- Lecture de tableaux et d’objets imbriqués
- Intégration naturelle avec APPLY
Inconvénients
- Dépend de SQL Server 2016+
- Peut nécessiter des index/optimisations si volumineux
- Attention aux chemins et aux valeurs NULL
Bonnes pratiques
- Valider la structure JSON côté applicatif quand c’est possible
- Privilégier WITH pour des colonnes typées (meilleure lisibilité/optimisation)
- Limiter la taille des documents JSON stockés
- Indexer les colonnes corrélées si vous joignez le résultat