Sql-Server

必須引用數字 JSON 鍵嗎?

  • April 10, 2019

我注意到,當 TSQL JSON 字元串中的數字時,鍵值可能不被引用,但似乎關鍵組件必須始終被引用。

select 1, isjson(''), 'empty string' union
select 2, isjson('{}'), 'empty braces' union
select 3, isjson('{1:2}'), 'unquoted both, numerals both' union
select 4, isjson('{1:"2"}'), 'unquoted key, numerals both' union
select 5, isjson('{"1":2}'), 'unquoted value, numerals both' union
select 6, isjson('{"1":"2"}'), 'quoted both, numerals both' union
select 7, isjson('{a:b}'), 'unquoted both, alpha both' union
select 8, isjson('{a:"b"}'), 'unquoted key, alpha both' union
select 9, isjson('{"a":b}'), 'unquoted value, alpha both' union
select 10, isjson('{"a":"b"}'), 'quoted both, alpha both'
order by 1
;

結果:

1   0   empty string
2   1   empty braces
3   0   unquoted both, numerals both
4   0   unquoted key, numerals both
5   1   unquoted value, numerals both
6   1   quoted both, numerals both
7   0   unquoted both, alpha both
8   0   unquoted key, alpha both
9   0   unquoted value, alpha both
10  1   quoted both, alpha both

以上證明了這一點,但我的問題是:

  1. 一定要一直這樣嗎?(是否有可以覆蓋此行為的配置?)
  2. 此行為是由 JSON 還是 SQL Server 指定的?
  3. 這個設計決定背後的理由是什麼?
  4. 如果 SQL Server 自動將不帶引號的數字轉換為整數,是否會帶來性能優勢?

JSON表示法定義遵循以下模式:

[

字元串的定義如下:

在此處輸入圖像描述

您可以看到引號在開頭和結尾都是強制性的。

的定義如下:

在此處輸入圖像描述

請注意,您可以在此處提供字元串數字數字為:

在此處輸入圖像描述

結論

  • 鍵的開頭和結尾都必須有引號。
  • 如果您提供數字,則可以避免在值端使用引號。

我無法回答為什麼 JSON 採用這種特定模式,並且這裡的響應可能是基於意見的。

VARCHARSQL Server 在處理整數而不是字元串數據類型(如or )時總是會提高性能,NVARCHAR因為它們的操作和比較速度更快,但要確保數據類型實際上是數字類型,而不是儲存為字元串的數字。

引用自:https://dba.stackexchange.com/questions/234394