共用方式為


識別碼 (Entity SQL)

Entity SQL 中會使用標識符來表示查詢表達式別名、變數參考、物件屬性、函式等等。 Entity SQL 提供兩種標識碼:簡單識別碼和引號標識碼。

簡單標識碼

Entity SQL 中的簡單識別碼是英數位元和底線字元序列。 標識元的第一個字元必須是字母字元(a-z 或 A-Z)。

引號識別符

引號標識碼是以方括號 ([]] 括住的任何字元序列。 引號識別碼可讓您使用標識碼中無效的字元來指定識別碼。 方括弧之間的所有字元都會成為標識碼的一部分,包括所有空格符。

引號識別碼不能包含下列字元:

  • 換行符。

  • 歸位字元。

  • 製表元。

  • Backspace。

  • 其他方括弧(也就是說,方括弧內的方括弧會劃出標識符)。

引號標識碼可以包含 Unicode 字元。

引號標識碼可讓您建立在標識碼中無效的屬性名稱字元,如下列範例所示:

SELECT c.ContactName AS [Contact Name] FROM customers AS c

您也可以使用引號識別碼來指定 Entity SQL 保留關鍵詞的識別碼。 例如,如果類型 Email 具有名為 「From」 的屬性,您可以使用方括號將其從保留關鍵詞 FROM 中釐清,如下所示:

SELECT e.[From] FROM emails AS e

您可以在點 (.) 運算子右側使用引號識別碼。

SELECT t FROM ts as t WHERE t.[property] == 2

若要在標識碼中使用方括弧,請新增額外的方括弧。 在下列範例中,「abc]是標識碼:

SELECT t from ts as t WHERE t.[abc]]] == 2

如需引號標識碼比較語意,請參閱 輸入字元集

別名規則

建議您視需要在 Entity SQL 查詢中指定別名,包括下列 Entity SQL 建構:

  • 數據列建構函式的欄位。

  • 查詢表達式之FROM子句中的專案。

  • 查詢表達式之 SELECT 子句中的專案。

  • 查詢表達式之 GROUP BY 子句中的專案。

有效的別名

Entity SQL 中有效的別名是任何簡單的標識碼或引號標識碼。

別名產生

如果在 Entity SQL 查詢表示式中未指定別名,Entity SQL 會根據下列簡單規則嘗試產生別名:

  • 如果查詢表達式 (別名未指定) 是簡單或加上引號的標識碼,該標識符會當做別名使用。 例如,ROW(a, [b]) 會成為 ROW(a AS a, [b] AS [b])

  • 如果查詢表達式是更複雜的表達式,但該查詢表達式的最後一個元件是簡單的標識符,則會使用該標識碼作為別名。 例如,ROW(a.a1, b.[b1]) 會成為 ROW(a.a1 AS a1, b.[b1] AS [b1])

如果您想要稍後使用別名名稱,建議您不要使用隱含別名。 每當別名(隱含或明確)衝突或重複在同一個範圍中時,都會發生編譯錯誤。 即使有相同名稱的明確或隱含別名,隱含別名也會傳遞編譯。

隱含別名會根據使用者輸入自動產生。 例如,下列程式代碼行會產生 NAME 作為兩個數據行的別名,因此將會衝突。

SELECT product.NAME, person.NAME

下列使用明確別名的程式代碼行也會失敗。 不過,讀取程式代碼會更明顯失敗。

SELECT 1 AS X, 2 AS X …

範圍規則

Entity SQL 定義範圍規則,以判斷查詢語言中何時顯示特定變數。 某些表達式或語句引進新名稱。 範圍規則會決定可以使用這些名稱的位置,以及具有與另一個相同名稱的新宣告何時或何處可以隱藏其前置專案。

在 Entity SQL 查詢中定義名稱時,據說會在範圍內定義名稱。 範圍涵蓋整個查詢區域。 特定範圍內的所有表達式或名稱參考都可以看到在該範圍內定義的名稱。 在範圍開始和結束之前,無法參考範圍內定義的名稱。

範圍可以是巢狀的。 Entity SQL 的元件引進涵蓋整個區域的新範圍,而且這些區域可以包含其他也引進範圍的 Entity SQL 運算式。 當範圍是巢狀的時,可以對最內層範圍中定義的名稱進行參考,其中包含參考。 您也可以對任何外部範圍中定義的任何名稱進行參考。 在相同範圍中定義的任何兩個範圍都會被視為同層級範圍。 無法參考在同層級範圍內定義的名稱。

如果內部範圍中宣告的名稱符合外部範圍中宣告的名稱,則內部範圍或在該範圍內宣告的範圍內的參考只會參考新宣告的名稱。 外部範圍中的名稱已隱藏。

即使在相同的範圍內,在定義名稱之前,也無法參考名稱。

全域名稱可以存在於執行環境的一部分。 這可以包含永續性集合或環境變數的名稱。 若要讓名稱成為全域,它必須在最外層的範圍中宣告。

參數不在範圍內。 因為參數的參考包含特殊語法,所以參數的名稱永遠不會與查詢中的其他名稱相撞。

查詢表達式

Entity SQL 查詢表達式引進了新的範圍。 FROM 子句中定義的名稱會依外觀順序從範圍引入,由左至右。 在聯結清單中,表達式可以參考先前在清單中定義的名稱。 FROM 子句中所識別專案的公用屬性(欄位等)不會新增至from-scope。 它們必須一律由別名限定名稱參考。 一般而言,SELECT 運算式的所有部分都會考慮在from-scope內。

GROUP BY 子句也會引進新的同層級範圍。 每個群組都可以有一個組名,該組會參考群組中的元素集合。 每個群組表達式也會在群組範圍中引進新的名稱。 此外,巢狀匯總(或具名群組)也會新增至範圍。 群組表達式本身位於from-scope內。 不過,使用 GROUP BY 子句時,select-list (projection)、HAVING 子句和 ORDER BY 子句會被視為在群組範圍內,而不是 from-scope。 匯總會收到特殊處理,如下列點符清單所述。

以下是有關範圍的其他注意事項:

  • 選取清單可以依序將新名稱引入範圍。 右邊的投影表示式可能會參考左側投影的名稱。

  • ORDER BY 子句可以參考選取清單中指定的名稱(別名)。

  • SELECT 運算式中子句評估的順序會決定名稱引入範圍的順序。 首先會評估FROM子句,後面接著WHERE子句、GROUP BY子句、HAVING子句、SELECT子句,最後評估ORDER BY子句。

匯總處理

Entity SQL 支援兩種匯總形式:集合型匯總和群組型匯總。 以集合為基礎的匯總是 Entity SQL 中慣用的建構,而且支援以群組為基礎的匯總,以符合 SQL 相容性。

解析匯總時,Entity SQL 會先嘗試將它視為以集合為基礎的匯總。 如果失敗,Entity SQL 會將匯總輸入轉換成巢狀匯總的參考,並嘗試解析這個新的表達式,如下列範例所示。

AVG(t.c) becomes AVG(group..(t.c))

另請參閱