2009-07-24 3 views
3

Скажем, я сохранил proc 1, который возвращает некоторые данные. как я могу выполнить эту сохраненную процедуру и установить некоторые параметры в другой хранимой процедуре на основе результатов этой хранимой процедуры.Попытка получить доступ к результатам/результирующему набору SQL-запроса EXEC

Например: Таблица:

UserInfo (UserID [int], Name [varchar], DateOfBirth [datetime]) 

ХП 1:

CREATE Procedure StoredProc1 
    @Name [varchar] 
AS 
    SELECT UserID, Name, DateOfBirth FROM UserInfo WHERE Name = @Name 

ХП 2:

CREATE Procedure StoredProc2 
    @AmountOfNames [int] OUT 

SELECT @AmountOfNames=COUNT(EXEC StoredProc1 @Name='Irwin') 

Я знаю, что ХП 2 не так, как она должна но это то, что я хочу сделать, установите счет на основе последнего набора результатов.

Я не могу изменить ХП 1

+1

Я думаю, вы хотели сказать, что вы не можете изменить хранимую процедуру # 1. –

+0

@@ ROWCOUNT? Не уверен, если это то, что вы ищете. – shahkalpesh

ответ

2

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

DECLARE @MyResults TABLE(UserID int, Name varchar(30), DateOfBirth datetime) 

INSERT @MyResults 
EXEC StoredProc1 'Scott' 

-- do what you want with the table here... 

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

DECLARE @Count int 

EXEC StoredProc1 'Scott' 
SET @Count = @@ROWCOUNT 

-- do whatever you want with the count here... 

Если вы не имеете контроля над StoredProc1, таблицей температуры может быть лучшим вариантом, так как вы можете 't гарантирует, что результаты @@ ROWCOUNT будут сбрасываться кодом после оператора select в вашей программе StoredProc1.

+0

Помните, что вы не можете использовать INSERT EXEC более одного раза в пакете SQL SP. –

+0

моя вставка не сработала, но @@ RowCount помог alot – Irwin

+0

@Ganesh R, я думал, что это связано с процедурами вложенности, которые используют их, а не сколько раз в одной процедуре вы это делаете. –

2

Если вы знаете схему возвращения SP1, вы можете сделать это:

CREATE SP2 
AS 
BEGIN 

CREATE TABLE #Results1 (
    UserID VARCHAR(50), 
    Name  VARCHAR(100), 
    DateOfBirth DATETIME 
) 

INSERT INTO #Results1 
EXEC sp1 @Param1, @Param2 

SELECT COUNT(UserID) FROM #Results1 

END 
2

У вас уже есть хорошие ответы (и приняли его), но вас все равно может заинтересовать . Много информации о различных методах межпроцедурной коммуникации, о том, как они работают, и о том, почему вы (или не можете) выбирать использовать их.

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