Функция SQL в качестве значения параметра по умолчанию? - PullRequest
96 голосов
/ 22 января 2009

Я попытался изменить значение параметра по умолчанию с помощью этого:

ALTER PROCEDURE [dbo].[my_sp]
@currentDate datetime = GETDATE()

и весь прекомпилятор SQL дал мне эту ошибку:

Сообщение 102, Уровень 15, Состояние 1, Процедура my_sp, Строка 8 Неверный синтаксис рядом с '('.

Я уже создал процедуру. (Я не уверен, что это актуально.) Я использовал нулевое значение по умолчанию и проверял это позже, но это не кажется правильным. Могу ли я сделать это в одну строку?


Обновление: я уходил от MSDN-описания параметров хранимой процедуры :

[= default] Значение по умолчанию для параметра. Если задано значение по умолчанию, функция может быть выполнена без указания значения для этого параметра.

Примечание:
Значения параметров по умолчанию могут быть указаны для функций CLR, за исключением типов данных varchar (max) и varbinary (max).

Когда параметр функции имеет значение по умолчанию, при вызове функции должно быть указано ключевое слово DEFAULT, чтобы получить значение по умолчанию. Это поведение отличается от использования параметров со значениями по умолчанию в хранимых процедурах, в которых пропуск параметра также подразумевает значение по умолчанию.

Я читаю это неправильно?

Большое спасибо.

Ответы [ 6 ]

145 голосов
/ 22 января 2009

Значение по умолчанию для параметра хранимых процедур должно быть констант . Вам нужно сделать следующее ...

ALTER Procedure [dbo].[my_sp]
@currentDate datetime = null
AS
IF @currentDate is null
SET @currentDate = getdate()
32 голосов
/ 22 января 2009

Я не думаю, что это возможно, вы должны использовать буквальное (постоянное) значение в качестве значения по умолчанию.

Однако вы можете сделать это:

Set @currentDate = Coalesce(@currentDate , GetDate())
12 голосов
/ 20 августа 2009

Вы можете попробовать следующим образом:

Set @CurrentDate=IsNull(@CurrentDate,GetDate())
7 голосов
/ 22 января 2009

Я предполагаю, что вы используете Microsoft SQL Server из квадратных скобок в вашем примере.

С MSDN :

Только постоянное значение, такое как строка символов; скалярная функция (либо системный, определенный пользователем, либо CLR функция); или NULL может использоваться как по умолчанию.

Функция GETDATE() время от времени возвращает другое значение, поэтому оно не является константным выражением.

2 голосов
/ 22 января 2009

Это значение не является детерминированным и не может быть использовано

0 голосов
/ 22 января 2009

Предложение:

Установите значение по умолчанию NULL

Выполните настройку по умолчанию GETDATE() в передней части.

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