将存储过程的结果分配给另一个存储过程中的变量

时间:2010-05-21 22:34:40

标签: sql sql-server-2005 tsql

这个问题的标题有点误导,但我无法总结这一点。

我有两个存储过程。第一个存储过程(s_proc1)调用第二个存储过程(s_proc2)。我想将s_proc2返回的值分配给s_proc1中的变量。目前,我正在以这种方式呼叫s_proc2(在s_proc1内):

EXEC s_proc2 @SiteID, @count = @PagingCount OUTPUT

s_proc2包含动态查询语句(原因我不在此概述)。

CREATE dbo.s_proc2
(
    @siteID int,
    @count int OUTPUT
)

AS

DECLARE @sSQL nvarchar(100)
DECLARE @xCount int

SELECT @sSQL = 'SELECT COUNT(ID) FROM Authors'

EXEC sp_ExecuteSQL @sSQL, N'@xCount int output', @xCount output
SET @count = @xCount
RETURN @count

这会导致@PagingCount的值为@count吗?我问,因为我从s_proc1获得的结果是不可思议的。事实上,我得到的是两个结果。第一个是@count,然后是s_proc1的结果(这是不正确的)。所以,它让我想知道@PagingCount是否设置不正确。

谢谢。

2 个答案:

答案 0 :(得分:3)

试试这个

SELECT @sSQL = 'SELECT @xCount = COUNT(ID) FROM Authors' 
EXEC sp_ExecuteSQL @sSQL, N'@xCount int output', @count = @xCount output

答案 1 :(得分:1)

要获得您需要的返回值

DECLARE @RC int
EXEC  @RC = s_proc2 @SiteID, @count = @PagingCount OUTPUT

您的动态SQL也应该

'SELECT @xCount = COUNT(ID) FROM Authors'

我看不到@xCount被分配到任何地方。