2011-03-08 73 views
6

我希望在存儲過程中有一個「@myDate」參數,如果沒有指定其他參數,則默認爲今天的2年。我試圖做這樣的事情在我的過程定義:我可以默認SQL存儲過程參數爲動態表達式嗎?

CREATE PROCEDURE myProcedure( @param1 int, 
           @param2 varchar(20), 
           @param3 int = null, 
           @myDate datetime = dateadd(year,-2,getDate())) 

我得到以下語法錯誤:

Incorrect syntax near '('. 

是否SQL服務器允許您設置動態表達式爲默認參數值?如果沒有,我該如何解決這個問題(笨拙的IF @myDate is null SET @myDate=...除外)?

+0

有笨拙和懶惰之間的細線。 –

回答

9

不能使用表達式作爲默認值,並沒有真正這樣做的優雅的方式。

您可以使用isnull或​​3210代替if聲明:

set @myDate = isnull(@myDate, dateadd(year, -2, getdate())) 
+0

謝謝!我可能最終會使用這個建議... – froadie

1

docs

The default value must be a constant or it can be NULL

相關問題