Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
ils-abs Member Откуда: Москва Сообщений: 45 |
Глупый, возможно, вопрос, но сегодня наткнулся на непонятное мне поведение.SELECT column1, column1 FROM dbo.MY_TABLE ORDER BY column1 SELECT column1, column1 FROM dbo.MY_TABLE x ORDER BY x.column1 На мой взгляд, эти запросы одинаковы. Однако первый дает ошибку, тогда как второй - выполняется без вопросов. В чем разница между ними? Объясните, пожалуйста. |
16 июн 15, 17:30 [17777914] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
у меня сортирует и в первом варианте Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (Intel X86) Aug 19 2014 12:21:07 Copyright (c) Microsoft Corporation Developer Edition on Windows NT 6.1 <X86> (Build 7601: Service Pack 1) К сообщению приложен файл. Размер - 33Kb |
16 июн 15, 17:46 [17778001] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
о блин, это в режиме совместимости 2000 выполнилось. а на базе с compatibility_level 100 да, Msg 209, Level 16, State 1, Line 3 Ambiguous column name 'object_id'. |
16 июн 15, 17:49 [17778021] Ответить | Цитировать Сообщить модератору |
Basma4 Member Откуда: Сообщений: 124 |
ils-abs, https://connect.microsoft.com/SQLServer/feedback/details/644134/order-by-clause-incorrectly-produces-ambiguous-column-name |
16 июн 15, 17:56 [17778067] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
значит, парсер поменялся. и логика примерно такая: у нас 2 одноименных столбца и оба без алиасов? значит, неясно, по к-ому из них сортировать (ну, может они из разных таблиц) поэтому стоп, вываливаем ошибку. а если алиас есть, то первый этап проверки пройден, теперь проверим, понятно или нет, откуда именно столбец. а раньше трудолюбивее было, не останавливалось на этапе 1, проверялось сразу второе. а теперь, чтоб лишнего не переработать, отлуп дается раньше |
16 июн 15, 17:57 [17778075] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8326 |
o-o, учат хорошим манерам :) |
16 июн 15, 18:01 [17778096] Ответить | Цитировать Сообщить модератору |
daw Member Откуда: Муром -> Москва Сообщений: 7381 |
хорошо вы о людях думаете, - а на самом деле там очень веселая бага была. описано здесь: "При привязке ссылок столбцов в списке ORDER BY..." https://msdn.microsoft.com/ru-ru/library/bb510680(v=sql.105).aspx |
||
16 июн 15, 19:11 [17778366] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
да уж ![]() звучит заманчиво, если не сказать мило-издевательски. спасибо за экскурс в историю |
||
16 июн 15, 20:55 [17778699] Ответить | Цитировать Сообщить модератору |
Makar4ik Member Откуда: Когда-то были Лужки, а теперь Бордюр-Сити. Сообщений: 2680 |
А откуда он знает в первом случае, как сортировать? По column1, или по column1? А во втором - вы ему отдельное поле выдали для этого. Сортирует - только в путь! ![]() Ваши два запроса - полный аналог другого примера: select name, name from sysobjects order by name select name, name from sysobjects order by id В вашем случае x.column1 совсем не идентична column1 |
||
17 июн 15, 01:57 [17779744] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
Makar4ik, С чего вдруг при выдаче алиаса *таблице* переименуются столбцы? Проверяйте что ли свои фантазии, минутное же дело. Да и в первом случае, только вам не понятно, по column1 или column1,это ж не на слух "улица Койкого", таблица одна, имена столбцов в пределах таблицы уникальны, переименований столбцов в списке select нет К сообщению приложен файл. Размер - 52Kb |
17 июн 15, 08:27 [17779955] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |