完全修飾または部分修飾の列参照とJSON型ドット表記参照の両方に一致する構文を特徴とするリクエストを解析するとき、次の論理を使用します。
テーブルを指定した列参照
次の論理を使用して、table.column形式の標準的な列参照と、name1.name2形式でのJSONインスタンスのエンティティへの参照を区別します。
- 標準的な解決に成功した場合、その参照は標準的なtable.column参照として解釈されます。
- それ以外の場合、name1という名前のJSON列を含むソース テーブルが1つある場合、その参照は、name1.と呼ばれるJSON列のname2という名前のエンティティへの参照として解釈されます。
name1という名前のJSON列を含んでいるソース テーブルが複数ある場合、曖昧性エラーが返されます。
- name1という名前のJSON列を含むソース テーブルが存在しない場合は、エラーが返されます。
テーブルとデータベースを指定した列参照
次の論理を使用して、database.table.column形式の標準的な列参照と、name1.name2.name3...nameN形式でのJSONインスタンスのエンティティへの参照を区別します。
- 標準的な解決に成功し名前が4つ以上ある場合、その参照はname1.name2.name3と呼ばれるJSON列のname4…nameNという名前のエンティティへの参照として解釈されます。列がJSON列でない場合はエラーが返されます。
名前が3つある場合は、その参照は標準のdatabase.table.column参照として解釈されます。
- それ以外の場合、標準の解決が成功しなければ、標準の曖昧性除去ロジックが次のように使用されます。
- name1という名前のソース テーブルが存在し、そのテーブルにname2という名前のJSON列がある場合は、その参照はname1.name2と呼ばれるJSON列のname3…nameNという名前のエンティティへの参照として解釈されます。それ以外の場合、列name2が見つからないことを示すエラーが返されます。
- name1という名前のJSON列を含むソース テーブルが1つある場合、その参照は、1つのソース テーブルにあるname1と呼ばれるJSON列のname2…nameNという名前のエンティティへの参照として解釈されます。
name1という名前のJSON列を含んでいるソース テーブルが複数ある場合、曖昧性エラーが返されます。
- name2という名前のJSON列を含んでいるname1という名前の現在のデータベースにテーブルが1つ存在する場合、参照は、CurrentDatabase.name1.name2と呼ばれるJSON列のname3…nameNと呼ばれるエンティティへの参照として解釈されます。
- それ以外の場合、処理は標準のエラー処理を続行します。