TSQL: вызов хранимой процедуры из другой хранимой процедуры и чтение результата - PullRequest
30 голосов
/ 14 июня 2010

У меня есть хранимая процедура, которая, заканчивая SELECT, возвращает набор записей. Я могу вызвать его в другой хранимой процедуре:

EXEC procedure @param

Как получить возвращаемый набор записей? Спасибо

Ответы [ 5 ]

33 голосов
/ 14 июня 2010

Вы можете создать временную таблицу и затем использовать INSERT INTO #MyTable EXEC procedure @param.

Здесь перечислены другие техники .

3 голосов
/ 14 июня 2010

AFAIK, вы не можете.То, что вы, вероятно, хотите сделать, это использовать функцию для ваших первых (или обеих) процедур.Функции могут возвращать только одну вещь, но они могут возвращать таблицу.Хранимые процедуры могут возвращать несколько результатов, но не для других функций / хранимых процедур.

Например:

CREATE FUNCTION [dbo].[fn_GetSubordinates] (
    @sPersonID VARCHAR(10),
    @nLevels INT
)
RETURNS @tblSubordinates TABLE
(
    Person_Id VARCHAR(10),
    Surname char(25),
    Firstname char(25)
)
AS
BEGIN
    ...
2 голосов
/ 14 июня 2010

Если вы используете SQL Server 2008, я бы рекомендовал вернуть параметр с табличным значением.

http://msdn.microsoft.com/en-us/library/bb510489.aspx

1 голос
/ 03 августа 2016

Во-первых, вы НЕ МОЖЕТЕ ВОЗВРАТИТЬ набор записей с помощью хранимой процедуры. По возвращении хранимая процедура может возвращать только целые числа.

Вы упомянули оператор SELECT, который является DQL и предназначен только для отображения.

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

1 голос
/ 30 августа 2014

Вы можете сделать это с помощью выходной переменной в хранимой процедуре.Например:

CREATE PROCEDURE sp_HelloWorld   @MyReturnValue int OUT
AS
SELECT @MyReturnValue = 100
Return @MyReturnValue 

Чтобы вызвать этот сохраненный процесс, выполните следующие действия:

DECLARE @TestReturnVal int 

EXEC sp_HelloWorld @TestReturnVal output
SELECT @TestReturnVal 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...