Condividi tramite


Tipo di dati JSON (anteprima)

Si applica a:database SQL di Azure

Nuovo tipo di dati JSON nativo che archivia i documenti JSON in un formato binario nativo.

Il tipo json offre un'archiviazione ad alta fedeltà dei documenti JSON ottimizzati per semplificare l'esecuzione di query e la manipolazione e offre i vantaggi seguenti rispetto all'archiviazione di dati JSON in varchar e nvarchar:

  • Letture più efficienti, in quanto il documento è già analizzato
  • Scritture più efficienti, in quanto la query può aggiornare singoli valori senza accedere all'intero documento
  • Archiviazione più efficiente, ottimizzata per la compressione
  • Nessuna modifica della compatibilità con il codice esistente

Il tipo json archivia internamente i dati usando la codifica UTF-8, Latin1_General_100_BIN2_UTF8. Questo comportamento corrisponde alla specifica JSON.

Per altre informazioni sull'esecuzione di query sui dati JSON, si veda Lavorare con dati JSON in SQL Server.

Sintassi di esempio

La sintassi di utilizzo per il tipo json è simile a tutti gli altri tipi di dati di SQL Server in una tabella.

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

Il tipo json può essere usato nella definizione di colonna contenuta in un'istruzione CREATE TABLE, ad esempio:

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

I vincoli possono essere specificati come parte della definizione di colonna, ad esempio:

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

Disponibilità di funzionalità

Il supporto JSON è stato introdotto per la prima volta in SQL Server 2016 (13.x), principalmente sotto forma di funzioni JSON. Il nuovo tipo json nativo è stato introdotto nel 2024, prima nelle piattaforme di Azure SQL.

json è disponibile in tutti i livelli di compatibilità del database.

Nota

Attualmente, il tipo json è disponibile in anteprima in database SQL di Azure.

Funzioni supportate

Tutte le funzioni JSON supportano il tipo json senza modifiche al codice o differenza di utilizzo necessaria.

Per un elenco completo delle funzioni JSON, vedere Funzioni JSON.

Indici

Non esistono tipi di indici speciali per i dati JSON.

Il tipo json non può essere usato come colonna chiave in un'istruzione CREATE INDEX. Tuttavia, una colonna json può essere specificata come colonna inclusa in una definizione di indice. Inoltre, una colonna json può essere visualizzata nella clausola WHERE di un indice filtrato.

Conversione

La conversione esplicita con CAST o CONVERT dal tipo json può essere eseguita nei tipi char, nchar, varchar, and nvarchar. Tutte le conversioni implicite non sono consentite, analogamente al comportamento di xml. Analogamente, solo char, nchar, varchar, and nvarchar possono essere convertiti in modo esplicito nel tipo json.

Il tipo json non può essere usato con il tipo sql_variant o assegnato a una variabile o a una colonna sql_variant. Questa restrizione è analoga ai tipi di dati basati su varchar(max), varbinary(max), nvarchar(max), xml e CLR.

Per altre informazioni si veda Conversioni di tipi di dati.

Compatibilità

Il tipo json può essere usato come parametro o tipo restituito in una funzione definita dall'utente o come parametro di una stored procedure. Il tipo json è compatibile con trigger e visualizzazioni.

Attualmente, il formato nativo dello strumento bcp contiene il documento json come varchar o nvarchar. È necessario specificare un file di formato per designare una colonna del tipo di dati json.

La creazione del tipo di alias con CREATE TYPE per il tipo json non è consentita. Si tratta dello stesso comportamento del tipo xml.

L'uso di SELECT ... INTO con il tipo JSON creerà una tabella con il tipo JSON.

Limiti

  • Il comportamento di CAST ( ... AS JSON) restituisce un tipo json, ma la stored procedure di sistema sp_describe_first_result_set non restituisce correttamente il tipo di dati json. Di conseguenza, molti client e driver di accesso ai dati vedranno un tipo di dati varchar o nvarchar.

    • Attualmente, il supporto TDS >= 7.4 (con UTF-8) vedrà varchar(max) con Latin_General_100_bin2_utf8.
    • Attualmente, il supporto TDS < 7.4 vedrà nvarchar(max) con le regole di confronto del database.
  • Attualmente, la funzione OPENJSON() non accetta il tipo json, che è al momento una conversione implicita. Convertire in modo esplicito in nvarchar(max) per primo.