Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Si applica a: Sql Server 2025 (17.x)
Database
SQL 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) conLatin1_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 |