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

Я хочу знать, почему я не могу установить значение по умолчанию для параметра 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() ...

Ответы [ 5 ]

17 голосов
/ 14 октября 2011

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

    ...
    @CreateDate datetime = null
)
AS
    if @CreateDate is null
        set @CreateDate = getdate()
...
3 голосов
/ 19 июня 2010

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

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

1 голос
/ 22 декабря 2015

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

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

IF  @CompareDate = '1900-01-01' SET @CompareDate = CONVERT(DATE, GETDATE())
1 голос
/ 19 июня 2010

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

0 голосов
/ 04 июня 2019
  ....     
  @CreateDate datetime = null
)

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

COALESCE(@CreateDate, getdate())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...