powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как обмануть ORDER BY
13 сообщений из 13, страница 1 из 1
Как обмануть ORDER BY
    #32003198
Alexander_Rudenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как сделать что бы в зависимости от параметра хранимой процедуры в выражение для ORDER BY изменялось.
Т.е. менялось поле по которому необходимо сортировать.
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003201
baxxtor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
стройте динамический СКЛ в СП и исполняйте его с помощью exec.
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003205
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну или же можно как-то так

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
Как обмануть ORDER BY
    #32003212
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так-как динамический СКЛ в СП "отменяет" СП-секюрити, то лучше писать результаты в врем. таблицу, а потом делать селект с нужным ордером из неё через динамический СКЛ. Заодно экономия на времени компиляции...
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003223
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2alexeyvg
>Так-как динамический СКЛ в СП "отменяет" СП-секюрити

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

Если не трудно, можно ссылочку из BOL по этому поводу ?
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003228
Фотография Garya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Со ссылочкой помочь не могу. Но, насколько мне известно, проблемы с защитой действительно могут возникнуть. Суть заключается вот в чем. Юзер может не иметь прямого доступа к таблице, но иметь право на запуск хранимой процедуры, которая обращается к этой таблице (общепринятая практика защиты таблиц). Однако, это только в том случае, если хранимая процедура не использует DSQL. Дело в том, что скрипт внутри SP исполняется с правами создавшего его пользователя (писателя SP). А DSQL запускается с правами юзера (того, кто вызвал SP). Получается, что для использования DSQL пользователи должны иметь н6епосредственный доступ к таблицам, а это не всегда желательно.
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003229
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Как обмануть ORDER BY
    #32003240
Glory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо !
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003320
Alexander_Rudenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за CASE!
С динамическими запросами не подходит. Т.к. запрос долго компилируется.
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003345
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я говорил, что-бы долго не компилипось, надо динамический запрос строить из временной таблицы.
А вообще, если заранее известны виды сортировок и их немного, то самый лучший вариант - у SergSuper с CASE.
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003387
Alexander_Rudenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эх, вот если бы еще можно было бы каким-нибудь образом ASC, DESC засунуть...
...
Рейтинг: 0 / 0
Как обмануть ORDER BY
    #32003397
Фотография SergSuper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какие проблеммы?

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


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