Почему мы не можем установить значение по умолчанию для параметра datetime в хранимой процедуре = getDate()?

Я хочу знать, почему я не могу установить значение по умолчанию для параметра SP datetime для getdate(), как показано ниже:

Create PROCEDURE [dbo].[UPILog]
(
    @UserID bigint,
    @ActionID smallint,
    @Details nvarchar(MAX) = null,
    @Created datetime = getdate()
)

если я попытаюсь сохранить его, вы получите ошибку компилятора

    Msg 102, Level 15, State 1, Procedure UPILog, Line XX
    Incorrect syntax near '('.

РЕДАКТИРОВАТЬ: Я знаю, что могу сделать это, как ниже

Create PROCEDURE [dbo].[UPILog]
(
    @UserID bigint,
    @ActionID smallint,
    @Details nvarchar(MAX) = null,
    @Created datetime = null
)
AS
if @Created is null
    SET @Created=getdate() ...

Ответ 1

Если вы хотите использовать @Created в качестве значения по умолчанию, тогда установите значение null в качестве значения параметра по умолчанию и установите параметр @Created с помощью getdate(), если он входит в значение null в вашем sp.

    ...
    @CreateDate datetime = null
)
AS
    if @CreateDate is null
        set @CreateDate = getdate()
...

ОБНОВЛЕНИЕ: Есть также объяснение документации: fooobar.com/questions/16775727/...

Ответ 2

Вы не можете использовать вызов функции как значение параметра по умолчанию.

Легко работать: установите параметр вызова getdate(), если он не установлен.

Ответ 3

в простейших терминах это должно быть некоторое постоянное значение, а GetDate() - вызов функции.

Ответ 4

Вы не можете использовать функцию в качестве значения параметра. Что я делаю, так это то, что я установил параметр в некоторую дату вне поля, например "1900-01-01", а затем проверю его в proc. например:

CREATE PROC uspDataCompare  
    @CompareDate    DATE = '1900-01-01'
AS

IF  @CompareDate = '1900-01-01' SET @CompareDate = CONVERT(DATE, GETDATE())

Ответ 5

  ....     
  @CreateDate datetime = null
)

А затем используйте COALESCE(), как показано ниже -

COALESCE(@CreateDate, getdate())