2013-06-25 2 views
2

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

SELECT CalculatedField1 , 
     CalculatedField2 , 
     ... 
FROM ... 
WHERE CONDITION 

это sproc (позволяет называть его проца) возвращает переменное число строк, в зависимости от того, куда состояние. Это прекрасно работает. Теперь мне нужно написать хранимую процедуру, которая получит сводку этих возвращенных строк.

-- procB 
SELECT SUM(CalculatedField1), 
SELECT SUM(CalculatedField2), 
     ... 
FROM (EXEC procA params) 

Возможно ли это?

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

CREATE PROCEDURE [dbo].[sprocB] (@prm INT = NULL OUTPUT) 
AS 
BEGIN 
SET NOCOUNT ON; 

    SET @prm = 1 

    SELECT Id FROM dbo.AnyTable 
END 

CREATE PROCEDURE [dbo].[sprocA] (@prm INT = NULL OUTPUT) 
AS 
BEGIN 
SET NOCOUNT ON; 

    CREATE TABLE #temp (Id INT) 

    INSERT INTO #temp 
    EXEC sprocB @prm 

    SELECT Id FROM #temp 
END 

Для выполнения:

USE [MyDatabase] 
GO 

DECLARE @return_value int, 
    @prm int 

EXEC @return_value = [dbo].[sprocA] 
    @prm = @prm OUTPUT 

SELECT @prm as N'@prm' 

SELECT 'Return Value' = @return_value 

GO 

Результаты Темп таблицы в порядке, ResultSet извлекается правильно, однако значение @pem еще NULL.

ответ

2

Это возможно, но вам нужен вспомогательный стол:

CREATE PROCEDURE procB 
AS 

declare @table table (CalculatedField1 int, CalculatedField12 int) 

insert into @table 
EXEC sp_a 

select SUM(CalculatedField1), SUM(CalculatedField2) 
from @table 

GO 
+0

У меня проблема с выходными параметрами. См. Обновление в вопросе. – Goran

1

Это может делать то, что вы хотите:

создать таблицу #scratch (CalculatedField1 INT, CalculatedField2 INT, ...)

вставки в #scratch (EXEC проца Params)

выберите сумма (CalculatedField1), сумма (CalculatedField2), ... от #scratch

стол падение #scratch

+0

У меня есть проблема с выходными параметрами. См. Обновление в вопросе. – Goran

+0

Вам нужно использовать временную таблицу (#tablename), а не переменную таблицы (@tablename). Переменные таблиц нельзя использовать в инструкции INSERT EXEC или SELECT INTO. http://support.microsoft.com/kb/305977/en-us –

+0

Привет, Кэтрин. Я получаю те же результаты от объявления переменной таблицы и создания таблицы temp. В обоих случаях я получаю данные, но выходные параметры не работают. – Goran