Ответ 1
Он должен быть константой - значение должно быть вычислимым в момент создания процедуры и что одно вычисление должно предоставлять значение, которое всегда будет использоваться.
Посмотрите на определение sys.all_parameters
:
default_value
sql_variant
Еслиhas_default_value
равно 1, значение этого столбца является значением по умолчанию для параметра; в противном случаеNULL
.
То есть, независимо от значения по умолчанию для параметра, он должен соответствовать этому столбцу.
Как заметил Алекс К в комментариях, вы можете просто сделать:
CREATE PROCEDURE [dbo].[problemParam]
@StartDate INT = NULL,
@EndDate INT = NULL
AS
BEGIN
SET @StartDate = COALESCE(@StartDate,CONVERT(INT,(CONVERT(CHAR(8),GETDATE()-130,112))))
при условии, что NULL
не является допустимым значением для @StartDate
.
Что касается сообщения в блоге, на которое вы ссылаетесь в комментариях - говоря о очень конкретном контексте, то результат оценки GETDATE()
в контексте одного запроса часто считается постоянным. Я не знаю многих людей (в отличие от автора блога), которые рассматривали бы отдельное выражение внутри UDF как часть того же запроса, что и запрос, вызывающий UDF.