Compartir a través de


Tipo de datos JSON (versión preliminar)

Se aplica a: Azure SQL Database Azure SQL Managed Instance

Nuevo tipo de datos json nativo que 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 en 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 json se puede usar en la definición de columna contenida en una instrucción CREATE TABLE, 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 características

La compatibilidad con JSON se introdujo por primera vez en SQL Server 2016 (13.x), principalmente en forma de funciones JSON. El nuevo tipo json nativo se introdujo en 2024, primero en las plataformas de Azure SQL.

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

Soporte de funciones

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

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

Índices

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 instrucción CREATE INDEX. 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 cláusula WHERE de un índice filtrado.

Conversión

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

El tipo 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.

Para más información, vea Conversión de tipos de datos.

Compatibilidad

El tipo 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 de tipo de datos json.

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

El uso SELECT ... INTO con el tipo JSON creará una tabla con el tipo JSON.

Limitaciones

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

    • Actualmente, la compatibilidad con TDS >= 7.4 (con UTF-8) verá varchar(max) con Latin_General_100_bin2_utf8.
    • Actualmente, la compatibilidad con TDS < 7.4 verá nvarchar(max) con intercalación de base de datos.
  • Actualmente, la función OPENJSON() no acepta el tipo json, actualmente que es una conversión implícita. Convierta explícitamente en nvarchar(max) primero.