Condividi tramite


Tipo di dati JSON (anteprima)

Si applica a:Database SQL di AzureIstanza gestita di 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, vedere 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 delle funzioni JSON è stato introdotto per la prima volta in SQL Server 2016 (13.x). Il tipo json json è stato introdotto nel 2024 nel database SQL di Azure e nell'istanza gestita di SQL di Azure.

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

Nota

Il tipo di dati JSON è attualmente disponibile in anteprima per il database SQL di Azure e l'istanza gestita di SQL di Azure configurata con i criteri di aggiornamento Always-up-to-date. Non è disponibile in Istanza gestita di SQL di Azure configurata con i criteri di aggiornamento SQL Server 2022 .

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.

È possibile convertire colonne esistenti, ad esempio una colonna varchar(max) in json usando . Analogamente al tipo di dati xml , non è possibile convertire una colonna json in uno dei tipi stringa o binari usando .

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 crea 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, TDS >= 7.4 (con UTF-8) vede varchar(max) con Latin_General_100_bin2_utf8.
    • Attualmente, TDS < 7.4 vede nvarchar(max) con 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.