2016-03-22 3 views
0

Я просматриваю определение, которое указано ниже. Я мог найти информацию о том, как порядок не оценивается в определении, если он не используется с TOP. но не уверен, что это представление будет работать по назначению. Ожидается, что в этом представлении будут указаны все записи сотрудников, которые предполагают, что EmpployeeDup имеет дубликаты EmpID.Действительно ли использовать раздел по порядку по виду

Когда я тестировал это, похоже, работает так, как ожидалось, но я не думаю, что мы можем полагаться на это, если заказ не гарантируется при использовании в представлении определения по sql-серверу.

CREATE VIEW Test AS 

SELECT * FROM 

(SELECT * 

,ROW_NUMBER() OVER (PARTITION BY EmpID ORDER BY LastupdateDatetime DESC) as row_num 

FROM EmpployeeDup) as rows 

WHERE row_num = 1 

; 

GO 

ответ

0

Ответ на ваш вопрос: да, ваш запрос будет работать должным образом. «Не соблюдается» - это не то, что происходит, если вы пытаетесь использовать заказ в виде без TOP, OFFSET или FOR XML. Вы получите сообщение об ошибке сообщение об ошибке вместо

The ORDER BY clause is invalid in views, inline functions, derived tables, subqueries, and common table expressions, unless TOP, OFFSET or FOR XML is also specified.

Это довольно ясно говорит вам, что вы должны сделать, чтобы сделать работу запроса.

+0

Я сосредоточился на «если не указаны TOP, OFFSET или FOR XML». Поскольку это определение определения явно не использует эти конструкции ... – nee21

+0

@ nee21, поскольку это функция окна, она не применяется – SQLChao

Смежные вопросы