Неправильний синтаксис біля ")" викликає збережену процедуру за допомогою GETDATE


120

Можливо, у мене є момент "полудня", але хтось може пояснити, чому я отримую

Msg 102, рівень 15, стан 1, рядок 2
Неправильний синтаксис біля ')'.

При бігу

CREATE PROC DisplayDate 
    (@DateVar DATETIME) 
AS 
BEGIN
    SELECT @DateVar
END
GO

EXEC DisplayDate GETDATE();

Відповіді:


169

Ви не можете передавати виклик функції як аргумент збереженій процедурі. Замість цього використовуйте проміжну змінну:

DECLARE @tmp DATETIME
SET @tmp = GETDATE()

EXEC DisplayDate @tmp;

22
Чи є причина цього обмеження?
Замер

@student Чи є причина таких основних обмежень, як відсутність булевих і цілих типів стовпців або відсутність відфільтрованих ключів в Oracle ...?
Шкіпер

20

Як згадував Мітч Пшеничний, ви не можете передати функцію.

Якщо у вашому випадку вам слід вказати попередньо обчислене значення або GETDATE () - ви можете використовувати значення за замовчуванням. Наприклад, змініть збережену процедуру:

ALTER PROC DisplayDate 
(
    @DateVar DATETIME = NULL
) AS 
BEGIN
    set @DateVar=ISNULL(@DateVar,GETDATE())

    --the SP stuff here
    SELECT @DateVar
END
GO

А потім спробуйте:

EXEC DisplayDate '2013-02-01 00:00:00.000'
EXEC DisplayDate

Зауваження : Тут я припустив, що значення NULL не використовується для цього параметра. Якщо це не так - ви можете використовувати інше невикористане значення, наприклад "1900-01-01 00: 00: 00.000"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.