Использование функции в качестве параметра при выполнении хранимой процедуры?
Я тестирую хранимую процедуру и хотел передать функцию 'GETDATE()' вместо параметра:
DECLARE @return_value int
EXEC @return_value = my_stored_procedure
@MyId = 1,
@MyDateField = GETDATE()
SELECT 'Return Value' = @return_value
GO
SQL Server 2005 жалуется со следующей ошибкой:
Неверный синтаксис рядом с ')'.
Кто-нибудь хочет пролить свет на этот вопрос?
Ответы
Ответ 1
для MSDN
Execute a stored procedure or function
[ { EXEC | EXECUTE } ]
{
[ @return_status = ]
{ module_name [ ;number ] | @module_name_var }
[ [ @parameter = ] { value
| @variable [ OUTPUT ]
| [ DEFAULT ]
}
]
[ ,...n ]
[ WITH RECOMPILE ]
}
[;]
Execute a character string
{ EXEC | EXECUTE }
( { @string_variable | [ N ]'tsql_string' } [ + ...n ] )
[ AS { LOGIN | USER } = ' name ' ]
[;]
Execute a pass-through command against a linked server
{ EXEC | EXECUTE }
( { @string_variable | [ N ] 'command_string [ ? ]' } [ + ...n ]
[ { , { value | @variable [ OUTPUT ] } } [ ...n ] ]
)
[ AS { LOGIN | USER } = ' name ' ]
[ AT linked_server_name ]
[;]
Примечание для @parameter вы можете указать значение или переменную или указать значение по умолчанию. Поэтому вам нужно установить значение переменной как GetDate() (как указывали другие) и использовать эту переменную.
НТН
Ответ 2
Вы не можете использовать функцию напрямую в качестве параметра хранимой процедуры.
Вы можете сделать следующее:
DECLARE @now DateTime
SET @now = GETDATE()
DECLARE @return_value int
EXEC @return_value = my_stored_procedure
@MyId = 1,
@MyDateField = @now
SELECT 'Return Value' = @return_value
GO
Ответ 3
Вызов функций как параметров не разрешен (за исключением тех системных функций, которые были префиксными @@
- то есть те, которые раньше назывались глобальными переменными)
Вам нужно назначить переменную.
Microsoft признает, что в этом связанном элементе Connect менее велика: T-SQL: использовать скалярные функции в качестве параметров хранимых процедур
Согласовано! В более общем плане, везде, где TSQL ожидает, скажем, и целочисленного значения, это должен принимать литерал, переменную, или результат функции, чья Тип возврата - целое число. Это просто делает язык более регулярный ( "ортогональный" ) и легче учиться/использования.
Тем не менее, это слишком поздно для этого в выпуске Katmai, но Я добавлю его в наш список TODO.
Ответ 4
Вы можете использовать
DECLARE @test DATE;
SET @test = GETDATE();
а затем
DECLARE @return_value int
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = @test
SELECT 'Return Value' = @return_value
GO
Ответ 5
Попробуйте:
DECLARE @return_value int
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = (SELECT GETDATE())
SELECT 'Return Value' = @return_value
GO
Ответ 6
Зачем вам нужно пройти в GetDate(). Просто используйте его в вызываемой хранимой процедуре.
Вы не можете передать его напрямую. Просто назначьте его переменной и передайте, что
DECLARE @dt as datetime
SET @dt=GETDATE()
EXEC @return_value = my_store procedure
@MyId = 1,
@MyDateField = dt