2010-04-10 3 views
0

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

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 возвращает несколько столбцов, а не только скаляр?

+0

Вам может не понадобиться хранимая процедура для «CountAll», если вы сообщите нам, что она делает. – Thomas

+0

Thomas, Count all Подсчитывает некоторые записи из другой таблицы с идентификатором в качестве параметра – luppi

+0

Учитывая, что вам не нужен sp. Если вы предоставите нам подробную информацию о процедурах CountAll, мы можем быть более конкретными, но, как правило, в синтаксисе SQL имеется множество средств для получения подсчетов в одном запросе. – Thomas

ответ

4

параметр Ouput для одного значения:

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 

если сохраненный proc возвращает multi PLE колонна, то вы должны использовать UDF, кросс применять, производную таблицу или возврат 2 наборов результатов для клиента

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

+0

CountAll нуждается в параметре идентификатора, который нужно передать ... – luppi

+0

В основном я хочу выполнить CountAll для каждой строки таблицы1, которая возвращается пользователю – luppi

+0

ОК, используйте CROSS APPLY или udf или производную таблицу, а затем – gbn

1
SELECT ID, AddedDate, Title,Description, 
     , (Select Count(*) 
      From OtherTable 
      Where Table1.Id = OtherTable.Id) As ItemCount 
FROM dbo.Table1 

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

0

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

. Офферские возможности реорганизации вашего запроса отображаются в aswer по gbn.

Смежные вопросы