Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.02.20;
Скачать: CL | DM;

Вниз

Хранимые процедуры.   Найти похожие ветки 

 
Fin ©   (2005-01-23 20:02) [0]

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


 
Nikolay M. ©   (2005-01-24 10:13) [1]


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

И какой тогда смысл в такой ХП, работа которой сводится к выполнению динамического запроса?
http://delphimaster.net/view/3-1106549717/
Сговорились, что-ли? :)


 
Alx2 ©   (2005-01-24 10:17) [2]

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

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


 
Fin ©   (2005-01-24 13:27) [3]


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

Виноват, поста не заметил.
Но вопрос то не решен, предлагаемый метод: http://delphimaster.net/view/3-1106549717/
не подходит по той причине что он происходит на клиенте, а мне как раз и нужно на сервере и пока что кроме как exec ("текст запроса")не придумал. Искал в других местах предлогали только такой же способ. Вот попытал счастья здесь.


 
Ega23 ©   (2005-01-24 14:03) [4]

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

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


 
Ega23 ©   (2005-01-24 14:04) [5]

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

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


 
Nikolay M. ©   (2005-01-24 14:16) [6]


> Но вопрос то не решен, предлагаемый метод: http://delphimaster.net/view/3-1106549717/
> не подходит по той причине что он происходит на клиенте

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


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

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


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

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

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


 
Ega23 ©   (2005-01-24 14:22) [8]

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


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

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


 
Ega23 ©   (2005-01-24 16:29) [10]

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

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


 
Nikolay M. ©   (2005-01-24 17:15) [11]


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

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


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

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


 
Fin ©   (2005-01-24 17:41) [12]


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

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


 
Fin ©   (2005-01-24 17:41) [13]

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


 
Fin ©   (2005-01-24 17:45) [14]

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


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

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


 
Fin ©   (2005-01-24 20:34) [16]


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

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


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

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


 
Fin ©   (2005-01-24 20:58) [18]


> 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-25 03:33) [19]

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


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

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

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


 
Fin ©   (2005-01-25 08:13) [20]


> aus   (25.01.05 03:33) [19]

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



Страницы: 1 вся ветка

Текущий архив: 2005.02.20;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.046 c
14-1107092125
uw
2005-01-30 16:35
2005.02.20
Опыт на дороге


1-1107271810
_ZeKa
2005-02-01 18:30
2005.02.20
Вывод на принтер картинки, хранящейся в TList


3-1106638164
АМБ
2005-01-25 10:29
2005.02.20
Запрос для DBF


14-1107166520
Alexander Panov
2005-01-31 13:15
2005.02.20
Блин, флудеры.


14-1107117446
Fatal
2005-01-30 23:37
2005.02.20
Поделитесь софтом :)