![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Хранимые процедуры.
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
Сговорились, что-ли? :)