Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Использование результата хранимой процедуры  [new]
Vasily
Guest
Существует ли возможность в операции выборки использовать результат хранимой процедуры, возвращающей набор записей?

Абстрагируясь от синтаксиса mssql меня интересует что-то наподобие

select * from exec sp_Exampl

Василий.
27 сен 00, 14:35    [1611]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
SergSuper
Guest
единственно что можно - делать вставку из процедуры.

Т.е. если есть некая временная таблица #t с соответствующим количеством полей с соответствующеми типами, то можно написать в два приёма:

insert #t exec sp_Exampl

select * from #t

В общем случае таблица конечно необязательно должна быть временной

Говорят в SQL2000 можно делать и сразу, но я не видел
С приветом Сергей
28 сен 00, 05:36    [1612]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Vasily
Guest
Привет, Сергей.

Именно этот способ я использовал раньше. Долго копал документацию, надеялся, что можно как-то поуниверсальнее, без дополнительных таблиц.

Василий.
28 сен 00, 07:13    [1613]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Laplas
Member

Откуда:
Сообщений: 68
Можно вернуть из процедуры cursor, если это поможет
10 окт 00, 00:23    [1614]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Ольга
Guest
Криво это, конечно, но все же... В 7-ке можно сделать так:
select * from openrowset('SQLOLEDB', servername; login; password, 'exec DatabaseName.owner.sp_Exampl')
10 окт 00, 07:05    [1615]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Vasily
Guest
Да, такой вариант конечно тоже можно, но судя по всему, быстрее будет работать через
временную таблицу...
10 окт 00, 09:06    [1616]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Laplas
Member

Откуда:
Сообщений: 68
Да вы что ребята, зачем так сложно, может я чего не понимаю, но

CREATE PROCEDURE OpenCursor @cursor CURSOR VARYING OUTPUT
AS
SET @cursor = CURSOR
FORWARD_ONLY STATIC FOR
SELECT *
FROM myTable
OPEN @cursor
GO

И затем

DECLARE @TheCursor CURSOR

EXEC OpenCursor @TheCursor OUT

WHILE (@@FETCH_STATUS = 0) BEGIN
-- Что вашей душе угодно
FETCH NEXT FROM @TheCursor

END

CLOSE @TheCursor
DEALLOCATE @TheCursor
10 окт 00, 11:59    [1617]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Vasily
Guest
2 Laplas

Дело в том, что курсоры сами по себе в сиквеле плохо организованы. Уж очень они медленные.
Поэтому и даже не обсуждались здесь...
10 окт 00, 12:13    [1618]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Vasily
Guest
И еще, здесь же не стои цель написать такую процедуру. Задача заключается в том, что уже есть какая-то процедура, которую и менять нельзя, т.к. ее используют и в других местах, и надо получить набор данных, возвращаемых ей.
10 окт 00, 12:17    [1619]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Laplas
Member

Откуда:
Сообщений: 68
2 Vasily
Не уверен что способ предложенный Ольгой, да и временная таблица будут работать быстрее.
Все, конечно, зависит от конкретного случая.
И сразу по поводу второго. А зачем менять процедуру, возвращающую курсор?
10 окт 00, 12:22    [1620]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Vasily
Guest
2 Laplas

Я думаю, что на большом объеме данных первые два случая работать будут быстрее. Конечно затратится время, на создание/удаление временной таблицы или создание соединения, но дальше идут множественные операции, а не построчная
обработка курсором...

Что касается второго случая, то что значит зачем, или ты предлагаешь продублировать ее и внести изменения для того, чтобы она возвращала курсор?
10 окт 00, 12:34    [1621]     Ответить | Цитировать Сообщить модератору
 RE:Использование результата хранимой процедуры  [new]
Alex Malinin
Guest
Э-э-э...
Я недавно обнаружил,что процедуру вида
create MyProc
as
select F1, F2, F3, from Table1 ...

вполне можно запустить
exec MyProc

и в результате будет набор записей, возвращаемый селектом.

Это не то?
24 окт 00, 15:38    [1622]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Использование результата хранимой процедуры  [new]
Don
Member

Откуда:
Сообщений: 1
у меня почему-то не работает запрос вида:

select top 0 * into #t from Unit
insert #t exec GetUnits
select * from #t

выдает Insert Error: Column name or number of supplied values does not match table definition.
структура Unit, и результата GetUnits одинаковая, есть подозрение что такого рода запрос в insert #t подставляет не результирующую таблицу а то что в процедуре возвращается через return, т.е. int

попутно вопрос, а что если у меня процедура возвращает несколько таблиц, ну скажем дерево каких-то элементов в виде 2-х таблиц Element(ElementID), Link(ParentElementID, ChildElementID)
и возникла задача получить эти две таблицы в другой процедуре, как тогда лучше поступать?
13 мар 03, 11:53    [146341]     Ответить | Цитировать Сообщить модератору
 Re: Использование результата хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
return здесь точно непричем.
Скорее всего GetUnits все-таки возвращает неправильный резльтат

и возникла задача получить эти две таблицы в другой процедуре, как тогда лучше поступать?
- Разделять процедуру на две, каждая из которых возвращает одну таблицу.
- Модифицировать процедуру так, чтобы она попутно заносила данные в таблицы, которые будут видны "снаружи"
13 мар 03, 12:36    [146441]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Использование результата хранимой процедуры  [new]
dmitriy_bds
Member

Откуда:
Сообщений: 1
Glory

- Модифицировать процедуру так, чтобы она попутно заносила данные в таблицы, которые будут видны "снаружи"

А если не возможно модифицировать процедуру т.к. на удаленном сервере права только на селект а результат процедуры необходимо инсертить в табл., как тогда быть?
5 сен 09, 09:21    [7621582]     Ответить | Цитировать Сообщить модератору
 Re: Использование результата хранимой процедуры  [new]
Glory
Member

Откуда:
Сообщений: 104760
dmitriy_bds
Glory

- Модифицировать процедуру так, чтобы она попутно заносила данные в таблицы, которые будут видны "снаружи"

А если не возможно модифицировать процедуру т.к. на удаленном сервере права только на селект а результат процедуры необходимо инсертить в табл., как тогда быть?

Никак не быть.
5 сен 09, 17:23    [7622011]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить