TSQL JSON文字列の数値の場合、Key-Value値は引用符で囲まれていない可能性がありますが、キーコンポーネントはalwaysを引用符で囲む必要があるようです。
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 [〜#〜] 表記定義は次のスキーマに従います。
stringの定義は次のとおりです。
引用符は最初と最後の両方で必須であることがわかります。
valueの定義は次のとおりです。
ここではstringまたはnumberを指定できることに注意してください。numberは次のとおりです。
結論:
JSONがこの特定のスキーマを採用した理由に答えることはできず、ここでの応答は意見に基づく可能性があります。
SQL Serverは、文字列データ型(VARCHAR
やNVARCHAR
など)を介して整数を処理する場合、常にパフォーマンスが向上します。これは、SQL Serverがより高速に操作および比較できるためですが、データ型が実際に数値型であり、文字列として保存された数値ではありません。