如何在另一个存储过程中调用带输出参数的存储过程?
解决带输出参数的存储过程调用问题
问题根源
你当前的调用写法有两个关键问题:
- 没有明确标记参数为输出参数,SQL Server不知道要把存储过程里的赋值传递回你的变量;
- 调用存储过程时用括号包裹参数的语法不符合SQL Server的常规调用规范。
正确的调用方式
直接修改调用代码,加上OUTPUT关键字即可:
DECLARE @PurchaseOrderNumber INT -- 调用时必须在参数后加上OUTPUT(或简写OUT) EXEC Administration.SetAndRetrieveNewPurchaseOrderNumber @PurchaseOrderNumber OUTPUT -- 验证结果 SELECT @PurchaseOrderNumber AS NewPurchaseOrderNumber
如果想让代码更清晰(尤其是存储过程有多个参数时),可以使用命名参数的写法,这样参数顺序不影响:
DECLARE @PurchaseOrderNumber INT EXEC Administration.SetAndRetrieveNewPurchaseOrderNumber @PurchaseOrderNumber = @PurchaseOrderNumber OUTPUT
是否需要单独创建标量存储过程?
完全不需要!你现有的存储过程已经通过OUTPUT参数实现了返回采购订单号的功能,只要按上面的正确方式调用,就能正常获取到值。
当然,如果你在业务中非常频繁地需要直接获取这个标量值,也可以考虑创建一个标量值函数,但这属于优化选项,不是必须的——现有存储过程完全能满足需求。
内容的提问来源于stack exchange,提问作者Dom Sinclair
相关产品推荐
相关产品推荐

