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

尝试访问SQL server EXEC语句的结果/结果集,sql,stored-procedures,Sql,Stored Procedures,假设我有一个存储的proc1,它返回一些数据。如何执行该存储过程并根据该存储过程的结果在另一个存储过程中设置一些参数 例如: 表: 存储过程1: CREATE Procedure StoredProc1 @Name [varchar] AS SELECT UserID, Name, DateOfBirth FROM UserInfo WHERE Name = @Name 存储过程2: CREATE Procedure StoredProc2 @AmountOfNa

假设我有一个存储的proc1,它返回一些数据。如何执行该存储过程并根据该存储过程的结果在另一个存储过程中设置一些参数

例如: 表:

存储过程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')
我知道Storage Proc 2不是应该如何构建的,但这正是我想要做的,基于最后一组结果设置计数


我无法修改存储的proc 1

如果您知道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

您可以在临时表或表变量中捕获第一个存储过程的结果

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

INSERT  @MyResults
EXEC    StoredProc1 'Scott'

-- do what you want with the table here...
或者-可以使用@ROWCOUNT变量获取第一个进程的结果计数。这可能有效,也可能无效,这取决于第一个存储过程中select语句后面的内容

DECLARE @Count int

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

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

如果您无法控制StoredProc1,临时表可能是您的最佳选择,因为您无法保证@ROWCOUNT在StoredProc1过程中的select语句后通过代码重置的结果。

您已经得到了很好的答案(并且已经接受了一个),但您可能仍然对感兴趣。关于过程间通信的不同方法的大量信息,它们是如何工作的,以及您可能(或可能不)选择使用每种方法的原因。

我想您的意思是说您不能修改存储过程1。@@ROWCOUNT?不确定,如果这正是您要查找的。请记住,在SQL SP批处理中不能多次使用INSERT EXEC。我的INSERT一直失败,但@RowCount有帮助alot@GaneshR,我认为这与使用这些的嵌套过程有关,而不是在一个过程中执行多少次。
DECLARE @Count int

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

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