2014-06-19 70 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

相關問題