Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в качестве параметра передать в хранимую процедуру порядок сортировки? / 14 сообщений из 14, страница 1 из 1
29.07.2002, 13:36:57
    #32039368
Makc3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Как в качестве параметра передать в хранимую процедуру порядок сортировки?

Есть хранимая процедура, которая делает запрос

CREATE PROCEDURE MyProc
@orderby INT
AS
SELECT * FROM MyTable
ORDER BY @orderby


Если последняя строка будет такой:
ORDER BY 2 (сортируем по 2-му столбцу)
то все работает, а если подставить параметр, выдает ошибку:
The SELECT item identified by the ORDER BY number %d contains a variable as part of the expression identifying a column position. Variables are only allowed when ordering by an expression referencing a column name

Пробовал передавать текстовое поле с именем столбца. То же самое.
Подскажите, пожалуйста.
...
Рейтинг: 0 / 0
29.07.2002, 13:41:53
    #32039371
XXX
XXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
CREATE PROCEDURE MyProc
@orderby varchar(100)
AS
Execute('SELECT * FROM MyTable
ORDER BY'+@orderby)
...
Рейтинг: 0 / 0
29.07.2002, 13:55:36
    #32039377
Artem
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Господа Мэтры!

А все-таки как правильнее
Ведь динамик не компайлиться
А может так
@ORDER

Select F1, F2
CASE @ORDER WHEN 1 the F1
... AS SORTING

FROM ...

ORDER BY SORTING

но еще остается вопрос типизации.
честно сказать не помню как я решал эту проблему потому что QA ругается если этот же запрос выполнить два раза подряд но с полями разных типов.
А после передачи в VB помоему проблем не возникает. :-)
...
Рейтинг: 0 / 0
29.07.2002, 13:56:45
    #32039378
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE MyProc 
@orderby INT 
AS 
SELECT * FROM MyTable 
ORDER BY 
case @orderby 
  when  1  then Field1
  when  2  then Field2
  when  3  then Field3
end
...
Рейтинг: 0 / 0
29.07.2002, 14:10:02
    #32039384
XXX
XXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
SergSuper>> У меня такая штука не работает
...
Рейтинг: 0 / 0
29.07.2002, 14:10:40
    #32039385
XXX
XXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
SergSuper>> У меня такая штука не работает
...
Рейтинг: 0 / 0
29.07.2002, 14:19:33
    #32039389
MiCe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
либо через EXEC
либо при создании процедуры указать WITH RECOMPILE
.... ИМХО все равно перекомпиляция....
...
Рейтинг: 0 / 0
29.07.2002, 14:21:12
    #32039390
XXX
XXX
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
MiCe>>Логично
...
Рейтинг: 0 / 0
29.07.2002, 14:26:12
    #32039394
Sanek
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Данный пример работает только если использовать сортировку по полям, которые похожи на цифры, если же в полях хранится текст, то
Код: plaintext
1.
2.
Server: Msg  245 , Level  16 , State  1 , Line  5 
Syntax error converting the varchar value '...' to a column of data type int.
...
Рейтинг: 0 / 0
29.07.2002, 14:39:05
    #32039400
SergSuper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
2 Sanek & XXX
К сожалению никакой совет не заменяет процесса думания своей головой. Я лишь даю идею, печально что вы не можете её развить. Например так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE PROCEDURE MyProc 
@orderby INT 
AS 
SELECT * FROM MyTable 
ORDER BY 
case @orderby 
  when  1  then CharField1
  when  2  then right('0000000'+convert(varchar( 22 ),IntField2),  7 )
end

...
Рейтинг: 0 / 0
29.07.2002, 19:06:16
    #32039507
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Поищите тутbid=16&tid=9738
...
Рейтинг: 0 / 0
29.07.2002, 19:07:45
    #32039508
Cat2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Ошибочка вышла.
Тут
...
Рейтинг: 0 / 0
30.07.2002, 05:38:55
    #32039535
Sergey Makarov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
У нас тоже периодически возникает вопрос с ORDER BY - причем как правило разработчикам требуется обеспечить сортировку по любому полю в любом направлении. Они приходят ко мне,я провожу среди них разъяснительную работу - и они начинают использовать стандартные средства ADODB - у рекордсета есть свойство sort. Пусть его и используют. И никаких динамических запросов.
...
Рейтинг: 0 / 0
30.07.2002, 13:28:38
    #32039630
Makc3
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Спасибо всем откликнувшимся.
Рекордсет это хорошо, но не в моем случае. Мне нужен доступ к базе через PHP для создания динамических web-страниц.
Проблему решил, как сразу и посоветовал Guest.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в качестве параметра передать в хранимую процедуру порядок сортировки? / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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