尝试访问SQL Server EXEC语句的结果/结果集

时间:2009-07-24 19:54:04

标签: sql stored-procedures

假设我已经存储了proc 1,它会返回一些数据。如何执行存储过程并根据存储过程的结果在另一个存储过程中设置一些参数。

例如: 表:

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')

我知道Stored Proc 2不是应该如何构建的,但这就是我想要做的,根据最后一组结果设置计数。

我无法修改存储过程1

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 proc中的select语句之后,代码重置@@ ROWCOUNT的结果。

答案 2 :(得分:2)

你已经得到了很好的答案(并已经接受了答案),但你可能仍然对 How to Share Data Between Stored Procedures 感兴趣。关于程序间通信的不同方法,它们如何工作以及为什么你可能(或可能不)选择使用每种方法的大量信息。