计算表达式列的值
pbsh 2010-09-28 03:18:57 这个函数好像是邹老大写的?实际使用中发现如果是对一张表中的某列进行计算后Update,会出现每次只能修改256行,且在一次批处理中,无法连续生效。
例如:1000行数据需要修改,直接使用Update tablename set col1= f_calc(col1)的方式修改col1列的值,会发现只修改了前256行,即使你写一个循环,仍然只有第一次修改生效,但是语句不会报错。
感觉像是sp_oamethod的问题?
------------------------------------------------------------------------------------------------------------
--计算表达式的值
create table Tb_UinonConfig(prim1 real,arithmetic varchar(50))
insert into Tb_UinonConfig select 100,'+20.5×15÷13.1'
insert into Tb_UinonConfig select 80 ,'÷2.5×100+23.0'
insert into Tb_UinonConfig select -80,'+100+(23.0×6)'
go
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
select prim1,arithmetic,
dbo.f_calc(cast(prim1 as varchar)+replace(replace(arithmetic,'×','*'),'÷','/')) as col from Tb_UinonConfig
drop function f_calc
drop table Tb_UinonConfig