计算表达式列的值

pbsh pbsh 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
这个函数好像是邹老大写的?实际使用中发现如果是对一张表中的某列进行计算后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
...全文
评论 11
收藏 已收藏
分享
返回顶部
pbsh
疑难问题 22,298 成员 121,727 内容