Tipo de datos JSON (versión preliminar)
Se aplica a: Azure SQL Database
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 Trabajar con 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.
Nota:
Actualmente, el tipo json está disponible en versión preliminar en la base de datos de Azure SQL.
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 compatibilidad con TDS >= 7.4 (con UTF-8) verá varchar(max) con
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.