2014-06-19 38 views
0

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

,我发现这个问题的解决是使用选项参数,如:

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

,使新的参数将有一个默认值设定,意思就是调用它不包括@ NewParameter不会抛出异常。对我来说,这似乎是一个明显的解决方案,但我注意到没有任何与此项目关联的存储过程具有任何可选参数。过去我也注意到,当我发现一个别人没有使用的新的聪明编程技巧时,通常有一个原因。

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

+0

使用默认值的参数只是一个修复,将来可能会咬你。可能这就是他们没有使用它的原因。 – Habib

回答

0

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

例如

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" 时,它应该是‘EXEC PROC_1 0,1,1’

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

只是需要注意的是,我只用老Coldfusion来体会这一点,但它也可能存在于其他地方。

+0

嗯,我认为,基于这个问题的不活动,没有太多需要担心。尽管谢谢你的回答,但我一定会留意的! – ControlAltDeplete

相关问题