Использовать хранимую процедуру в значениях оператора Insert - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь использовать хранимую процедуру в операторе вставки, это мой код:

EXEC sp_executesql @statement=N'insert into Celulares_Empleados(CEL_IMEI,Empl_ID,FH_Asignacion,US_Asigno) 
values (@imei, EXEC EMPLEADOS_LEGAJOS @legajo, @date, @usuario)',
@params=N'@imei nvarchar(15), @legajo nvarchar(41), @date datetime, @usuario nvarchar(5)',
@imei=N'353108089985778',
@legajo=N'USUARIO DE PRUEBA - Legajo: 1171',
@date='2020-06-18 22:56:08.367',
@usuario=N'admin'

Но я получаю это сообщение:

Сообщение 156, уровень 15 , Состояние 1, строка 2
Неправильный синтаксис рядом с ключевым словом 'EXE C'.

Сообщение 102, уровень 15, состояние 1, строка 2
Неправильный синтаксис рядом с ')'.

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

Есть ли способ сделать это?

1 Ответ

0 голосов
/ 19 июня 2020

Вы не можете вызывать хранимую процедуру как часть предложения VALUES в INSERT. Что вы можете сделать, это сначала выполнить хранимую процедуру и получить возвращаемое значение в переменной. Используйте эту переменную как часть вызова процедуры sp_execute sql.

DECLARE @p_Empl_ID int
DECLARE @legajo NVARCHAR(41)= N'USUARIO DE PRUEBA - Legajo: 1171'
EXEC @p_Empl_ID = EXEC EMPLEADOS_LEGAJOS @legajo

EXEC sp_executesql @statement=N'insert into Celulares_Empleados(CEL_IMEI,Empl_ID,FH_Asignacion,US_Asigno) 
values (@imei,@Empl_ID , @date, @usuario)',
@params=N'@imei nvarchar(15), @legajo nvarchar(41), @date datetime, @usuario nvarchar(5)',
@imei=N'353108089985778',
@Empl_ID = @p_Empl_ID ,
@date='2020-06-18 22:56:08.367',
@usuario=N'admin'

ПРИМЕЧАНИЕ : Обычно рекомендуется возвращать статус выполнения процедуры в качестве возвращаемого значения. Если вы хотите получить какое-то скалярное значение из выполнения процедуры, предпочтительно использовать выходные параметры и использовать их на последующих этапах.

DECLARE @p_Empl_ID int
DECLARE @legajo NVARCHAR(41)= N'USUARIO DE PRUEBA - Legajo: 1171'
EXEC EMPLEADOS_LEGAJOS @legajo, @p_Empl_ID OUTPUT 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...