Compartir a través de


Tipo de datos JSON

Se aplica a: SQL Server 2025 (17.x) Base de datos SQL de Azure SQL Database deAzure SQL Managed Instanceen Microsoft Fabric

El tipo de datos json almacena documentos JSON en un formato binario nativo.

El tipo json proporciona un almacenamiento de alta fidelidad de documentos JSON optimizados para facilitar la consulta y manipulación, y proporciona las siguientes ventajas sobre el almacenamiento de datos JSON como varchar o nvarchar:

  • Lecturas más eficaces, ya que el documento ya está analizado
  • Escrituras más eficaces, ya que la consulta puede actualizar valores individuales sin tener que acceder a todo el documento
  • Almacenamiento más eficaz, optimizado para compresión
  • Sin cambios en la compatibilidad con el código existente

El tipo json almacena internamente los datos mediante codificación UTF-8, Latin1_General_100_BIN2_UTF8. Este comportamiento coincide con la especificación JSON.

Para obtener más información sobre cómo consultar datos JSON, consulte Datos JSON en SQL Server.

Sintaxis de ejemplo

La sintaxis de uso del tipo json es similar a todos los demás tipos de datos de SQL Server de una tabla.

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

El tipo de datos json se puede usar en la definición de columna contenida en una CREATE TABLE instrucción . Por ejemplo:

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

Las restricciones se pueden especificar como parte de la definición de columna. Por ejemplo:

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

Disponibilidad de funcionalidades

La compatibilidad con funciones JSON se introdujo por primera vez en SQL Server 2016 (13.x). El tipo nativo json se introdujo en Azure SQL Database y Azure SQL Managed Instance, y también está disponible en SQL Server 2025 (17.x).

El tipo de datos json está disponible en todos los niveles de compatibilidad de la base de datos.

Note

El tipo de datos JSON:

  • está disponible con carácter general para Azure SQL Database e Instancia administrada de Azure SQL con la directiva de actualización de sql Server 2025 o Always-up-to-date.
  • está en versión preliminar para SQL Server 2025 (17.x) y SQL Database en Fabric.

Método modify

Note

El modify método está actualmente en versión preliminar y solo disponible en SQL Server 2025 (17.x).

El tipo de datos json admite el modify método . Use modify para modificar documentos JSON almacenados en una columna. El modify método tiene optimizaciones para realizar modificaciones en contexto en los datos siempre que sea posible, y es la manera preferida de modificar un documento JSON en una columna json .

En el caso de las cadenas JSON, si el nuevo valor es menor o igual que el valor existente, es posible realizar modificaciones en contexto.

En el caso de los números JSON, si el nuevo valor es del mismo tipo o dentro del intervalo del valor existente, es posible realizar modificaciones en contexto.

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;

Compatibilidad con funciones

Todas las funciones JSON admiten el tipo de datos json sin cambios de código ni diferencias de uso necesarias.

  • OPENJSON actualmente no admite el tipo de datos json en algunas plataformas. Para más información, consulte las limitaciones.

Para obtener una lista completa de las funciones JSON, consulte Funciones JSON.

Indexes

No hay ningún tipo de índice especial para los datos JSON.

El tipo json no se puede usar como columna de clave en una CREATE INDEX instrucción . Sin embargo, se puede especificar una columna json como una columna incluida en una definición de índice. Además, una columna json puede aparecer en la WHERE cláusula de un índice filtrado.

Conversion

La conversión explícita mediante CAST o CONVERT desde el tipo json se puede realizar en tipos char, nchar, varchar y nvarchar . No se permiten todas las conversiones implícitas, de forma similar al comportamiento de xml. Del mismo modo, solo char, nchar, varchar y nvarchar se pueden convertir explícitamente al tipo de datos json .

El tipo de datos json no se puede usar con el tipo sql_variant ni asignarse a una variable o columna de sql_variant . Esta restricción es similar a los tipos de datos basados en varchar(max), varbinary(max), nvarchar(max), xml y CLR.

Puede convertir columnas existentes como varchar(max) en json mediante ALTER TABLE. De forma similar al tipo de datos xml , no se puede convertir una columna json en ninguno de los tipos binarios o de cadena mediante ALTER TABLE.

Para obtener más información, consulte Conversión de tipos de datos (motor de base de datos).

Compatibility

El tipo de datos json se puede usar como parámetro o tipo de valor devuelto en una función definida por el usuario o como parámetro de un procedimiento almacenado. El tipo json es compatible con desencadenadores y vistas.

Actualmente, el formato nativo de la herramienta bcp contiene el documento json como varchar o nvarchar. Debe especificar un archivo de formato para designar una columna json .

No se permite la creación de tipo de alias mediante CREATE TYPE para el tipo de datos json . Este comportamiento es el mismo que el tipo de datos xml .

El uso SELECT ... INTO con el tipo de datos json crea una tabla con el tipo json .

Limitations

El comportamiento de devuelve un tipo de CAST ( ... AS JSON) datos json , pero el procedimiento almacenado del sistema sp_describe_first_result_set no devuelve correctamente el tipo de datos json . Por lo tanto, muchos clientes y controladores de acceso a datos ven un tipo de datos varchar o nvarchar .

  • Actualmente, TDS >= 7.4 (con UTF-8) ve varchar(max) con Latin_General_100_bin2_utf8.
  • Actualmente, TDS < 7.4 ve nvarchar(max) con intercalación de base de datos.

Actualmente, la OPENJSON() función no acepta el tipo de datos json en algunas plataformas. Actualmente, es una conversión implícita. Convierta explícitamente en nvarchar(max) primero.

Limitaciones de tamaño

Límites de tamaño de los datos JSON en el almacenamiento:

Campo Limitación
Tamaño del tipo de datos JSON (binario) Hasta 2 GB
Número de claves únicas Hasta 32 000
Por tamaño de cadena de clave 7998 bytes
Tamaño de valor por cadena bytes de 536870911
Número de propiedades en un objeto Hasta 65535
Número de elementos de una matriz Hasta 65535
Número de niveles anidados en el documento JSON 128