Вызов хранимой процедуры из другой хранимой процедуры и возврат результата в виде новых столбцов - PullRequest
0 голосов
/ 10 апреля 2010

Как вызвать хранимую процедуру из другой хранимой процедуры и вернуть результат в виде первого столбца?

ALTER PROCEDURE [dbo].[GetItems]
AS
SET NOCOUNT ON

SELECT ID, AddedDate, Title,Description,
       Result of Stored Procedure "CountAll" call with parameter ID as Total 
FROM dbo.Table1

А также: как быть, если хранимая процедура CountAll возвращает несколько столбцов, а не только скаляр?

Ответы [ 3 ]

4 голосов
/ 10 апреля 2010

Выходной параметр для одного значения:

EXEC CountAll @Total OUTPUT
SELECT ID, AddedDate, Title,Description,@total as Total
FROM dbo.Table1

Или используйте CROSS APPLY:

SELECT ID, AddedDate, Title,Description,@total as Total
FROM dbo.Table1
CROSS APPLY
(SELECT soemthing as total FROM .... WHERE...)

Или используйте UDF

или производная таблица

SELECT ID, AddedDate, Title,Description, totals.Total
FROM
   dbo.Table1 T
   JOIN
   (SELECT count(*) as Total, id FROM dbo.Table1 GROUP BY ID) totals ON T.ID = totals.id

Если хранимый процесс возвращает несколько столбцов, вы должны использовать клиенту udf, перекрестное применение, производную таблицу или вернуть 2 набора результатов

По сути, хранимые процедуры не могут использоваться так, как вы хотите

1 голос
/ 10 апреля 2010
SELECT ID, AddedDate, Title,Description,
       , ( Select Count(*)
            From OtherTable
            Where Table1.Id = OtherTable.Id ) As ItemCount
FROM dbo.Table1

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

0 голосов
/ 10 апреля 2010

Вам нужна пользовательская функция UDF вместо процедуры. (Если я хорошо помню, вы не можете вызвать хранимую процедуру из UDF)

Другие возможности по рефакторингу вашего запроса показаны в aswer gbn.

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