Поделиться через


Идентификаторы (язык Entity SQL)

В языке Entity SQL идентификаторы используются, чтобы представлять псевдонимы выражений запросов, ссылки на переменные, свойства объектов, функции и так далее. В языке Entity SQL имеются два вида идентификаторов: простые идентификаторы и заключенные в кавычки идентификаторы.

Простые идентификаторы

Простой идентификатор в языке Entity SQL — это последовательность алфавитно-цифровых символов и подчеркиваний. Первым символом в идентификаторе должен быть алфавитный символ (a-z или A-Z).

Заключенные в кавычки идентификаторы

Заключенный в кавычки идентификатор — это любая последовательность символов, заключенная в квадратные скобки ([]). Заключенные в кавычки идентификаторы позволяют задавать идентификаторы с символами, которые нельзя использовать в простых идентификаторах. Все символы внутри квадратных скобок становятся частью идентификатора, включая все пробелы.

Заключенный в кавычки идентификатор не может содержать следующие символы.

  • Перевод строки.

  • Возврат каретки.

  • Табуляция.

  • Возврат на одну позицию назад.

  • Дополнительные квадратные скобки (то есть квадратные скобки внутри квадратных скобок, выделяющих идентификатор).

Заключенный в кавычки идентификатор может содержать символы Юникода.

Как показано в следующем примере, заключенные в кавычки идентификаторы позволяют создавать символы для имен свойств, которые нельзя использовать в простых идентификаторах:

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, включая следующие конструкции 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, в область from не добавляются. В ссылке на них следует всегда использовать имя псевдонима. Обычно считается, что все части выражения SELECT находятся в области from.

Предложение GROUP BY также вводит новую область одного уровня. Каждая группа может иметь имя группы, которое ссылается на коллекцию элементов в группе. Каждое выражение группирования также вводит новое имя в область группы. Кроме того, в эту область также добавляется статистическое выражение вложения (или группа с именем). Сами выражения группирования находятся в области from. Однако при использовании предложения GROUP BY считается, что список выбора (проекция), предложение HAVING и предложение ORDER BY находятся в области группы, а не в области from. Статистические выражения обрабатываются особым образом, как описано в следующем маркированном списке.

Далее приведены дополнительные замечания об областях.

  • Список выбора может вводить в область новые имена по порядку. Расположенные справа выражения проекций могут ссылаться на имена в проекциях слева.

  • Предложение 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))

См. также

Основные понятия

Справочник по Entity SQL
Общие сведения о языке Entity SQL
Входная кодировка (язык Entity SQL)