如何为多程序调用的存储过程安全新增参数?
存储过程新增参数的正确位置建议
你的做法是可行的,而且是更安全的选择,原因如下:
- 你给
@NewParm设置了默认值= null,这是关键——现有调用这个存储过程的程序如果不传这个参数,SQL Server会自动使用默认值,不会触发参数缺失的错误,完全不影响原有逻辑。 - 把新增的可选参数放在必填参数之后、OUTPUT参数之前是合理的:
- 现有调用如果是按位置传递参数(比如
EXEC spMyStoredProc 'a', 'b', 'c', 'd', @outParam OUTPUT),原来的参数位置完全对应,新参数会自动用默认值填充,不会打乱原有参数的映射关系。 - 如果把
@NewParm放在@OutputParm之后,现有按位置传参的调用就会出问题:原来传给@OutputParm的参数会被错误解析成@NewParm的值,而@OutputParm会因为没有接收到参数报错,直接破坏现有程序的调用。
- 现有调用如果是按位置传递参数(比如
额外提醒两点:
- 新增参数必须设置默认值,绝对不能设为必填(不写默认值),否则所有没传这个参数的现有调用都会报错。
- 建议后续所有调用存储过程的代码都使用按名称传参(比如
EXEC spMyStoredProc @Parm1='a', @Parm2='b', @OutputParm=@outParam OUTPUT),这种方式更健壮,以后再新增参数也不会因为位置问题出故障。
内容的提问来源于stack exchange,提问作者TheMortiestMorty
相关产品推荐
相关产品推荐

