Как обмануть ORDER BY

Alexander_Rudenko
Дата: 18.03.2001 17:49:25
Как сделать что бы в зависимости от параметра хранимой процедуры в выражение для ORDER BY изменялось.
Т.е. менялось поле по которому необходимо сортировать.
baxxtor
Дата: 19.03.2001 03:50:49
стройте динамический СКЛ в СП и исполняйте его с помощью exec.
SergSuper
Дата: 19.03.2001 10:24:56
ну или же можно как-то так

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
и т.д.
alexeyvg
Дата: 19.03.2001 12:21:26
Так-как динамический СКЛ в СП "отменяет" СП-секюрити, то лучше писать результаты в врем. таблицу, а потом делать селект с нужным ордером из неё через динамический СКЛ. Заодно экономия на времени компиляции...
Glory
Дата: 19.03.2001 15:19:06
2alexeyvg
>Так-как динамический СКЛ в СП "отменяет" СП-секюрити

Если не трудно, можно ссылочку из BOL по этому поводу ?
Glory
Дата: 19.03.2001 15:23:49
2alexeyvg
>Так-как динамический СКЛ в СП "отменяет" СП-секюрити

Если не трудно, можно ссылочку из BOL по этому поводу ?
Garya
Дата: 19.03.2001 16:04:21
Со ссылочкой помочь не могу. Но, насколько мне известно, проблемы с защитой действительно могут возникнуть. Суть заключается вот в чем. Юзер может не иметь прямого доступа к таблице, но иметь право на запуск хранимой процедуры, которая обращается к этой таблице (общепринятая практика защиты таблиц). Однако, это только в том случае, если хранимая процедура не использует DSQL. Дело в том, что скрипт внутри SP исполняется с правами создавшего его пользователя (писателя SP). А DSQL запускается с правами юзера (того, кто вызвал SP). Получается, что для использования DSQL пользователи должны иметь н6епосредственный доступ к таблицам, а это не всегда желательно.
SergSuper
Дата: 19.03.2001 16:06:19
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.
Glory
Дата: 19.03.2001 17:18:54
Спасибо !
Alexander_Rudenko
Дата: 20.03.2001 19:51:16
Спасибо за CASE!
С динамическими запросами не подходит. Т.к. запрос долго компилируется.