Tipo de dados JSON (versão preliminar)

Aplica-se a: Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure

O novo tipo de dados JSON nativo que armazena documentos JSON em um formato binário nativo.

O tipo JSON fornece armazenamento de alta fidelidade de documentos JSON otimizado para fácil consulta e manipulação e oferece os seguintes benefícios em relação ao armazenamento de dados JSON em varchar ou nvarchar:

  • Leituras mais eficientes, pois o documento já foi analisado
  • Gravações mais eficientes, pois a consulta pode atualizar valores individuais sem acessar o documento inteiro
  • Armazenamento mais eficiente, otimizado para compactação
  • Nenhuma alteração na compatibilidade com o código existente

O tipo JSON armazena dados internamente usando codificação UTF-8, Latin1_General_100_BIN2_UTF8. Esse comportamento corresponde à especificação JSON.

Para obter mais informações sobre como consultar dados JSON, consulte Dados JSON no SQL Server.

Sintaxe de exemplo

A sintaxe de uso do tipo JSON é semelhante a todos os outros tipos de dados do SQL Server em uma tabela.

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

O tipo JSON pode ser usado na definição de colunas contidas em uma instrução CREATE TABLE, por exemplo:

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

As restrições podem ser especificadas como parte da definição da coluna, por exemplo:

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

Disponibilidade de recursos

O suporte a JSON foi introduzido pela primeira vez no SQL Server 2016 (13.x), principalmente na forma de funções JSON. O novo tipo JSON nativo foi introduzido em 2024, primeiro nas plataformas SQL do Azure.

JSON está disponível em todos os níveis de compatibilidade do banco de dados.

Suporte de função

Todas as funções JSON dão suporte ao tipo JSON sem necessidade de alterações de código ou diferença de uso.

Para obter uma lista completa de funções JSON, confira Funções JSON.

Índices

Não há tipos de índice especiais para dados JSON.

O tipo JSON não pode ser usado como coluna de chave em uma instrução CREATE INDEX. No entanto, uma coluna JSON pode ser especificada como uma coluna incluída em uma definição de índice. Além disso, uma coluna JSON pode ser mostrada na cláusula WHERE de um índice filtrado.

Conversão

A conversão explícita usando CAST ou CONVERT do tipo JSON pode ser feita para tipos char, nchar, varchar e nvarchar. Todas as conversões implícitas não são permitidas, o que é semelhante ao comportamento do xml. Da mesma forma, apenas char, nchar, varchar e nvarchar podem ser convertidos explicitamente no tipo json.

O tipo JSON não pode ser usado com o tipo sql_variant nem atribuído a uma variável ou coluna sql_variant. Essa restrição é semelhante a varchar(max), varbinary(max), nvarchar(max), xml e tipos de dados com base em CLR.

Para obter mais informações, consulte Conversão de tipo de dados.

Compatibilidade

O tipo JSON pode ser usado como parâmetro ou tipo de retorno em uma função definida pelo usuário ou como parâmetro de um procedimento armazenado. O tipo JSON é compatível com gatilhos e exibições.

No momento, o formato nativo da ferramenta bcp contém o documento JSON como varchar ou nvarchar. Você deve especificar um arquivo de formato para designar uma coluna de tipo de dados JSON.

A criação do tipo de alias usando o tipo CREATE TYPE JSON não é permitida. Esse é o mesmo comportamento do tipo xml.

Usar SELECT ... INTO com o tipo JSON criará uma tabela com o tipo JSON.

Limitações

  • O comportamento de CAST ( ... AS JSON) retorna um tipo JSON, mas o procedimento armazenado do sistema sp_describe_first_result_set não retorna corretamente o tipo de dados JSON. Portanto, muitos clientes e drivers de acesso a dados verão um tipo de dados varchar ou nvarchar.

    • No momento, o suporte TDS >= 7.4 (com UTF-8) verá varchar(max) com Latin_General_100_bin2_utf8.
    • No momento, o suporte do TDS < 7.4 verá nvarchar(max) com ordenação de banco de dados.
  • No momento a função OPENJSON() não aceita o tipo JSON; atualmente, é uma conversão implícita. Converta explicitamente para nvarchar(max) primeiro.