I want to have a "@myDate" parameter in a stored procedure that defaults to 2 years prior to today if nothing else is specified. I tried doing something like this in my procedure definition:
CREATE PROCEDURE myProcedure( @param1 int,
@param2 varchar(20),
@param3 int = null,
@myDate datetime = dateadd(year,-2,getDate()) )
I'm getting the following syntax error:
Incorrect syntax near '('.
Does sql server allow you to set dynamic expressions as default parameter values? If not, how can I get around this (other than the clumsy IF @myDate is null SET @myDate=...
)?
Using dynamic SQL inside stored proceduresThe dynamic SQL statement is constructed based on the input parameters passed to the stored procedure and is executed by the EXEC command. When we execute the stored procedure with input parameter productid only, the SQL statement is constructed as shown in the below image.
A procedure can have a maximum of 2100 parameters; each assigned a name, data type, and direction. Optionally, parameters can be assigned default values.
You can use only a DDL COMMENT statement as dynamic SQL in a stored procedure. You cannot specify a DML COMMENT statement to fetch the comments for database objects, columns of a table, and parameters. A CREATE DATABASE or CREATE USER statement used as dynamic SQL in a stored procedure must contain the FROM clause.
You can specify a default value for the parameters. Stored procedures can return a value to the calling program if the parameter is specified as OUTPUT. The parameter values must be a constant or a variable. It cannot be a function name.
You can't use an expression as default value, and there is no really elegant way of doing this.
You can use isnull
or coalesce
instead of the if
statement:
set @myDate = isnull(@myDate, dateadd(year, -2, getdate()))
No.
From the docs:
The default value must be a constant or it can be NULL
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With