Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Хранимые процедуры.


Fin ©   (2005-01-23 20:02:00) 

Существует такая проблема. На mssql написана хранимая процедура для выборки данных, дак вот в конце запроса после выражения order by имя поля может быть любым. Возможно ли в подготовленный запрос подставить это имя поля из входящего параметра.
На данный момент проблему решаю так, формирую строку запроса и запускаю через exec ('текст запроса'). Но почему то такой вариант не очень нравится. Есть предложения?


Fin   (2005-01-25 08:13:00) [1]


> aus   (25.01.05 03:33) [19]

Вообщето я уже не чего не жду. Меня просто заинтересовал каким боком предложенный тобой вариант принципиально решает проблему. Я это к тому, что может быть я чего то не догоняю, и ты прав!


aus   (2005-01-25 03:33:00) [2]

Fin ©   (23.01.05 20:02)
Но почему то такой вариант не очень нравится. Есть предложения?


Я предложил. Если тебя твой способ устраивает, так в чем же дело?
Я понимаю, что наилучшим вариантом был бы такой:

create procedure Sortir @F varchar(50)
as
select * from Tbl order by @F

но такого не получится.
Чего ты еще ждешь?


Fin   (2005-01-24 20:58:00) [3]


> aus   (24.01.05 20:41) [17]

CREATE PROCEDURE Sortirovka  @sortField varchar(50)
declare @SqlQuery varchar(500)
set @SqlQuery ='select * from table order by '+@sortField
exec(@SqlQuery )
go

и где по твоему принципиальные отличия, ну вернет функция table и что дальше?


aus   (2005-01-24 20:41:00) [4]

Fin ©   (24.01.05 20:34) [16]
Неужели таки нет различий?


Fin   (2005-01-24 20:34:00) [5]


> aus   (24.01.05 18:35) [15]
select * from myfunction(:p1,:p2) order by field1
и сортировка на сервере происходит

И чем это отличается от ранее предложенного?


aus   (2005-01-24 18:35:00) [6]

Такой вариант:
вместо хранимой процедуры использовать функцию, возвращающую table, а на клиенте формировать запрос
select * from myfunction(:p1,:p2) order by field1
и сортировка на сервере происходит.


Fin   (2005-01-24 17:45:00) [7]

Прошу прощения за повтор не то нажал. :)


Fin   (2005-01-24 17:41:00) [8]

Удалено модератором
Примечание: дубль


Fin   (2005-01-24 17:41:00) [9]


> Nikolay M. ©   (24.01.05 17:15) [11]
А если юзеру хочется постоянно НД в дбгриде сортировать, будешь все время сервер лишней работой загружать?

У нас примерно 40 машин в сети и больше половины из них P100, а сервер мощный, деньги на компы конечно не дадут, поэтому и приходится все периваливать на сервер.


Nikolay M.   (2005-01-24 17:15:00) [10]


> Имеется, так сказать, форма расширенного поиска по сотрудникам,

Согласен, в этому случае лучше сделать централизованно, через ХП.


> Но я предпочитаю с сервера уже отсортированные данные получить,
> а на клиенте минимум работы выполнять.

А если юзеру хочется постоянно НД в дбгриде сортировать, будешь все время сервер лишней работой загружать?


Ega23   (2005-01-24 16:29:00) [11]

2 Ольга   (24.01.05 16:07) [9]

Order By - это часть Select'а. Можно, конечно, на клиенте dataSet.Sort делать.
Но я предпочитаю с сервера уже отсортированные данные получить, а на клиенте минимум работы выполнять.


Ольга   (2005-01-24 16:07:00) [12]

А такой вариант не подходит?
Выборку делать с помощью пользовательской функции, а ORDER BY делать на клиенте:
SELECT * FROM <имя функции>(<параметры)
ORDER BY <имя или номер поля>


Ega23   (2005-01-24 14:22:00) [13]

Есть ещё достаточно дольшое количество ХП, которые на основании входных параметров генерят HTML-справку.


Ega23   (2005-01-24 14:20:00) [14]

Процедуры, которая занимается только тем, что формирует текст динамик-скуля и выполняет его?

фактически да.
Имеется, так сказать, форма расширенного поиска по сотрудникам, в общей сложности - около 30 или 40 различных параметров. При этом "чекнуты" могут быть как все, так и ни одного. Причём, чем больше параметров - тем больше разных таблиц добавляется во from основного select'а.


Nikolay M.   (2005-01-24 14:16:00) [15]


> Но вопрос то не решен, предлагаемый метод: http://www.delphimaster.ru/cgi-bin/forum.pl?id=1106549717&n=1
> не подходит по той причине что он происходит на клиенте

Там есть вариант с сортировкой на сервере. Что мешает динамически сформировать текст запроса из примеа на клиенте?
Задачу опиши, может понятнее будет?


> Смысл есть. Если хочешь, могу по почте отправить "примерчик"...

Процедуры, которая занимается только тем, что формирует текст динамик-скуля и выполняет его?


Ega23   (2005-01-24 14:04:00) [16]

2 Fin ©   (24.01.05 13:27) [3]
а мне как раз и нужно на сервере и пока что кроме как exec ('текст запроса')не придумал.

Боюсь, что более изящных методов-то и нет...


Ega23   (2005-01-24 14:03:00) [17]

2 Nikolay M. ©   (24.01.05 10:13) [1]
И какой тогда смысл в такой ХП, работа которой сводится к выполнению динамического запроса?

Смысл есть. Если хочешь, могу по почте отправить "примерчик"...


Fin   (2005-01-24 13:27:00) [18]


> Nikolay M. ©   (24.01.05 10:13) [1]

Виноват, поста не заметил.
Но вопрос то не решен, предлагаемый метод: http://www.delphimaster.ru/cgi-bin/forum.pl?id=1106549717&n=1
не подходит по той причине что он происходит на клиенте, а мне как раз и нужно на сервере и пока что кроме как exec ('текст запроса')не придумал. Искал в других местах предлогали только такой же способ. Вот попытал счастья здесь.


Alx2   (2005-01-24 10:17:00) [19]

>Nikolay M. ©   (24.01.05 10:13) [1]
>Сговорились, что-ли? :)

Ничего подобного :)


Nikolay M.   (2005-01-24 10:13:00) [20]


> exec ('текст запроса')

И какой тогда смысл в такой ХП, работа которой сводится к выполнению динамического запроса?
http://www.delphimaster.ru/cgi-bin/forum.pl?id=1106549717&n=1
Сговорились, что-ли? :)


Наверх

Титульная страница Поиск, карта сайта Написать письмо