#sql-server #params #hoisting
#sql-server #параметры #подъем
Вопрос:
Я работаю над проектом MS SQL и довольно новичок в SQL в целом.
В запросе, который содержит это:
SELECT DISTINCT u.sUserType
FROM @users u
И псевдоним (переменная ‘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, где есть понятие «подъем».
В: Можно ли обсуждать SQL-запросы с точки зрения компиляции или интерпретации?
Вопрос: Сопоставимо ли выполнение запроса, в котором переменные определяются после использования, с запуском Javascript?
Вопрос: Кроме того, как это соотносится с другими реализациями стандарта SQL?
—— РЕДАКТИРОВАТЬ ——
Приведенный ниже ответ указывает на то, что псевдоним отличается от переменной.
Переменная должна быть объявлена, прежде чем на нее можно будет ссылаться, но
Комментарии:
1. что такое подъем javascript? Что он делает?
2. Для использования
FROM @users
означает, что переменная была объявлена ранее3. Кроме того, SQL является декларативным языком
Ответ №1:
-
Безусловно, запросы интерпретируются, и план выполнения для всего запроса выбирается механизмом SQL перед началом выполнения.
-
Вы объединяете псевдонимы с переменными. В SQL переменная должна быть объявлена, прежде чем ее можно будет использовать. На псевдоним можно ссылаться «выше» в SQL-запросе и определять «ниже», но я сомневаюсь, что это сопоставимо с «подъемом», что бы это ни было, потому что JavaScript — это построчная вещь, а SQL-запросы интерпретируются как одна операция на основе набора.
-
Вы имеете в виду, как это различается в разных СУБД? Совсем немного, из тех немногих, с которыми я работал.
Комментарии:
1. Спасибо. На данный момент я не совсем уверен, что вы подразумеваете под операциями на основе отдельных наборов. Вы имеете в виду, что запросы рассматриваются механизмом целостно перед выполнением?
2. Да, это именно то, что я имею в виду. В терминах JavaScript можно сказать, что механизм SQL Server обрабатывает любой запрос целиком как одну строку кода.
3. Я полагаю, что Javascript больше компилируется, чем интерпретируется — я думаю, это означает «оптимизированный целостно»… Но я никогда не рассматривал выполнение как построчное независимо. Спасибо за это
4. Прошло много времени с тех пор, как я использовал JavaScript. : )