Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
ВнизНабор данных как результат хранимой процедуры Найти похожие ветки
← →
Bless (2003-07-02 12:49) [0]Есть хранимая процедура, которая набор данных.
Как к этому результирующему запросу обратиться?
Например, в другом запросе:
select * from MyStoredProc
← →
Семен Сорокин (2003-07-02 12:57) [1]TStoredProc + F1
← →
Smashich (2003-07-02 13:18) [2]хранимая процедура или функция?
← →
MOA (2003-07-02 13:34) [3]Из запроса к процедуре никак. Можно к функции, если у Вас SQL2000.
← →
Bless (2003-07-02 15:38) [4]:( У меня SQLServer 7.0
Так что, никак нельзя добраться к результату работы процедуры?
← →
sniknik (2003-07-02 15:55) [5]Bless (02.07.03 15:38)
> Так что, никак нельзя добраться к результату работы процедуры?
просто MyStoredProc или exec MyStoredProc вернет рекордсет если он в ней конечно возврашается.
без всякой мороки
зачем использовать неопределенные для процедур конструкции? смысл? чего хочеш добится? а то может все не так уж и плохо, если разбирать конкретную задачу а не "тупичок" в общем.
← →
Семен Сорокин (2003-07-02 16:00) [6]2Bless
см. Семен Сорокин © (02.07.03 12:57) :))
← →
Stas (2003-07-02 16:59) [7]Попробуй в запросе EXECUTE MyProc
Если есть параметры, то укажи их через запятую.
← →
Bless (2003-07-02 17:32) [8]>sniknik © (02.07.03 15:55)
Вот почти конкретная задача.
Есть куча строительных объектов, между которыми существуют иерархические отношения(типа родитель-потомок). То есть, например, объекты "Временная плотина подводящего канала", "Подводящий канал с устоями" - части объекта "ГАЭС" и в свою очередь могут состоять из других подобъектов и т.д.
Информация об этих связях берется из двух полей: kod - код объекта,
parent - код родителя
Нужно вывести, к примеру, список всех работ по объекту "ГАЭС"
Естесственно, все работы на "временной плотине..." и т.п. тоже считаются работами на "ГАЭС"
Всех потомков объекта с таким-то кодом планирую выбирать хранимой процедурой MyStoredProc. Код передается в качестве параметра процедуры. Тогда SQL-запрос будет выглядеть приблизительно так
select work.name
FROM work, MyStoredProc
where work.Obj_kod =MyStoredProc.kod :Object
>Stas © (02.07.03 16:59)
>Попробуй в запросе EXECUTE MyProc
Пробовал. Не работает.
← →
sniknik (2003-07-02 18:19) [9]Bless (02.07.03 17:32)
не совсем то о чем я думал
мне бы не описание твоей работы а конкретно чего хотел добится этим
select * from MyStoredProc
данные в гриде показать?, дальнейшая обработка? на сервере и т.д.
>> Попробуй в запросе EXECUTE MyProc
> Пробовал. Не работает.
а ты попробуй не свою которая возможно ничего не возвращает (как бы хорошо ты о ней не думал), а системную которая точно работает правильно. напримерEXEC SP_WHO
← →
Fay (2003-07-02 19:05) [10]А что не работает? Что за ошибка-то?
← →
Bless (2003-07-03 10:51) [11]>sniknik © (02.07.03 18:19)
>мне бы не описание твоей работы а конкретно чего хотел добится
>этим select * from MyStoredProc.
Так я вроде конкретно написал: выбирать всех потомков (точнее все подобъекты) какого-то объекта. Данные в гриде показывать не надо. Эта процедура, если бы она возвращала значение, использовалась бы только в запросе, который я приводил выше и который выглядел бы приблизительно так:
select work.name
FROM work, MyStoredProc
where work.Obj_kod =MyStoredProc.kod :Object
, где в параметре :Object - код объекта, все подобъекты которого надо получить.
>а ты попробуй не свою которая возможно ничего не возвращает
> (как бы хорошо ты о ней не думал), а системную которая точно
>работает правильно. например EXEC SP_WHO
Если написать
select * from sp_who
или
select * from exec sp_who
или
select * from (exec sp_who),
то не работает
← →
sniknik (2003-07-03 11:02) [12]> Если написать
select * from sp_who
....
то не работает
естественно, ведь надо писать EXEC SP_WHO, именно так без всяких дополнений.
(вот ты говориш написал вроде ясно, но у тебя конструкция нерабочая а вроде как тебе хотелось бы чтобы работало, вымысел короче без обьяснения что от него хочеш, я написал код гораздо короче в 2 слова абсолютно рабочий и ты меня не понял, догадываешся теперь насколько мне понять сложнее?)
select с процедурами не применим, insert в некоторых случаях позволяется. (ну применительно к коду вышепреведенному)
← →
MOA (2003-07-03 11:06) [13]В 2000 можно воспользоваться функциями. В Вашем случае (7) возможны 2 варианта:
1. Оформить Ваши запросы в виде процедур, которые будут вызывать процедуру получения потомков примерно так:
EXEC ваша_процедура @ID_Object INTO #временная_таблица
- так можно. Некоторые делают все запросы приложения через процедуры (именно - все запросы), и считают, что так правильнее, чем запросами. В чём-то они правы - особенно в части безопасности и поддержки.
2. Если проект ещё недалеко продвинулся, можно изменить представление дерева, например, на основе вложенных множеств - тогда для выбора потомков не понадобится процедура. Но зато она понадобится при вставках-удалении.
Удачи!
← →
sniknik (2003-07-03 11:26) [14]MOA © (03.07.03 11:06)
вариантов гораздо больше, зависит от того что именно делается.
← →
MOA (2003-07-03 11:35) [15]>sniknik
Согласен.
← →
Bless (2003-07-03 12:55) [16]>естественно, ведь надо писать EXEC SP_WHO, именно так без
>всяких дополнений.
>(вот ты говориш написал вроде ясно, но у тебя конструкция
>нерабочая а вроде как тебе хотелось бы чтобы работало, вымысел
>короче без обьяснения что от него хочеш, я написал код гораздо
>короче в 2 слова абсолютно рабочий и ты меня не понял,
>MOA ©
>EXEC ваша_процедура @ID_Object INTO #временная_таблица
Именно то, что надо. Спасибо.
>2. Если проект ещё недалеко продвинулся, можно изменить
>представление дерева, например, на основе вложенных множеств -
>тогда для выбора потомков не понадобится процедура. Но зато она
>понадобится при вставках-удалении.
:)Для практики сделаю оба, благо время не поджимает.
А если есть ссылки на информацию о других способах организации иерархических данных в реляционных базах, то поделитесь плз
← →
MOA (2003-07-03 13:33) [17]Юссылки на информацию о других способах организации иерархических данных
http://www.osp.ru/win2000/sql/2001/05/967.htm
http://www.osp.ru/win2000/sql/2001/05/968.htm
Удачи!
← →
KSergey (2003-07-03 14:03) [18]>EXEC ваша_процедура @ID_Object INTO #временная_таблица
Это что еще за фокусы? Что-то не нашел я в справке такого синтаксиса, да и не работает оно у меня (MSSQL 7). Я что-то не так делаю?
Например, в QA:
exec sp_who into #t
Ответ сервера: "а не пошел бы ты нафиг со своим INTO?!" (Incorrect syntax near the keyword "into".)
Что не так?
← →
MOA (2003-07-03 14:06) [19]И ещё:
http://www.pwr.ru/items/?id=3
http://sdm.viptop.ru/articles/sqltrees.html
← →
MOA (2003-07-03 14:19) [20]Пардон.
INSERT таблица EXEC процедура
Пример из справки
--INSERT...EXECUTE procedure example
INSERT author_sales EXECUTE get_author_sales
Ещё раз пардон. нечистый попутал ;)
← →
olden69 (2003-07-03 14:21) [21]USE northwind
GO
create procedure dbo._test
as
select top 10 * from region
GO
GRANT EXECUTE ON [dbo].[_test] TO [public]
GO
SELECT a.*
FROM OPENROWSET("SQLOLEDB","MyServer";"sa";"sapassword",
"exec northwind.dbo._test") AS a
GO
← →
olden69 (2003-07-03 14:33) [22]логично переделать из
select work.name
FROM work, MyStoredProc
where work.Obj_kod =MyStoredProc.kod :Object
в
select work.name
FROM work, MyStoredProc
where dbo.IsChildOf(Work.Obj_kod,:Object)=1
осталось только правильно написать функцию определения потомок ли
первый объект второго
запрос перечня объектов - Query1
запрос перечня работ на указанном объекте - Query2
и связать их Master-Detail по параметру Query2->:Object и полю Query1->Object
← →
sniknik (2003-07-03 14:38) [23]MOA © (03.07.03 14:19)
это ответ на другой вопрос. (как занести результат работы процедуры в таблицу?)
а был
Набор данных как результат хранимой процедуры [D7, MSSQL]
...
select * from MyStoredProc
olden69 © (03.07.03 14:21)
подходит, результат этого ничем не отличается от простого EXEC _test (вернет такой же набор данных, только немного "попозже")
вот я и хотел узнать а зачем это нужно? смысл, может ему просто в гриде результат от процедуры отразить нужно. (не знает как вот и придумал вопрос на туже тему "помудрее")
← →
olden69 (2003-07-03 14:55) [24]вариант с OPENROWSET позволяет не создавать специально для выборки из результата одной процедуры еще одну процедуру (ради копирования во временную таблицу)
а обойтись просто селектом
но это на любителя
что "быстрее?легче?нагляднее?красивше?" - это уж как кому нравится
← →
KSergey (2003-07-03 16:49) [25]По поводу варианта с OpenRowset: вот только какие ресурсы потребуются для подключения сервера самого к себе через OLE... Про безопасность вообще молчу - явно в SQL-тексте написан пароль
Хотя как поучительный вариант - безусловно интересен. (лишь мое мнение)
← →
olden69 (2003-07-03 17:38) [26]будем надеятся что в YUKON Microsoft реализует синтаксис типа
SELECT * FROM (EXECUTE MyStoredProc)
← →
Bless (2003-07-04 09:05) [27]Что такое YUKON?
← →
olden69 (2003-07-04 16:19) [28]http://www.compulenta.ru/2003/6/26/40396/
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2003.07.28;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.007 c