MSSQL中执行计算式获得计算值 最近一个同事问我这事,想起2009年写的一个处理函数, 写这个函数的时候也参考了网络上的信息,在此做个备考 [sql] /****** オブジェクト: UserDefinedFunction [dbo].[F_ComputeUnitProductAmount] スクリプト日付: 09/13/2012 14:26:43 ******/ SET ANSI_NULLS ON GO www.2cto.com SET QUOTED_IDENTIFIER OFF GO /*関数概要------------------------------------------------------- 関数説明 :計算公式によって、結果をもらいます 作成者 :王憲寿(ネットワークに参考します) 作成日付 :2009/06/04 例えば :SELECT dbo.F_ComputeUnitProductAmount('5+(4*3)^2+10/2') ----------------------------------------------------------------*/ /*--------------------------------------------------------------- 修正日付 :2009/07/02 修正者 :王憲寿 修正内容 :OLEDB対象を釈放する ----------------------------------------------------------------*/ CREATE FUNCTION [dbo].[F_ComputeUnitProductAmount] ( www.2cto.com @str varchar(1000)--計算用公式 ) RETURNS sql_variant -----もしSUM(),AVG()など計算の時、INTに転換する ----------------------------------------------------------------- AS ----------------------------------------------------------------- begin declare @re sql_variant declare @err int, @src varchar(255) ,@desc varchar(255) ,@hr int 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 www.2cto.com exec @err=sp_oamethod @obj,'Eval',@re out,@str exec @err=sp_oadestroy @obj---2009/07/02追加---なければ、256行だけを実行する if @err=0 return(@re) lb_err: return(0) end |