MS SQL: как оцениваются переменные и псевдонимы при выполнении запроса?


Я работаю над проектом MS SQL, и довольно новым для SQL в целом.

В запросе, содержащем следующее:

SELECT DISTINCT u.sUserType
FROM @users u

И alias (переменная 'u') используется до объявления переменной (@param был объявлен ранее). Затем снова:

SELECT  
    ...,
    aType.hMy as hAssetType,
    ...,
    ...,
    ...,
    ...,
    etc
FROM @users u
        LEFT JOIN somTableName aType on UPPER(u.sAssetType) UPPER(aType.sType)
        LEFT JOIN etc
        LEFT JOIN etc

Я исхожу из очень большого фона Javascript, где есть понятие "подъем".

Q: Можно ли обсуждать SQL-запросы в терминах компиляции или интерпретации?

Q: Есть запрос выполнение, где vars определяются после использования сравнимого с Javascript подъема?

Q: Кроме того, как это соотносится с другими реализациями стандарта SQL?

----- EDIT - - - - -

Ответ ниже указывает, что псевдоним отличается от переменной.

Переменная должна быть объявлена до того, как на нее можно будет ссылаться, но

1 2

1 ответ:

  1. Безусловно, запросы интерпретируются и план выполнения для всего запроса выбирается механизмом SQL перед началом выполнения.

  2. Вы смешиваете псевдонимы с переменными. В SQL переменная должна быть объявлена, прежде чем ее можно будет использовать. На псевдоним можно ссылаться "выше" в SQL-запросе и определять "ниже", но я сомневаюсь, что это сравнимо с "поднятием", что бы это ни было, потому что JavaScript-это построчная вещь, и SQL-запросы интерпретируются как одна операция на основе набора.

  3. Вы имеете в виду, как это различается между различными СУБД? Совсем немного, из тех немногих, с кем я работал.