2011-03-08 36 views
6

Tôi muốn có tham số "@myDate" trong quy trình được lưu trữ mặc định là 2 năm trước ngày hôm nay nếu không có gì khác được chỉ định. Tôi đã cố gắng làm một cái gì đó như thế này trong định nghĩa thủ tục của tôi:Tôi có thể mặc định tham số thủ tục lưu trữ sql thành một biểu thức động không?

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

Tôi nhận được lỗi cú pháp sau:

Incorrect syntax near '('. 

Liệu SQL Server cho phép bạn thiết lập biểu thức năng động như các giá trị tham số mặc định? Nếu không, làm thế nào tôi có thể nhận được xung quanh này (khác với vụng về IF @myDate is null SET @myDate=...)?

+0

Có một ranh giới mong manh giữa vụng về và lười biếng. –

Trả lời

9

Bạn không thể sử dụng một biểu thức là giá trị mặc định, và không có thực sự cách thanh lịch để làm điều này.

Bạn có thể sử dụng isnull hoặc coalesce thay vì báo cáo kết quả if:

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

cảm ơn! Tôi có thể sẽ sử dụng đề xuất này ... – froadie

1

số

Từ docs:

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

Các vấn đề liên quan