2011-03-08 10 views
6

Quiero tener un parámetro "@myDate" en un procedimiento almacenado que por defecto es 2 años antes de hoy si no se especifica nada más. He intentado hacer algo como esto en mi definición de procedimiento:¿Puedo predeterminar un parámetro de procedimiento almacenado sql a una expresión dinámica?

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

Estoy consiguiendo el error siguiente sintaxis:

Incorrect syntax near '('. 

¿Se servidor SQL le permiten establecer expresiones dinámicas como valores de los parámetros por defecto? Si no, ¿cómo puedo evitar esto (que no sea el torpe IF @myDate is null SET @myDate=...)?

+0

Hay una línea muy fina entre la torpe y perezoso. –

Respuesta

9

No puede usar una expresión como valor por defecto, y no hay realmente manera elegante de hacer esto.

Puede utilizar isnull o coalesce lugar de la instrucción if:

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

gracias! Podría terminar usando esta sugerencia ... – froadie

1

Desde el docs:

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

Cuestiones relacionadas