Использование результата хранимой процедуры

Vasily
Дата: 27.09.2000 14:35:14
Существует ли возможность в операции выборки использовать результат хранимой процедуры, возвращающей набор записей?

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

select * from exec sp_Exampl

Василий.
SergSuper
Дата: 28.09.2000 05:36:49
единственно что можно - делать вставку из процедуры.

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

insert #t exec sp_Exampl

select * from #t

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

Говорят в SQL2000 можно делать и сразу, но я не видел
С приветом Сергей
Vasily
Дата: 28.09.2000 07:13:22
Привет, Сергей.

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

Василий.
Laplas
Дата: 10.10.2000 00:23:54
Можно вернуть из процедуры cursor, если это поможет
Ольга
Дата: 10.10.2000 07:05:08
Криво это, конечно, но все же... В 7-ке можно сделать так:
select * from openrowset('SQLOLEDB', servername; login; password, 'exec DatabaseName.owner.sp_Exampl')
Vasily
Дата: 10.10.2000 09:06:00
Да, такой вариант конечно тоже можно, но судя по всему, быстрее будет работать через
временную таблицу...
Laplas
Дата: 10.10.2000 11:59:16
Да вы что ребята, зачем так сложно, может я чего не понимаю, но

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
Vasily
Дата: 10.10.2000 12:13:36
2 Laplas

Дело в том, что курсоры сами по себе в сиквеле плохо организованы. Уж очень они медленные.
Поэтому и даже не обсуждались здесь...
Vasily
Дата: 10.10.2000 12:17:31
И еще, здесь же не стои цель написать такую процедуру. Задача заключается в том, что уже есть какая-то процедура, которую и менять нельзя, т.к. ее используют и в других местах, и надо получить набор данных, возвращаемых ей.
Laplas
Дата: 10.10.2000 12:22:33
2 Vasily
Не уверен что способ предложенный Ольгой, да и временная таблица будут работать быстрее.
Все, конечно, зависит от конкретного случая.
И сразу по поводу второго. А зачем менять процедуру, возвращающую курсор?