SQL как значение параметра по умолчанию?

Я попытался изменить значение параметра по умолчанию следующим образом:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

и весь предварительный компилятор SQL дал мне эту ошибку:

Msg 102, Уровень 15, Состояние 1, Процедура my_sp, Строка 8 Неверный синтаксис около '('.

Я уже создал эту процедуру. (Я не уверен, что это актуально.) Я использовал нулевое значение по умолчанию и проверял это позже, но это не кажется правильным. Могу ли я сделать это в одной строке?


Обновление: я ушел из Описание параметров хранимой процедуры MSDN:

[= default] Значение по умолчанию для параметра. Если задано значение по умолчанию, функция может быть выполнена без указания значения для этого параметра.

Примечание:
  Значения параметров по умолчанию могут быть указаны для функций CLR, за исключением типов данных varchar (max) и varbinary (max).

Если параметр функции имеет значение по умолчанию, ключевое слово DEFAULT должно быть указано, когда функция вызывается для получения значения по умолчанию. Это поведение отличается от использования параметров со значениями по умолчанию в хранимых процедурах, в которых опускание параметра также подразумевает значение по умолчанию.

Я читаю это неправильно?

Большое спасибо.

Ответ 1

Значение по умолчанию для параметра хранимых процедур должно быть константами. Вам нужно будет сделать следующее...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()

Ответ 2

Я не думаю, что это возможно, вы должны использовать значение буквального (постоянного) в качестве значения по умолчанию.

Однако вы можете сделать это:

Set @currentDate = Coalesce(@currentDate , GetDate())

Ответ 3

Вы можете попробовать следующее:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())

Ответ 4

Я предполагаю, что вы используете Microsoft SQL Server из квадратных скобок в вашем примере.

От MSDN:

Только постоянное значение, такое как символьная строка; скалярная функция (либо система, определяемая пользователем, либо CLR функция); или NULL могут использоваться как по умолчанию.

Функция GETDATE() время от времени возвращает другое значение, поэтому оно не является постоянным выражением.

Ответ 5

Это значение не является детерминированным и не может использоваться

Ответ 6

Предложение:

Установите значение по умолчанию NULL

Сделайте по умолчанию GETDATE() в интерфейсе.