如何从SQL Server中获取Execute命令的值作为输出参数?

时间:2018-04-09 16:24:37

标签: sql-server

我需要从store过程中获取catch块的结果并将其作为输出参数传递。所以我可以在带有字段值的select语句中使用result。现在它正确执行,但select语句返回NULL值。

CREATE procedure [dbo].[sp_calc] @mathexpr NVarchar(20), @returnValue decimal(9,2) out
as
declare @query varchar(800)
BEGIN TRY
    SELECT @returnValue=CAST(@mathexpr as decimal(9,2))
END TRY
BEGIN CATCH
    SET @query='SELECT CAST('+@mathexpr+' as decimal(9,2))'
    EXECUTE(@query)
END CATCH

declare @result decimal(9,2)
exec sp_calc @mathexpr='1.600*2.5478/1.2',@returnValue=@result out
select @result as result

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

您需要使用INSERT..EXECUTE结构来执行动态SQL并将结果存储在动态sql之外的代码可以访问的变量中。

答案 1 :(得分:0)

这是完成我的工作的完整代码。我做了一些小改动,比如使用float而不是decimal,而NVarchar代替Varchar。全局临时表是从存储过程创建的,因此它可以在sp之外使用。希望这会有所帮助。

IF OBJECT_ID('tempdb.dbo.##NSesion') IS NOT NULL
  BEGIN 
    DROP TABLE ##NSesion
  END 

create table ##NSesion (ID int identity,F1 float null)
exec sp_calc @appSesion=##NSesion, @mathexpr='1*2/3'
select F1 as r from ##NSesion
drop table ##NSesion

create procedure [dbo].[sp_calc] @APPSesion NVarchar(10), @mathexpr NVarchar(20) 
as 
declare @query NVarchar(800) 
declare @RV float 
BEGIN TRY 
  SELECT @RV=CAST(@mathexpr as float) 
  if (@RV<>0) or (not @RV is null) 
  SET @query='insert into '+@APPSesion+' (F1) values ('+@RV+') ' 
  EXECUTE(@query) 
END TRY 
BEGIN CATCH 
  SET @query='insert into '+@APPSesion+' (F1) values (CAST('+@mathexpr+' as float)) ' 
  EXECUTE(@query) 
END CATCH