Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > view & order by


Автор: np9mi7 19.4.2005, 09:52
Добрый день.

Есть таблица:

Код

create table tSome 
(
   ID_SOME              bigint               identity,
   theTime           datetime             not null
)
go


задача написать view которая поднимает все записи этой таблицы только упорядоченные по дате. Ну я наивный сделал так:

Код

create view vSome as
select
    *
from
    tSome
order by theDateTime
go



а он мне:

Цитата
Server: Msg 1033, Level 15, State 1, Procedure vEvent, Line 10
The ORDER BY clause is invalid in views, inline functions, derived tables, and subqueries, unless TOP is also specified.


Говорит нельзя использовать order by в представлениях smile

Как заменить?

Заранее благодарен за ответы.

Автор: Akina 19.4.2005, 10:33
Представление делает ВЫБОРКУ данных. А сортируй в запросе на их ПОЛУЧЕНИЕ с сервера БД. Т.е. вьюв в данном случае нах...рен не нужен.

Автор: np9mi7 19.4.2005, 11:03
ДА ХОЧУ ЧТОБ СЕРВАК МНЕ СОРТИРОВАЛ А НЕ КЛИЕНТ!!!!!!!!!!!!!

Автор: Akina 19.4.2005, 11:04
np9mi7
Ты вообще как??? сервер и будет сортировать - по запросу...
или до сих пор не знаешь что такое реляционные базы?

Автор: np9mi7 19.4.2005, 11:14
Да вообще то знаю, блин да понятно что все запросы обрабатывает сервер, но хотелось бы ткнуться а там уже все как надо...Можно?

Автор: Akina 19.4.2005, 11:20
Цитата(np9mi7 @ 19.4.2005, 12:14)
хотелось бы ткнуться а там уже все как надо...Можно?

нет. пойми, наконец, что НА СЕРВЕРЕ нет порядка следования записей - и именно потому тебя и посылают нахрен. Более того, если сделать вьюв типа

Код

create view vSome as
select TOP 10 *
from tSome
order by theDateTime
go


и взять его контент запросом

Код

Select * From vSome

то в полученном рекордсете записи НЕ БУДУТ отсортированы по theDateTime !!!

И это ПРАВИЛЬНО.

Автор: stron 19.4.2005, 11:20
Тогда напиши хранимку

Автор: np9mi7 19.4.2005, 11:27
ладно, убедил, буду на клиенте.....
а по поводу хранимки подумаю

Автор: stron 19.4.2005, 11:36
А чё тут думать
Код

create procedure vSome as
select
    *
from
    tSome
order by theDateTime
go

и вызывать
Код

exec vSome


Автор: Akina 19.4.2005, 12:02
Цитата(np9mi7 @ 19.4.2005, 12:27)
ладно, убедил, буду на клиенте.....

Не, я что-то не понимаю, чем тебя так напрягает добавление в строку запроса на клиенте ORDER BY?

Автор: np9mi7 19.4.2005, 12:05
Да в принци (е) пи (е) ничем не напрягает...

Так, просто хотелось узнать можно или нет....

Не, а у меня проблема с пониманием истинного смысла представлений, действительно это просто мега склейка множества таблиц, нафига ей сортировать, ей просто это не нужно, ей нужно представить данные а не разбираться в них....это уже задача клиента представления, будь то хранимая или просто recordset....

Открыли глаза на представления.... спасибо!

Автор: Akina 19.4.2005, 12:13
Цитата(np9mi7 @ 19.4.2005, 13:05)
у меня проблема с пониманием истинного смысла представлений

Основное назначение вьювов - отделение клиента от таблиц и разграничение доступа. Как я это понимаю...

PS. Не надо меня пинать и поправлять - заранее согласен. Однако смысл и назначение - вещи разные.

Автор: stron 19.4.2005, 13:00
А я в них составляю простенькие запросы

Автор: np9mi7 19.4.2005, 15:21
Цитата
Однако смысл и назначение - вещи разные.
, фр. это да smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)