2010-06-19 3 views
9

Я хочу знать, почему я не могу установить значение по умолчанию для SP DATETIME параметр для GetDate(), как показано ниже:Почему мы не можем установить значение по умолчанию для параметра 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 '('. 

EDIT: Я знаю, что я могу сделать это, как показано ниже

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

ответ

3

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

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

+0

Почему я не могу использовать его .. это будет непросто для SQL-движка? –

+0

Есть ли какое-либо объяснение, почему оно не может принять это ... или это как правило SQL SERVER, которое не может вызывать функцию в качестве параметра по умолчанию –

+0

, оно должно быть постоянным значением. –

1

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

17

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

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

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

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

IF @CompareDate = '1900-01-01' SET @CompareDate = CONVERT(DATE, GETDATE()) 
Смежные вопросы