有没有理由不在存储过程中使用可选参数?

时间:2014-06-19 17:11:40

标签: c# sql-server stored-procedures

作为我新工作的一部分,我正在为使用C#编码的现有项目添加新功能。我的部分工作涉及更新位于SQL-Server上的存储过程。这个过程过去非常麻烦,因为向存储过程添加参数通常会导致站点的另一部分中断,因为对存储过程的参数列表的更改意味着必须更新对存储过程的调用 - 宽。

我发现的解决方案是使用选项参数,例如:

CREATE PROCEDURE doSomething  
 (  @Parameter1 NVARCHAR(50),
    @NewParameter INT = 1
 )

这样新参数就会设置一个默认值,这意味着调用它不包含@NewParameter就不会抛出异常。对我来说,这似乎是一个明显的解决方案,但我注意到与此项目相关的存储过程都没有任何可选参数。我过去也注意到,当我找到一个其他人没有使用的新的聪明的编程技巧时,通常有一个原因。

那么,是否有任何技术原因不在存储过程中使用可选参数?它会以某种方式损害性能吗?当可选参数可能导致未定义的行为时,它们是兼容性问题还是实例?我应该注意哪些危险或警告?

1 个答案:

答案 0 :(得分:0)

在.net中的存储过程中使用可选参数时,我没有遇到任何问题。然而,在过去的代码库中,我在较旧版本的ColdFusion中工作 - 有一个名为dbprocparam name或类似的字段,它与您输入的名称无关,参数将按顺序传递。

e.g。

exec proc_1
 @1 bit ,
 @2 bit ,
 @3 bit

如果我将SP称为(但想象CF语法)     exec proc_1      @ 2 = 1      @ 3 = 1      @ 1 = 0

proc实际上会将分析器命中为" exec proc_1 1,1,0和#34;什么时候它应该是" exec proc_1 0,1,1"

将可选参数添加到参数列表底部的存储过程 NOT 时,这成为一个问题。这是修改多个使用SP上的参数列表的潜在问题之一。

需要注意的是,我只是在旧的冷敷中经历过这种情况,但也可能存在于其他地方。