Tipo di dati JSON

Si applica a: Sql Server 2025 (17.x) DatabaseSQL di Azure Istanza gestita di SQL di Azurein Microsoft Fabric

Il tipo di dato json memorizza i documenti JSON in formato binario.

Il tipo json fornisce una memoria ad alta fedeltà di documenti JSON ottimizzata per query e manipolazione. Offre i seguenti vantaggi rispetto alla memorizzazione dei dati JSON come varchar o nvarchar:

  • Letture più efficienti, poiché il documento è già analizzato.
  • Scrive più efficiente, poiché la query può aggiornare i singoli valori senza accedere all'intero documento.
  • Storage più efficiente, ottimizzato per la compressione.
  • Nessun cambiamento nella compatibilità con il codice esistente.

Il tipo json memorizza internamente le stringhe usando la codifica UTF-8 (Latin1_General_100_BIN2_UTF8). Altri tipi di dati sono memorizzati come tipi nativi. 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 ) ]

Usa il tipo di dato json in una definizione di colonna contenuta in un'istruzione CREATE TABLE . Per esempio:

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

Specificare i vincoli come parte della definizione della colonna. Per esempio:

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

Disponibilità delle funzionalità

Il supporto per le funzioni JSON è stato introdotto in SQL Server 2016 (13.x). Il tipo di dato json integrato è disponibile in database SQL di Azure, Istanza gestita di SQL di Azure e SQL Server 2025 (17.x).

Per maggiori informazioni sul supporto JSON in SQL Server 2025 (17.x), vedi Funzionalità chiave JSON in SQL Server 2025.

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

Note

Il tipo di dato json e gli indici JSON sono generalmente disponibili SQL Server 2025 (17.x), database SQL di Azure, Istanza gestita di SQL di Azure (con la politica di aggiornamentoSQL Server 2025 2025 o Always-up-to -date, e database SQL in Microsoft Fabric.

Metodo modify

Il tipo di dati json supporta il modify metodo . Usare modify per modificare i documenti JSON memorizzati in una colonna. Il modify metodo include ottimizzazioni che effettuano modifiche in situ ai dati quando possibile. È il modo preferito per modificare un documento JSON in una colonna json .

Per le stringhe JSON, se il nuovo valore ha la stessa lunghezza o è più breve di quello esistente, il metodo può modificare i dati presenti.

Per i numeri JSON, se il nuovo valore è dello stesso tipo o rientra nell'intervallo del valore esistente, il metodo può modificare i dati in posizione.

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;

Dati validi

L'input per il tipo di dati json deve essere un oggetto JSON o una matrice JSON. Scalari, booleani e NULL valori non sono supportati. Il tipo di dati JSON è conforme a IETF RFC 4627, che consente solo un oggetto JSON o una matrice.

Usa la funzione ISJSON per testare se una stringa contiene JSON valido. Senza vincolo di tipo, ISJSON accetta solo un oggetto o un array JSON al livello superiore, come il tipo di dato json . Il VALUE vincolo di tipo accetta qualsiasi valore JSON al livello superiore, incluso uno scalare, come consente IETF RFC 8259. I ARRAYvincoli , OBJECT, e SCALAR di tipo accettano solo quel tipo.

Per esempio:

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

Supporto delle funzioni

Tutte le funzioni JSON supportano il tipo di dato json senza richiedere modifiche al codice.

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

Indexes

Una colonna json può essere una colonna inclusa in una definizione di indice, oppure apparire nella WHERE clausola di un indice filtrato. Una colonna json non può essere usata come colonna chiave in un indice standard.

Per altre informazioni, vedere CREATE INDEX.

In database SQL di Azure, Istanza gestita di SQL di Azure, SQL Server 2025 (17.x) e SQL database in Microsoft Fabric, puoi creare un indice JSON per ottimizzare le query che accedono ai valori all'interno dei documenti JSON.

Per altre informazioni, vedere CREATE JSON INDEX.

Conversion

La conversione da json a char, nchar, varchar e nvarchar deve essere esplicita. Usare CAST o CONVERT.

La conversione da char, nchar, varchar, nvarchar e vector a json può essere implicita o esplicita. La conversione da json a vettoriale può anche essere implicita o esplicita.

La conversione tra json e tutti gli altri tipi di dati non è permessa.

Un valore che converti in json deve essere un oggetto JSON o un array JSON. Uno scalar JSON, come 1, "abc", true, o null, causa l'errore 13609. Una stringa vuota causa anche l'errore 13609. Se un oggetto ha chiavi duplicate, json mantiene il primo valore e scarta gli altri valori. Non si verifica alcun errore.

La conversione da json a tipo stringa restituisce il testo JSON senza spazi bianchi insignificanti. Se la lunghezza target è troppo corta per il testo JSON, si verifica l'errore 13639. Il valore non è troncato.

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

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

Per altre informazioni, vedere Conversione dei tipi di dati (motore di database).

Precisione numerica

Quando si converte in json da char, nchar, varchar o nvarchar, il testo JSON contenente un numero JSON può essere arrotondato in base al formato numerico.

Se devi mantenere la precisione, specifica il numero JSON come valore decimale. Allo stesso modo, se devi preservare la rappresentazione testuale del documento JSON, memorizza il documento JSON come tipo di dato di stringa di carattere.

Compatibility

Puoi usare il tipo di dato json come parametro o tipo di ritorno in una funzione definita dall'utente, oppure come parametro di una procedura memorizzata. Il tipo json è compatibile con trigger e visualizzazioni.

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

Non puoi creare un tipo alias per il tipo di dato json con CREATE TYPE. Questo comportamento corrisponde al tipo di dati xml .

L'uso con SELECT ... INTO il tipo di dati json crea una tabella con il tipo json .

Limitations

CAST e CONVERT restituire il tipo di dato JSON come previsto.

Limitazioni del driver

La procedura memorizzata del sistema sp_describe_first_result_set restituisce correttamente il tipo di dato json se il driver supporta l'estensione JSONSUPPORT di funzionalità TDS. I driver che non supportano questa estensione vedono invece varchar o nvarchar .

SqlClient (>= 6.0) e JDBC (>= 13.2.0) supportano JSONSUPPORT. Ad esempio, l'ultima versione di SQL Server Management Studio (SSMS) utilizza il driver più recente di SqlClient e riporta correttamente il tipo json nei metadati del set di risultati.

  • Senza JSONSUPPORT, TDS >= 7,4 (con UTF-8) riporta varchar(max) con Latin1_General_100_BIN2_UTF8.
  • Senza JSONSUPPORT, TDS < 7.4 riporta nvarchar(max) con la collazione del database.

Limitazioni delle dimensioni

Limiti di dimensioni dei dati JSON nell'archiviazione:

Campo Limitation
Dimensioni del tipo di dati JSON (binario) Fino a 2 GB
Numero di chiavi univoco Fino a 32.000
Per dimensione della stringa di chiave 7.998 byte
Dimensioni per valore stringa 536.870.911 byte
Numero di proprietà in un oggetto Fino a 65.535
Numero di elementi in una matrice Fino a 65.535
Numero di livelli annidati nel documento JSON 128