Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Набор данных как результат хранимой процедуры [D7, MSSQL]


Страницы:   1 2

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


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо