日期:2014-05-18  浏览次数:20558 次

数据库中的函数如何计算公式
在数据库中存在这样一张表T,字段1 varchar(200)
存放着计算表达式:例如 =*2+5  
  =*4+6
如何我想通过函数的方式出入一个数值把等号替换后计算出数值,该如何实现呢。谢谢。
例如:我传入5 计算出来的结果为15 26


------解决方案--------------------
参考:

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
------解决方案--------------------
用存储过程吧