|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
Как сделать что бы в зависимости от параметра хранимой процедуры в выражение для ORDER BY изменялось. Т.е. менялось поле по которому необходимо сортировать. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2001, 17:49 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
стройте динамический СКЛ в СП и исполняйте его с помощью exec. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 03:50 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
ну или же можно как-то так 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 и т.д. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 10:24 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
Так-как динамический СКЛ в СП "отменяет" СП-секюрити, то лучше писать результаты в врем. таблицу, а потом делать селект с нужным ордером из неё через динамический СКЛ. Заодно экономия на времени компиляции... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 12:21 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
2alexeyvg >Так-как динамический СКЛ в СП "отменяет" СП-секюрити Если не трудно, можно ссылочку из BOL по этому поводу ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 15:19 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
2alexeyvg >Так-как динамический СКЛ в СП "отменяет" СП-секюрити Если не трудно, можно ссылочку из BOL по этому поводу ? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 15:23 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
Со ссылочкой помочь не могу. Но, насколько мне известно, проблемы с защитой действительно могут возникнуть. Суть заключается вот в чем. Юзер может не иметь прямого доступа к таблице, но иметь право на запуск хранимой процедуры, которая обращается к этой таблице (общепринятая практика защиты таблиц). Однако, это только в том случае, если хранимая процедура не использует DSQL. Дело в том, что скрипт внутри SP исполняется с правами создавшего его пользователя (писателя SP). А DSQL запускается с правами юзера (того, кто вызвал SP). Получается, что для использования DSQL пользователи должны иметь н6епосредственный доступ к таблицам, а это не всегда желательно. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 16:04 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
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. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2001, 16:06 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
Спасибо за CASE! С динамическими запросами не подходит. Т.к. запрос долго компилируется. ... |
|||
:
Нравится:
Не нравится:
|
|||
20.03.2001, 19:51 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
Как я говорил, что-бы долго не компилипось, надо динамический запрос строить из временной таблицы. А вообще, если заранее известны виды сортировок и их немного, то самый лучший вариант - у SergSuper с CASE. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2001, 12:25 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
Эх, вот если бы еще можно было бы каким-нибудь образом ASC, DESC засунуть... ... |
|||
:
Нравится:
Не нравится:
|
|||
21.03.2001, 18:35 |
|
Как обмануть ORDER BY
|
|||
---|---|---|---|
#18+
А какие проблеммы? 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 Мне казалось что это очевидно... ... |
|||
:
Нравится:
Не нравится:
|
|||
22.03.2001, 09:47 |
|
|
start [/forum/topic.php?fid=46&msg=32003205&tid=1827151]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
47ms |
get tp. blocked users: |
1ms |
others: | 262ms |
total: | 387ms |
0 / 0 |