2012-06-30 3 views
0

В SQL Server 2005Различия между выберите @ варом = column1 из table1 и выберите верхний 1 column1 из table1

различие между select @var=column1 from table1 & select top 1 column1 from table1

У меня есть проблема с тем, что имеет столбец в операторе выбора в этой модели

select column0, fn(column0) as col from table2 

что fn возвращение select @var=column1 from table1 where [email protected]

я заменить его с этим

select 
    column0, 
    (select top 1 column1 from table1 where table1.id = table2.column0) as col 
from table2 

, но результат не совпадает с предыдущим

и используя заказ в

select top 1 column1 from table1 where table1.id = table2.column0 

не имеет никакого эффекта слишком

Мне нужно знать, почему я могу изменить

select top 1 column1 from table1 where table1.id = table2.column0 

, который имеет такой же результат, как

select @var=column1 from table1 where table1.column3 = @inputid 

ответ

1

Когда Sql Server компилирует запрос, он не собирает Скалярная функция. Таким образом, вы никогда не узнаете, какой результат будет получен из функции Value. Кроме того, функция скалярной оценки приводит к относительно плохой производительности по сравнению с встроенными функциями запроса или таблицы. С ORDER BY получает исполнение после ТОП в случае СОЮЗА. Поэтому я сомневаюсь, что этот случай применяется. Вы можете вставить план выполнения запроса

Порядок исполнения запроса

1. FROM, JOIN, APPLY and ON 
2. WHERE 
3. GROUP BY 
4. HAVING 
5. SELECT 
6. ORDER BY 
7. TOP 
8. FOR XML 

При использовании UNION, порядок исполнения слегка изменяется

1. FROM, JOIN, APPLY and ON 
2. WHERE 
3. GROUP BY 
4. HAVING 
5. TOP 
5. UNION and SELECT 
6. ORDER BY 
8. FOR XML 
Смежные вопросы