首页 > 解决方案 > 如何使用另一个存储过程中的参数化输出执行存储过程

问题描述

考虑以下存储过程:

ALTER PROCEDURE Administration.SetAndRetrieveNewPurchaseOrderNumber 
    @PurchaseOrderNumber INT OUTPUT
AS
BEGIN
   SET NOCOUNT ON

   UPDATE Administration.KeyNumbers
   SET PurchaseOrderNumber += 1
   WHERE RowId = 1

   SET @PurchaseOrderNumber = (SELECT kn.PurchaseOrderNumber
                               FROM Administration.KeyNumbers kn
                               WHERE kn.RowId = 1)
END
GO

我可以在我的应用程序中轻松使用它,只需执行该过程并通过引用适当命名的参数传入。

我现在发现自己想在另一个存储过程中执行上面列出的过程。我尝试了以下方法,但它似乎不起作用(在被调用的存储过程的参数部分中有或没有 @ 符号;

DECLARE @PurchaseOrderNumber INT
EXEC Administration.SetAndRetrieveNewPurchaseOrderNumber(@PurchaseOrderNumber)

这样做的正确方法是什么,或者实际上是否应该有一个单独的过程用于在这种情况下只产生一个标量结果?

标签: sql-serverstored-proceduressql-server-2016

解决方案


传入参数时需要加上 output 关键字。

例如:

Declare @output int;

Exec storedproc(@parameter output)

推荐阅读