Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.02.20;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.03 c
3-1106058019
Бульбаш
2005-01-18 17:20
2005.02.20
Как отменить Post при переходе на другую строку?


4-1104775713
Комбинатор
2005-01-03 21:08
2005.02.20
Запрет на удаление процесса по средвам ACL


4-1104957562
dms_main
2005-01-05 23:39
2005.02.20
ClipBoard


1-1107332899
STARfish
2005-02-02 11:28
2005.02.20
Анализ работы поисковиков


1-1107753842
Kerk
2005-02-07 08:24
2005.02.20
Насколько это корректно?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский