Tipo de dados JSON (visualização)
Aplica-se a:Banco de Dados SQL do AzureInstância Gerenciada SQL do Azure
O novo nativo json tipo de dados que armazena documentos JSON em um formato binário nativo.
O tipo json fornece um armazenamento de alta fidelidade de documentos JSON otimizado para fácil consulta e manipulação, e fornece os seguintes benefícios sobre o armazenamento de dados JSON em varchar ou nvarchar:
- Leituras mais eficientes, pois o documento já está 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 internamente dados 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 para o tipo de json
column_name JSON [NOT NULL | NULL] [CHECK(constraint_expression)] [DEFAULT(default_expression)]
O tipo json pode ser usado na definição de coluna contida 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 de 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 de
JSON está disponível em todos os níveis de compatibilidade de banco de dados.
Observação
O do tipo de dados JSON
Suporte de função
Todas as funções JSON suportam o tipo de json
Para obter uma lista completa das funções JSON, consulte funções JSON.
Índices
Não há tipos de índice especiais para dados JSON.
O json type 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 aparecer 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 char, nchar, varchare tipos de nvarchar. Todas as conversões implícitas não são permitidas, semelhante ao comportamento de xml. Da mesma forma, apenas
O tipo json não pode ser usado com o tipo sql_variant ou atribuído a uma variável ou coluna sql_variant. Essa restrição é semelhante a varchar(max), varbinary(max), nvarchar(max), xmle tipos de dados baseados em CLR.
Você pode converter colunas existentes, como uma coluna varchar(max) para json usando ALTER TABLE
. Semelhante ao tipo de dados xml, não é possível converter uma coluna json em qualquer uma das cadeias de caracteres ou tipos binários usando ALTER TABLE
.
Para obter mais informações, consulte Conversão de tipo de dados.
Compatibilidade
O json type pode ser usado como um parâmetro ou tipo de retorno em uma função definida pelo usuário, ou o parâmetro de um procedimento armazenado. O tipo json é compatível com gatilhos e visualizações.
Atualmente, o formato nativo da ferramenta bcp contém o json documento como varchar ou nvarchar. Você deve especificar um arquivo de formato para designar uma coluna json tipo de dados.
A criação de tipo de alias usando CREATE TYPE
para o tipo json não é permitida. Esse é o mesmo comportamento que tipo de xml.
Usar SELECT ... INTO
com o tipo JSON cria uma tabela com o tipo JSON.
Limitações
O comportamento de
retorna um tipo de json , mas o procedimento armazenado do sistema sp_describe_first_result_set não retorna corretamente o tipo de dadosjson . Portanto, muitos clientes de acesso a dados e driver verão um varchar ou nvarchar tipo de dados.- Atualmente, TDS >= 7.4 (com UTF-8) vê varchar(max) com
Latin_General_100_bin2_utf8
. - Atualmente, o TDS < 7.4 vê nvarchar(max) com agrupamento de banco de dados.
- Atualmente, TDS >= 7.4 (com UTF-8) vê varchar(max) com
Atualmente, a função
OPENJSON()
não aceita o tipo json, atualmente essa é uma conversão implícita. Converta explicitamente para nvarchar(max) primeiro.