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

存储过程参数声明:NULL与=NULL的区别、调用差异及适用场景

两种存储过程参数声明方式的差异、调用区别及适用场景

核心差异

第一种写法只是声明参数允许为NULL值,但调用时必须显式传入所有参数;第二种写法是给参数设置了默认值为NULL,调用时可以选择性省略参数,省略的参数会自动使用默认的NULL。

调用时的具体区别

  • 针对第一种写法:

    create procedure usp_UpdateEmployee
     @Name varchar(50) null,
     @DOB datetime null
    

    调用时必须传入所有参数,哪怕你想传的是NULL,不能省略任何一个。比如:

    -- 合法:传入两个NULL
    EXEC usp_UpdateEmployee NULL, NULL;
    -- 合法:传入具体值
    EXEC usp_UpdateEmployee '张三', '1990-01-01';
    -- 非法:少传一个参数,会直接报错
    -- EXEC usp_UpdateEmployee '张三';
    
  • 针对第二种写法:

    create procedure usp_UpdateEmployee
     @Name varchar(50) = null,
     @DOB datetime = null
    

    调用时灵活度更高,可以按需传参,省略的参数自动用NULL填充:

    -- 合法:不传任何参数,都用默认NULL
    EXEC usp_UpdateEmployee;
    -- 合法:只传第一个参数,第二个用默认NULL
    EXEC usp_UpdateEmployee '张三';
    -- 合法:用DEFAULT关键字指定用默认值,只传第二个参数
    EXEC usp_UpdateEmployee DEFAULT, '1990-01-01';
    -- 合法:用命名参数,只传需要更新的出生日期
    EXEC usp_UpdateEmployee @DOB = '1990-01-01';
    

适用场景

  • 第一种写法(仅允许NULL):
    适合那些必须要求调用者明确指定每个参数取值的场景,哪怕是明确传NULL,防止调用者因为遗漏参数导致业务逻辑出错。比如某些严格的财务类操作,必须确认每个参数的状态,不允许默认值存在。
  • 第二种写法(默认值为NULL):
    适合参数可选的业务场景,比如更新员工信息时,可能只需要修改姓名或者只修改出生日期,这种写法能简化调用语句,不用每次都传全所有参数。

内容的提问来源于stack exchange,提问作者blue piranha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 05:40:32