Sql-Server
必須引用數字 JSON 鍵嗎?
我注意到,當 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
以上證明了這一點,但我的問題是:
- 一定要一直這樣嗎?(是否有可以覆蓋此行為的配置?)
- 此行為是由 JSON 還是 SQL Server 指定的?
- 這個設計決定背後的理由是什麼?
- 如果 SQL Server 自動將不帶引號的數字轉換為整數,是否會帶來性能優勢?
JSON表示法定義遵循以下模式:
[
字元串的定義如下:
您可以看到引號在開頭和結尾都是強制性的。
該值的定義如下:
請注意,您可以在此處提供字元串或數字,數字為:
結論:
- 鍵的開頭和結尾都必須有引號。
- 如果您提供數字,則可以避免在值端使用引號。
我無法回答為什麼 JSON 採用這種特定模式,並且這裡的響應可能是基於意見的。
VARCHAR
SQL Server 在處理整數而不是字元串數據類型(如or )時總是會提高性能,NVARCHAR
因為它們的操作和比較速度更快,但要確保數據類型實際上是數字類型,而不是儲存為字元串的數字。