2009-07-24 36 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。许多有关程序间通信的不同方法的信息,它们如何工作以及为什么你可能(或不可能)选择使用每一种方法。