2015-03-03 2 views
0

У меня есть курсор объявление здесь:Почему в этом объявлении курсора нет скобок?

declare c cursor 
for  (select ProductName, ListPrice 
     from Products 
     where ListPrice > 700) 

Но если добавить order by статью, я получаю сообщение об ошибке:

declare c cursor 
for  (select ProductName, ListPrice 
     from Products 
     where ListPrice > 700 
     order by ListPrice desc) 

Ошибка: Incorrect syntax near the keyword 'order'.

Но ошибка исчезнет, ​​если Я забираю круглые скобки:

declare c cursor 
for  select ProductName, ListPrice 
     from Products 
     where ListPrice > 700 
     order by ListPrice desc 

Возможно, я немного неясен в отношении того, что скобки в SQL Server. Что дает? Почему бы предложение order by взаимодействовать с круглыми скобками таким образом?

+0

SQL-серверу не нравится 'order by' в подзапросах (если у вас также нет' top'). Я предполагаю, что он интерпретирует запрос в круглых скобках как подзапрос, потому что они не нужны. –

+0

Это имеет смысл. Вы должны положить это в ответ, чтобы я мог дать вам кредит. – Indigenuity

ответ

0

order by не разрешен в подзапросах, как указано в комментариях. Обертка select в круглых скобках заставляет SQL интерпретировать его как подзапрос.