2017-10-24 16 views
1

大文字と小文字が混在しているJSON列を照会しようとしています。残念ながらキーの大文字を無視してSQL ServerのJSON列をクエリする方法はありますか?

{"Type":"template","Name":"Screening2","Pages":[{"PageNumber":1,...} 

、SQL:

{"name":"Screening 1","type":"template","pages":[{"pageNumber":1,...} 

しかし、行の一部は次のようにその最初の文字の上に資産計上されるキーを持っている:例えば、一部の行はすべて小文字、以下のようなもので、キーを持っていますサーバーは、大文字と小文字を区別するJSONパスシステムのみをサポートしているようです。したがって、すべての行を正常に照会することはできません。私は以下のようなクエリで「$の.pages」のような小文字のパスを使用する場合:

SELECT ST.Id AS Screening_Tool_Id 
    , ST.Name AS Screening_Tool_Name 
    , ST.Description AS Screening_Tool_Description 
    , COUNT(JSON_VALUE (SRQuestions.value, '$.id')) AS Question_Specific_Id 

FROM dbo.ScreeningTemplate AS ST 
    CROSS APPLY OPENJSON(ST.Workflow, '$.pages') AS SRPages 
     CROSS APPLY OPENJSON(SRPages.Value, '$.sections') AS SRSections 

私は鍵を大文字にしている任意の行を欠場します。大文字と小文字を無視してすべての行を照会する方法はありますか?

答えて

1

MSによると、あなたは、大文字と小文字を区別したクエリで立ち往生しているように、見えます:

OPENJSONは、JSON配列を解析し、機能がキーとしてJSONテキストで 要素のインデックスを返します。 + JSON式のプロパティで のパスステップを一致させるための比較では、 の大文字と小文字の区別と照合非認識(つまり、BIN2の比較)です。 https://docs.microsoft.com/en-us/sql/t-sql/functions/openjson-transact-sql

のみバリエーションが最初の文字の大文字小文字にしている場合は、一緒にバリアントを持つクエリとUNION結果を作成することでこの制限を回避しようとすることができます。

+0

私もUNIONを使用することを考えていましたが、現時点では最良の方法のようです。すべてのJSONデータを書き直すよりも優れています。 –

関連する問題