Почему мы не можем установить значение по умолчанию для параметра 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())