2013-06-06 5 views
4

Я нашел, что должно быть ошибкой в ​​запросе, когда оно было скопировано в другую (предположительно идентичную) базу данных, и это не удалось. Это выглядит примерно так, как этотSQL Order By Non Existant Column

SELECT a.columnOne , 
    b.columnOne 
FROM TableOne a 
INNER JOIN TableTwo b 
    ON a.id = b.id 
WHERE a.Value = 0 
ORDER BY a.ColumnOne , 
    b.ColumnTwo 

The «ошибка», что TableTwo НЕ имеет столбец с именем columnTwo (используется в предложения ORDER BY), но он прекрасно работает. По крайней мере, это делается в одной из баз данных, а другая жалуется. Но я уверен, что не имеет TableTwo.columnTwo.

Возможно, стоит упомянуть, что TableOne имеет столбец с именем columnTwo.

Это легкое исправление, но это подталкивает меня, что это существует так долго без проблем. Любая идея, что может продолжаться? (Или больше информации я мог бы дать?)

+2

Это связано с ** [Совместимость level] (http://msdn.microsoft.com/en-us/library/bb510680 (v = SQL.105) .aspx) ** В одном случае псевдоним таблицы игнорируется, а в другом - нет (и возникает ошибка) –

+1

См. отредактированную ссылку, где она имеет различия между уровнями 80 и 90. –

+2

@ypercube Yep ... очевидно, префиксы могут игнорироваться в списке ORDER BY в режиме совместимости 2000 года. Спасибо. Добавьте это как ответ, и я соглашусь с ним. –

ответ

1

при связывании ссылки столбцов в списке ORDER BY для столбцов , определенных в списке выбора, неоднозначность столбцов игнорируются и столбцов префиксы иногда игнорируются. Это может привести к возврату результата в в непредвиденном порядке. Например, предложение ORDER BY с одиночным двухчастным столбцом (.) , которое используется как ссылка на столбец в списке SELECT, принимается, но псевдоним таблицы игнорируется. Рассмотрим следующий запрос. SELECT c1 = -c1 FROM t_table AS x ORDER BY x.c1 При выполнении префикс столбца игнорируется в ORDER BY. Операция сортировки не возникает в указанном столбце источника (x.c1), как ожидалось; вместо этого он встречается на производном столбце c1 , который определен в запросе. План выполнения этого запроса показывает, что значения производной столбца вычисляются первые и затем вычисленные значения сортируются

Источник - «MSDN»

+0

Извините, но без объяснения контекста это не имеет смысла. –