计算字符串表达式

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_calc]') and xtype in (N'FN', N'IF', N'TF'))
drop function [dbo].[f_calc]
GO

/*--计算表达式的函数

 计算给定算术表达式的值

 此方法由VB版 hhjjhjhj(大头)
 提供的VB处理程序程序上改造而来

--邹建 2004.07(引用请注明此信息)--*/

/*--调用示例

 select dbo.f_calc('123+456')
--*/
create function f_calc(
@str varchar(1000) --要计算的表达式
)returns sql_variant
as
begin
 declare @re sql_variant

 declare @err int,@src varchar(255),@desc varchar(255)
 declare @obj int

 exec @err=sp_oacreate 'MSScriptControl.ScriptControl',@obj out
 if @err<>0 goto lb_err

 exec @err=sp_oasetproperty @obj,'Language','vbscript'
 if @err<>0 goto lb_err

 exec @err=sp_oamethod @obj,'Eval',@re out,@str
 if @err=0 return(@re)
 
 lb_err:
 exec sp_oageterrorinfo NULL, @src out, @desc out
 declare @errb varbinary(4),@s varchar(20)
 set @errb=cast(@err as varbinary(4))
 exec master..xp_varbintohexstr @errb,@s out
 return('错误号: '+@s+char(13)+'错误源: '+@src+char(13)+'错误描述: '+@desc)
end
go

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值