计算表达式列的值
这个函数好像是邹老大写的?实际使用中发现如果是对一张表中的某列进行计算后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
例如: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
...全文
相关推荐
pandas DataFrame 根据多列的值做判断,生成新的列值实例
今天小编就为大家分享一篇pandas DataFrame 根据多列的值做判断,生成新的列值实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
mysql5.7 生成列 generated column用法实例分析
主要介绍了mysql5.7 生成列 generated column用法,结合实例形式分析了mysql5.7 生成列 generated column基本原理、用法及操作注意事项,需要的朋友可以参考下
计算列代码 ( C # )
自己 写反而 其貌不扬 群居的腈 的,
VB在DataGrid列中加入计算功能
VB在列中加入计算,计算利润和销售金额,在VB的数据显示控件DataGrid的列中加入计算的功能,大大提升了软件的体验,丰富了功能...
GBase8s虚拟列详解(1).docx
GBase8s虚拟列详解(1).docx


疑难问题
