【问题标题】:Use stored procedure in values of an Insert statement在 Insert 语句的值中使用存储过程
【发布时间】:2020-06-18 23:30:50
【问题描述】:

我正在尝试在插入语句中使用存储过程,这是我的代码:

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 行
关键字“EXEC”附近的语法不正确。

消息 102,第 15 级,状态 1,第 2 行
')' 附近的语法不正确。

我还尝试将 Exec 语句放在 ( ) 之间,但我得到了同样的错误。

有没有办法做到这一点?

【问题讨论】:

  • 您不能将存储过程作为值语句的一部分执行。
  • 这是你能做的最好的事情tutorialgateway.org/…

标签: sql node.js sql-server reactjs


【解决方案1】:

您不能在 INSERT 中调用存储过程作为 VALUES 子句的一部分。您可以做的是,首先执行存储过程并在变量中获取返回值。将该变量用作 sp_executesql 过程调用的一部分。

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 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2016-12-17
    • 1970-01-01
    相关资源
    最近更新 更多