我需要从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
感谢您的帮助。
答案 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