Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Идентификаторы используются в 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
Идентификатор кавычки можно использовать справа от оператора dot (.).
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]).
Рекомендуется не использовать неявный псевдоним, если вы хотите использовать имя псевдонима позже. Любой раз, когда псевдонимы (неявные или явные) конфликтуют или повторяются в той же области, будет ошибка компиляции. Неявный псевдоним передает компиляцию, даже если есть явный или неявный псевдоним того же имени.
Неявные псевдонимы создаются автоматически на основе входных данных пользователя. Например, следующая строка кода создаст ИМЯ в качестве псевдонима для обоих столбцов и, следовательно, конфликтует.
SELECT product.NAME, person.NAME
Следующая строка кода, использующая явные псевдонимы, также завершится ошибкой. Однако сбой будет более очевидным путем чтения кода.
SELECT 1 AS X, 2 AS X …
Правила области видимости
Entity SQL определяет правила области, определяющие, когда определенные переменные видны на языке запросов. Некоторые выражения или операторы вводят новые имена. Правила области определяют, где можно использовать эти имена, и когда или где новое объявление с тем же именем, что и другой, может скрыть своего предшественника.
Когда имена определяются в запросе Entity SQL, они определяются в пределах области. Область охватывает весь регион запроса. Все выражения или ссылки на имена в определенной области могут видеть имена, определенные в этой области. До начала и окончания области имена, определенные в области, не могут ссылаться.
Области можно вложить. Части Entity SQL представляют новые области, охватывающие целые регионы, и эти регионы могут содержать другие выражения Entity SQL, которые также вводят области. При вложении областей ссылки можно делать с именами, определенными в самой внутренней области, содержащей ссылку. Ссылки также могут быть сделаны к любым именам, определенным в любых внешних областях. Все две области, определенные в одной области, считаются одноуровневой областью. Ссылки не могут быть сделаны к именам, определенным в пределах областей с общими элементами.
Если имя, объявленное в внутренней области, совпадает с именем, объявленным во внешней области, ссылки в пределах внутренней области или области, объявленные в этой области, ссылаются только на новое объявленное имя. Имя во внешней области скрыто.
Даже в той же области имена нельзя ссылаться до их определения.
Глобальные имена могут существовать в рамках среды выполнения. Это может включать имена постоянных коллекций или переменных среды. Чтобы имя было глобальным, оно должно быть объявлено в самой внешней области.
Параметры не находятся в области. Так как ссылки на параметры включают специальный синтаксис, имена параметров никогда не будут сталкиваться с другими именами в запросе.
Выражения запросов
Выражение запроса Entity SQL представляет новую область. Имена, определенные в предложении FROM, вводятся в область из области в порядке внешнего вида слева направо. В списке соединений выражения могут ссылаться на имена, определенные ранее в списке. Общедоступные свойства (поля и т. д.) элементов, определенных в предложении FROM, не добавляются в область из области. Они должны всегда ссылаться на имя, указанное в псевдониме. Как правило, все части выражения SELECT считаются в пределах области.
Предложение GROUP BY также представляет новую область с одноуровневой областью. Каждая группа может иметь имя группы, ссылающееся на коллекцию элементов в группе. Каждое выражение группировки также вводит новое имя в область группы. Кроме того, в область также добавляется вложенный агрегат (или именованной группы). Сами выражения группировки находятся в пределах области. Однако при использовании предложения GROUP BY предложение select-list (проекция), ПРЕДЛОЖЕНИЕ HAVING и ORDER BY считаются в пределах области группы, а не из области. Агрегаты получают специальное лечение, как описано в следующем маркированном списке.
Ниже приведены дополнительные заметки о областях:
Список выбора может вводить новые имена в область в порядке. Выражения проекции справа могут ссылаться на имена, проецируемые слева.
Предложение 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))