Вниз
Скачать: CL | DM;

Вызов хранимой процедуры из другой хранимой процедуры   Найти похожие ветки 

← →
MakNik   (2005-01-26 00:57) [0]

Есть 2 хранимые процедуры:
1-я процедура по заданным параметрам проводит расчет и  возвращает n+1 строк…
во 2-й процедуре необходимо обработать результат работы 1-й процедуры…
Подскажите неопытному, пожалуйста, как правильно организовать вызов 1-й процедуры из 2-й?
P.s. Хочется организовать что-то типа:

Proc2
...
Declare @TMPTab Table ....
Insert into @TMPTab
Exec Proc1  Param, Param2
...


← →
Ольга   (2005-01-26 07:21) [1]

Нет, так нельзя.
В предложении Insert into нельзя использовать Exec.
Но если 1-ю процедуру можно переделать в функцию, то такая конструкция будет работать:

Declare @TMPTab Table ....
Insert into @TMPTab
SELECT * FROM Func1(Param, Param2)

А еще лучше будет использовать для промежуточных расчетов не таблицу а курсор (команда Insert слишком затратная на большой выборке):
DECLARE MyCur CURSOR SCROLL FOR
   SELECT * FROM Func1(Param, Param2)
FOR READ ONLY


← →
sniknik ©   (2005-01-26 08:16) [2]

> Нет, так нельзя.
> В предложении Insert into нельзя использовать Exec.
как раз для него сделано исключение (в отличии от select, но и тут можно обойти)
правда не пробовал с переменной табличного типа но во временную (тем более обычную) таблицу все замечательно вставляется такой конструкцией.
INSERT INTO #Table
EXEC Procedure1


← →
Ольга   (2005-01-26 08:52) [3]

В самом деле во временную таблицу можно писать командой
INSERT INTO #Table EXEC Procedure1,
а тоже самое в переменную типа таблицы нельзя (это для меня не понятно), выдается сообщение:
EXECUTE cannot be used as a source when inserting into a table variable.


← →
Ольга   (2005-01-26 09:03) [4]

Уже поняла. INSERT INTO предполагает физическую запись, потому временная таблица здесь к месту. А для виртуальной таблицы годится только SELECT.
РЕЗЮМЕ:
Если у вас большая выборка, делайте INSERT INTO @Table SELECT..., если небольшая - любой из предложенных вариантов.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.023 c
1-1108309911
Eraser
2005-02-13 18:51
2005.02.27
Способ определения активности/неактивности пользователя


1-1107939243
chup
2005-02-09 11:54
2005.02.27
Печать в Word


1-1108047557
ali_tash
2005-02-10 17:59
2005.02.27
ещё раз про SWAP


1-1108048868
YoungPioneer
2005-02-10 18:21
2005.02.27
статья перевод Delphi win32 на Delphi .NET


3-1106381724
Dell3r
2005-01-22 11:15
2005.02.27
Сетевая версия




   Наверх