You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储过程OUTPUT参数默认值未生效问题咨询

存储过程OUTPUT参数默认值的行为困惑

我写了一个简单的存储过程,但它的行为让我困惑。我希望在不给参数赋值时,存储过程返回默认值,于是创建了如下存储过程:

CREATE PROCEDURE [dbo].[Test]
    @TestVariable int = 0 OUTPUT
AS
BEGIN
    SELECT @TestVariable
END

我以为这段代码会返回0,但实际返回的是NULL。这个默认值好像没起作用,它到底有什么意义?

我找到的唯一解决办法是修改成这样:

CREATE PROCEDURE [dbo].[Test]
    @TestVariable int = 0 OUTPUT
AS
BEGIN
    IF @TestVariable IS NULL 
        SET @TestVariable = 0

    SELECT @TestVariable
END

如果这是唯一办法也可以,但参数定义里的默认值到底有什么用?比如我创建了下面这个存储过程:

CREATE PROCEDURE [dbo].[Test2]
    @number1 int = 5,
    @number2 int = 5
AS
BEGIN
    SELECT @number1 + @number2
END

当不传入任何参数时,默认值会生效,返回结果是10。但如果把@number1和@number2改成OUTPUT参数,结果又会默认返回NULL。我希望有人能解释这个让人困惑的行为。

我试过普通的非输出参数,它们的默认值能正常工作。另外我知道不需要用SELECT来输出变量,调用存储过程时它会自动返回,这么做只是为了测试。

执行语句如下:

DECLARE @Test int

EXEC [dbo].[Test] @TestVariable = @Test OUTPUT

SELECT @Test

解答

当把OUTPUT参数映射到变量时,这个变量会同时被当作输入参数使用,我之前没意识到这种双重行为。只有当不把OUTPUT参数映射到变量,且在存储过程内部使用它时,默认值才会生效。


内容的提问来源于stack exchange,提问作者Teun Kruijer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 23:55:19