共用方式為


JSON 數據類型

適用於: SQL Server 2025 (17.x) Azure SQL Database AzureSQL Managed InstanceSQL database in Microsoft Fabric

json 資料類型會以原生二進位格式儲存 JSON 文件。

json 類型提供針對輕鬆查詢和操作進行最佳化的 JSON 文件的高保真儲存,並提供下列將 JSON 資料儲存為 varcharnvarchar 的優點:

  • 更有效率的讀取,因為已將文件剖析
  • 更有效率的寫入,因為查詢可以更新個別值,而不需要存取整份文件
  • 更有效率的儲存體,已針對壓縮進行最佳化
  • 與現有程式碼的相容性沒有變更

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

JSON 資料類型

  • 適用於具有 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

使用 CASTCONVERTjson 類型進行明確轉換,可以完成 charncharvarcharnvarchar 類型。 不允許所有隱含轉換,類似於 xml 的行為。 同樣地,只有 charncharvarcharnvarchar 可以明確轉換為 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 檔作為 varcharnvarchar。 您必須指定格式檔案才能指定 json 資料行。

不允許建立 CREATE TYPE 用於 json 資料類型的別名類型。 此行為與 xml 資料類型相同。

搭配 SELECT ... INTO 資料類型使用 會建立具有 json 類型的表格。

Limitations

CAST ( ... AS JSON) 行為會傳回 json 資料類型,但 sp_describe_first_result_set 系統預存程序不會正確傳回 json 資料類型。 因此,許多資料存取用戶端和驅動程式都會看到 varcharnvarchar 資料類型。

  • 目前,TDS >= 7.4 (含 UTF-8) 會看見 varchar(max)Latin_General_100_bin2_utf8
  • 目前,TDS < 7.4 會看到具有資料庫定序的 nvarchar(max)。

目前,該 OPENJSON() 函數在某些平台中不接受 json 資料類型。 目前,這是一個隱含的轉換。 先明確地轉換成 nvarchar(max)

尺寸限制

儲存體中 JSON 資料的大小限制:

領域 限度
JSON 資料類型大小 (二進位) 高達 2GB
唯一索引鍵數目 高達 32K
每個按鍵字串大小 7998 位元組
每個字串值大小 536870911位元組
一個物件中的屬性數目 最高 65535
一個陣列中的元素數 最高 65535
JSON 文件中的巢狀層級數目 128