适用于:Microsoft Fabric 中的 SQL Server 2025 (17.x)
Azure SQL 数据库
Azure SQL 托管实例 SQL 数据库
json 数据类型以本机二进制格式存储 JSON 文档。
json 类型提供经过优化的 JSON 文档的高保真存储,以便轻松进行查询和作,并提供以下优势:将 JSON 数据存储为 varchar 或 nvarchar:
- 提高读取效率,因为文档已经过分析
- 提高写入效率,因为查询可以在不访问整个文档的情况下更新单个值
- 提高存储效率,针对压缩进行优化
- 仍与现有代码相兼容
json 类型使用 UTF-8 编码 Latin1_General_100_BIN2_UTF8 在内部存储数据。 此行为与 JSON 规范相符。
有关查询 JSON 数据的详细信息,请参阅 SQL Server 中的 JSON 数据。
示例语法
json 类型的使用语法类似于表中的所有其他 SQL Server 数据类型。
column_name JSON [ NOT NULL | NULL ] [CHECK ( constraint_expression ) ] [ DEFAULT ( default_expression ) ]
json 数据类型可用于语句中包含的CREATE TABLE列定义中。 例如:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
);
可以将约束指定为列定义的一部分。 例如:
CREATE TABLE Orders
(
order_id INT,
order_details JSON NOT NULL
CHECK (JSON_PATH_EXISTS(order_details, '$.basket') = 1)
);
功能可用性
SQL Server 2016(13.x)中首次引入了 JSON 函数支持。 原生 json 类型首次应用于Azure SQL Database和Azure SQL Managed Instance,SQL Server 2025(17.x)也提供了。
json 数据类型在所有数据库兼容性级别下可用。
Note
- 适用于具有 SQL Server 2025 或 Always-up-to-date更新策略的 Azure SQL 数据库和 Azure SQL 托管实例。
- 为 Sql Server 2025(17.x)和 Fabric 中的 SQL 数据库提供预览版。
modify 方法
Note
该 modify 方法目前处于预览阶段,仅在 SQL Server 2025(17.x)中可用。
json 数据类型支持modify该方法。 用于 modify 修改存储在列中的 JSON 文档。 此方法 modify 具有优化,可在可能的情况下对数据执行就地修改,并且是修改 json 列中 JSON 文档的首选方法。
对于 JSON 字符串,如果新值小于或等于现有值,则可以就地修改。
对于 JSON 数字,如果新值的类型相同,或位于现有值范围内,则可以就地修改。
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;
函数支持
所有 JSON 函数都支持 json 数据类型,无需更改代码或使用差异。
-
OPENJSON当前不支持某些平台上的 json 数据类型。 有关详细信息,请参阅 “限制”。
有关 JSON 函数的完整列表,请参阅 JSON 函数。
Indexes
JSON 数据没有特殊的索引类型。
json 类型不能用作 CREATE INDEX 语句中的键列。 但是,json 列可以指定为索引定义中包含的列。 此外,json 列可以出现在筛选索引的 WHERE 子句中。
Conversion
可以使用 CAST 或 CONVERT 从 json 类型以显式方式转换为 char、nchar、varchar 和 nvarchar 类型。 不允许进行所有隐式转换,这类似于 xml 的行为。 同样,只能将 char、 nchar、 varchar 和 nvarchar 显式转换为 json 数据类型。
json 数据类型不能与sql_variant类型一起使用,也不能分配给sql_variant变量或列。 此限制类似于 varchar(max)、varbinary(max)、nvarchar(max)、xml 和基于 CLR 的数据类型。
可以使用 varchar(max) 等现有列转换为 jsonALTER TABLE。 与 xml 数据类型类似,不能使用任何字符串或二进制类型将 ALTER TABLE 列转换为任何字符串或二进制类型。
有关详细信息,请参阅数据类型转换(数据库引擎)。
Compatibility
json 数据类型可用作用户定义函数中的参数或返回类型,也可以用作存储过程的参数。 json 类型与触发器和视图兼容。
目前,bcp 工具的本机格式将 json 文档包含为 varchar 或 nvarchar。 必须指定格式化文件来指定 json 列。
不允许为 CREATE TYPEjson 数据类型创建别名类型。 此行为与 xml 数据类型相同。
与 SELECT ... INTOjson 数据类型一起使用将创建包含 json 类型的表。
Limitations
返回 CAST ( ... AS JSON) 数据类型的行为,但sp_describe_first_result_set系统存储过程无法正确返回 json 数据类型。 因此,许多数据访问客户端和驱动程序都会看到 varchar 或 nvarchar 数据类型。
- 目前,TDS >= 7.4(使用 UTF-8),varchar(max)
Latin_General_100_bin2_utf8。 - 目前,TDS < 7.4 看到具有数据库排序规则的 nvarchar(max)。
目前,该 OPENJSON() 函数不接受某些平台中的 json 数据类型。 目前,它是隐式转换。 首先以显式方式转换为 nvarchar(max)。
- 在SQL Server 2025(17.x)中,该
OPENJSON()函数支持 json。 有关详细信息,请参阅 SQL Server 2025 中的关键 JSON 功能。
大小限制
存储中 JSON 数据的大小限制:
| 领域 | 限度 |
|---|---|
| JSON 数据类型大小 (二进制) | 最多 2GB |
| 唯一键数 | 最多 32K |
| 每个键字符串大小 | 7998 字节 |
| 每个字符串值大小 | 536870911 字节 |
| 一个对象中的属性数 | 最多 65535 |
| 一个数组中的元素数 | 最多 65535 |
| JSON 文档中的嵌套级别数 | 128 |