2009-07-24 63 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是不是應該怎樣建立,但這是我想要做的,根據最後一組結果設置計數。

如果你知道SP1的回報模式我不能修改存儲過程1

+1

我想你的意思是說你不能修改存儲的proc#1。 – 2009-07-24 19:57:13

+0

@@ ROWCOUNT?不知道,如果這是你在找什麼。 – shahkalpesh 2009-07-24 19:57:37

回答

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變量來從你的第一個PROC搶的結果計數。這可能會或可能不會取決於你的第一個存儲過程中的SELECT語句後會發生什麼工作...

DECLARE @Count int 

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

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

如果你不擁有控制權StoredProc1,臨時表可能會因爲你是你最好的選擇不保證在您的StoredProc1過程中的select語句後通過代碼重置@@ ROWCOUNT的結果。

+0

請記住,您不能在SQL SP批處理中多次使用INSERT EXEC。 – 2009-07-24 20:06:07

+0

我的插入保持失敗,但@@ RowCount幫助了很多 – Irwin 2009-07-24 20:18:32

+0

@Ganesh R,我認爲它必須處理使用這些的嵌套過程,而不是在一個過程中執行多少次。 – 2009-07-24 20:19:22

2

,你可以這樣做:

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

你已經有了很好的答案已經(和接受了一個),但你可能仍然有興趣在How to Share Data Between Stored Procedures。許多有關程序間通信的不同方法的信息,它們如何工作以及爲什麼你可能(或不可能)選擇使用每一種方法。