Гость
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как обмануть ORDER BY / 13 сообщений из 13, страница 1 из 1
18.03.2001, 17:49
    #32003198
Alexander_Rudenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
Как сделать что бы в зависимости от параметра хранимой процедуры в выражение для ORDER BY изменялось.
Т.е. менялось поле по которому необходимо сортировать.
...
Рейтинг: 0 / 0
19.03.2001, 03:50
    #32003201
baxxtor
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
стройте динамический СКЛ в СП и исполняйте его с помощью exec.
...
Рейтинг: 0 / 0
19.03.2001, 10:24
    #32003205
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
ну или же можно как-то так

declare @OrdFld varchar(99)
select @OrdFld='name'

select * from sysobjects
order by
case when @OrdFld='name' then name else '' end,
case when @OrdFld='id' then id else 0 end,
case when @OrdFld='type' then tyoe else '' end
и т.д.
...
Рейтинг: 0 / 0
19.03.2001, 12:21
    #32003212
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
Так-как динамический СКЛ в СП "отменяет" СП-секюрити, то лучше писать результаты в врем. таблицу, а потом делать селект с нужным ордером из неё через динамический СКЛ. Заодно экономия на времени компиляции...
...
Рейтинг: 0 / 0
19.03.2001, 15:19
    #32003223
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
2alexeyvg
>Так-как динамический СКЛ в СП "отменяет" СП-секюрити

Если не трудно, можно ссылочку из BOL по этому поводу ?
...
Рейтинг: 0 / 0
19.03.2001, 15:23
    #32003224
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
2alexeyvg
>Так-как динамический СКЛ в СП "отменяет" СП-секюрити

Если не трудно, можно ссылочку из BOL по этому поводу ?
...
Рейтинг: 0 / 0
19.03.2001, 16:04
    #32003228
Garya
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
Со ссылочкой помочь не могу. Но, насколько мне известно, проблемы с защитой действительно могут возникнуть. Суть заключается вот в чем. Юзер может не иметь прямого доступа к таблице, но иметь право на запуск хранимой процедуры, которая обращается к этой таблице (общепринятая практика защиты таблиц). Однако, это только в том случае, если хранимая процедура не использует DSQL. Дело в том, что скрипт внутри SP исполняется с правами создавшего его пользователя (писателя SP). А DSQL запускается с правами юзера (того, кто вызвал SP). Получается, что для использования DSQL пользователи должны иметь н6епосредственный доступ к таблицам, а это не всегда желательно.
...
Рейтинг: 0 / 0
19.03.2001, 16:06
    #32003229
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
2Glory
тема EXECUTE, T-SQL Reference

Permissions
EXECUTE permissions for a stored procedure default to the owner of the stored procedure, who can transfer them to other users. Permissions to use the statement(s) within the EXECUTE string are checked at the time EXECUTE is encountered, even if the EXECUTE statement is included within a stored procedure. When a stored procedure is run that executes a string, permissions are checked in the context of the user who executes the procedure, not in the context of the user who created the procedure. However, if a user owns two stored procedures in which the first procedure calls the second, then EXECUTE permission checking is not performed for the second stored procedure.
...
Рейтинг: 0 / 0
19.03.2001, 17:18
    #32003240
Glory
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
Спасибо !
...
Рейтинг: 0 / 0
20.03.2001, 19:51
    #32003320
Alexander_Rudenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
Спасибо за CASE!
С динамическими запросами не подходит. Т.к. запрос долго компилируется.
...
Рейтинг: 0 / 0
21.03.2001, 12:25
    #32003345
alexeyvg
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
Как я говорил, что-бы долго не компилипось, надо динамический запрос строить из временной таблицы.
А вообще, если заранее известны виды сортировок и их немного, то самый лучший вариант - у SergSuper с CASE.
...
Рейтинг: 0 / 0
21.03.2001, 18:35
    #32003387
Alexander_Rudenko
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
Эх, вот если бы еще можно было бы каким-нибудь образом ASC, DESC засунуть...
...
Рейтинг: 0 / 0
22.03.2001, 09:47
    #32003397
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как обмануть ORDER BY
А какие проблеммы?

declare @OrdFld varchar(99), @desc int
select @OrdFld='name', @desc =1

select * from sysobjects
order by
case when @OrdFld='name' and @desc=0 then name else '' end,
case when @OrdFld='id' and @desc=0 then id else 0 end,
case when @OrdFld='type' and @desc=0 then type else '' end,
case when @OrdFld='name' and @desc=1 then name else '' end desc,
case when @OrdFld='id' and @desc=1 then id else 0 end desc,
case when @OrdFld='type' and @desc=1 then type else '' end desc

Мне казалось что это очевидно...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как обмануть ORDER BY / 13 сообщений из 13, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]