В SQL Server шаг синтаксического анализа только семантически проверяет синтаксис для таких вещей, как неэкранированные столбцы, начинающиеся с цифр, например [2ndColumn]
и не 2ndColumn
(что не сможет выполнить синтаксический анализ), ключевые слова и тому подобное, и гарантирует, что запрос может быть разобрано . Это процесс, который происходит, когда вы нажимаете кнопку разбора в SSMS. Этот процесс не проверяет запрос на соответствие базовым данным.
Поэтому я могу ввести SELECT abc FROM DEF
, хотя у меня нет ни одного столбца с именем abc, и даже нет таблицы с именем DEF.
Следующим шагом является алгебраизатор, который представляет собой процесс связывания. Этот шаг (который не выполняется, когда вы просто анализируете запрос), проверяет , что каждый объект вашего запроса действительно существует, и завершится ошибкой, когда вы ссылаетесь на несуществующие объекты.
Еще один способ убедиться в этом - указать SQL Server только анализировать и больше ничего не делать:
SET PARSEONLY ON
SELECT abc FROM def
GO
Над запросом будет указано «Команда (и) выполнена успешно».
SET PARSEONLY OFF
SELECT abc FROM def
GO
Над запросом будет указано «Недопустимое имя объекта def».
В вашем примере вопроса столбец someIntCol существует в рамках вашего запроса, потому что вы не указали конкретное происхождение от него. В результате это не имеет особого смысла, но все равно не является неверным запросом.