![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Набор данных как результат хранимой процедуры [D7, MSSQL]
Bless © (2003-07-02 12:49:00)Есть хранимая процедура, которая набор данных.
Как к этому результирующему запросу обратиться?
Например, в другом запросе:
select * from MyStoredProc
olden69 (2003-07-04 16:19:00) [1]http://www.compulenta.ru/2003/6/26/40396/
Bless (2003-07-04 09:05:00) [2]Что такое YUKON?
olden69 (2003-07-03 17:38:00) [3]будем надеятся что в YUKON Microsoft реализует синтаксис типа
SELECT * FROM (EXECUTE MyStoredProc)
KSergey (2003-07-03 16:49:00) [4]По поводу варианта с OpenRowset: вот только какие ресурсы потребуются для подключения сервера самого к себе через OLE... Про безопасность вообще молчу - явно в SQL-тексте написан пароль
Хотя как поучительный вариант - безусловно интересен. (лишь мое мнение)
olden69 (2003-07-03 14:55:00) [5]вариант с OPENROWSET позволяет не создавать специально для выборки из результата одной процедуры еще одну процедуру (ради копирования во временную таблицу)
а обойтись просто селектом
но это на любителя
что "быстрее?легче?нагляднее?красивше?" - это уж как кому нравится
sniknik (2003-07-03 14:38:00) [6]MOA © (03.07.03 14:19)
это ответ на другойвопрос. (как занести результат работы процедуры в таблицу?)
а был
Набор данныхкак результат хранимой процедуры [D7, MSSQL]
...
select * from MyStoredProc
olden69 © (03.07.03 14:21)
подходит, результат этого ничем не отличается от простого EXEC _test (вернет такой же набор данных, только немного "попозже")
вот я и хотел узнать а зачем это нужно? смысл, может ему просто в гриде результат от процедуры отразить нужно. (не знает как вот и придумал вопрос на туже тему "помудрее")
olden69 (2003-07-03 14:33:00) [7]логично переделать из
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
olden69 (2003-07-03 14:21:00) [8]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
MOA (2003-07-03 14:19:00) [9]Пардон.
INSERT таблица EXEC процедура
Пример из справки
--INSERT...EXECUTE procedure example
INSERT author_sales EXECUTE get_author_sales
Ещё раз пардон. нечистый попутал ;)
MOA (2003-07-03 14:06:00) [10]И ещё:
http://www.pwr.ru/items/?id=3
http://sdm.viptop.ru/articles/sqltrees.html
KSergey (2003-07-03 14:03:00) [11]>EXEC ваша_процедура @ID_Object INTO #временная_таблица
Это что еще за фокусы? Что-то не нашел я в справке такого синтаксиса, да и не работает оно у меня (MSSQL 7). Я что-то не так делаю?
Например, в QA:
exec sp_who into #t
Ответ сервера: "а не пошел бы ты нафиг со своим INTO?!" (Incorrect syntax near the keyword "into".)
Что не так?
MOA (2003-07-03 13:33:00) [12]Юссылки на информацию о других способах организации иерархических данных
http://www.osp.ru/win2000/sql/2001/05/967.htm
http://www.osp.ru/win2000/sql/2001/05/968.htm
Удачи!
Bless (2003-07-03 12:55:00) [13]>естественно, ведь надо писать EXEC SP_WHO, именно так без
>всяких дополнений.
>(вот ты говориш написал вроде ясно, но у тебя конструкция
>нерабочая а вроде как тебе хотелось бы чтобы работало, вымысел
>короче без обьяснения что от него хочеш, я написал код гораздо
>короче в 2 слова абсолютно рабочий и ты меня не понял,
>MOA ©
>EXEC ваша_процедура @ID_Object INTO #временная_таблица
Именно то, что надо. Спасибо.
>2. Если проект ещё недалеко продвинулся, можно изменить
>представление дерева, например, на основе вложенных множеств -
>тогда для выбора потомков не понадобится процедура. Но зато она
>понадобится при вставках-удалении.
:)Для практики сделаю оба, благо время не поджимает.
А если есть ссылки на информацию о других способах организации иерархических данных в реляционных базах, то поделитесь плз
MOA (2003-07-03 11:35:00) [14]>sniknik
Согласен.
sniknik (2003-07-03 11:26:00) [15]MOA © (03.07.03 11:06)
вариантов гораздо больше, зависит от того что именно делается.
MOA (2003-07-03 11:06:00) [16]В 2000 можно воспользоваться функциями. В Вашем случае (7) возможны 2 варианта:
1. Оформить Ваши запросы в виде процедур, которые будут вызывать процедуру получения потомков примерно так:
EXEC ваша_процедура @ID_Object INTO #временная_таблица
- так можно. Некоторые делают все запросы приложения через процедуры (именно - все запросы), и считают, что так правильнее, чем запросами. В чём-то они правы - особенно в части безопасности и поддержки.
2. Если проект ещё недалеко продвинулся, можно изменить представление дерева, например, на основе вложенных множеств - тогда для выбора потомков не понадобится процедура. Но зато она понадобится при вставках-удалении.
Удачи!
sniknik (2003-07-03 11:02:00) [17]> Если написать
select * from sp_who
....
то не работает
естественно, ведь надо писать EXEC SP_WHO, именно так без всяких дополнений.
(вот ты говориш написал вроде ясно, но у тебя конструкция нерабочая а вроде как тебе хотелось бы чтобы работало, вымысел короче без обьяснения что от него хочеш, я написал код гораздо короче в 2 слова абсолютно рабочий и ты меня не понял, догадываешся теперь насколько мне понять сложнее?)
select с процедурами не применим, insert в некоторых случаях позволяется. (ну применительно к коду вышепреведенному)
Bless (2003-07-03 10:51:00) [18]>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),
то не работает
Fay (2003-07-02 19:05:00) [19]А что не работает? Что за ошибка-то?
sniknik (2003-07-02 18:19:00) [20]Bless (02.07.03 17:32)
не совсем то о чем я думал
мне бы не описание твоей работы а конкретно чего хотел добится этим
select * from MyStoredProc
данные в гриде показать?, дальнейшая обработка? на сервере и т.д.
>> Попробуй в запросе EXECUTE MyProc
> Пробовал. Не работает.
а ты попробуй не свою которая возможно ничего не возвращает (как бы хорошо ты о ней не думал), а системную которая точно работает правильно. напримерEXEC SP_WHO