適用於: SQL Server 2025 (17.x)
Azure SQL Database Azure
SQL Managed Instance
SQL database in Microsoft Fabric
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)
);
功能可用性
JSON 函式支援最初是在 SQL Server 2016 中引進的(13.x)。 原生 json 類型是在 Azure SQL 資料庫和 Azure SQL Managed Instance 中引入的,並且在 SQL Server 2025(17.x)中也有提供。
json 資料類型可在所有資料庫相容性層級下使用。
Note
- 適用於具有 SQL Server 2025 或 一律up-to日期更新原則的 Azure SQL 資料庫和 Azure SQL 受控執行個體。
- 目前正處於 SQL Server 2025(17.x)的預覽版,並支援 Fabric 中的 SQL 資料庫。
修改方法
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) ) 轉換為 ALTER TABLE 。 與 xml 資料類型類似,您無法使用 將 ALTER TABLE 資料行轉換為任何字串或二進位類型。
如需詳細資訊,請參閱資料類型轉換 (資料庫引擎)。
Compatibility
json 資料類型可以作為使用者定義函式中的參數或傳回類型,或預存程序的參數。 json 類型與觸發程式和檢視相容。
目前 ,bcp 工具的原生格式包含 json 檔作為 varchar 或 nvarchar。 您必須指定格式檔案才能指定 json 資料行。
不允許建立 CREATE TYPE 用於 json 資料類型的別名類型。 此行為與 xml 資料類型相同。
搭配 SELECT ... INTO 資料類型使用 會建立具有 json 類型的表格。
Limitations
的 CAST ( ... AS JSON) 行為會傳回 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 |