powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в качестве параметра передать в хранимую процедуру порядок сортировки?
14 сообщений из 14, страница 1 из 1
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #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
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039371
XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE PROCEDURE MyProc
@orderby varchar(100)
AS
Execute('SELECT * FROM MyTable
ORDER BY'+@orderby)
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039377
Artem
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа Мэтры!

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

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

FROM ...

ORDER BY SORTING

но еще остается вопрос типизации.
честно сказать не помню как я решал эту проблему потому что QA ругается если этот же запрос выполнить два раза подряд но с полями разных типов.
А после передачи в VB помоему проблем не возникает. :-)
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #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
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039384
XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper>> У меня такая штука не работает
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039385
XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergSuper>> У меня такая штука не работает
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039389
Фотография MiCe
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
либо через EXEC
либо при создании процедуры указать WITH RECOMPILE
.... ИМХО все равно перекомпиляция....
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039390
XXX
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MiCe>>Логично
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #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
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #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
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039507
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поищите тутbid=16&tid=9738
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039508
Фотография Cat2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибочка вышла.
Тут
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039535
Sergey Makarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас тоже периодически возникает вопрос с ORDER BY - причем как правило разработчикам требуется обеспечить сортировку по любому полю в любом направлении. Они приходят ко мне,я провожу среди них разъяснительную работу - и они начинают использовать стандартные средства ADODB - у рекордсета есть свойство sort. Пусть его и используют. И никаких динамических запросов.
...
Рейтинг: 0 / 0
Как в качестве параметра передать в хранимую процедуру порядок сортировки?
    #32039630
Makc3
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо всем откликнувшимся.
Рекордсет это хорошо, но не в моем случае. Мне нужен доступ к базе через PHP для создания динамических web-страниц.
Проблему решил, как сразу и посоветовал Guest.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Как в качестве параметра передать в хранимую процедуру порядок сортировки?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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