关于算数运算表达式问题!
表:
A: varchar(50)
A
------------------
1/2
(1+3)*4
怎样得到
A B
--------------
1/2 0.5
(1+3)*4 16
B也就是A算数运算表达式的结果.
问题点数:20、回复次数:5Top
1 楼yuzhiyong(yuzhiyong)回复于 2006-03-17 16:50:07 得分 0
顶一下Top
2 楼huailairen(流浪猫--很想养只猫,带着它到处流浪。)回复于 2006-03-17 22:29:36 得分 5
create table A(lie varchar(50))
insert into A values('1+4')
insert into A values('5*5+1')
create proc compute_all
as
begin
declare @tb table( a varchar(50), b int)
declare @m float
declare @v varchar(50)
declare @sql Nvarchar(60)
declare cr cursor
for select lie from A
open cr
fetch next from cr into @v
while @@fetch_status=0
begin set @sql='select @m=('+@v+')'
exec sp_executesql @sql,N'@m float output',@m output
insert into @tb values(@v,@m)
--print cast(@m as varchar(50))
--print @v
fetch next from cr into @v
end
close cr
deallocate cr
select * from @tb
end
exec compute_all
(所影响的行数为 1 行)
a b
-------------------------------------------------- -----------
1+4 5
5*5+1 26
Top
3 楼huailairen(流浪猫--很想养只猫,带着它到处流浪。)回复于 2006-03-17 22:29:51 得分 0
这样应该可以了。Top
4 楼ReViSion(和尚)回复于 2006-03-17 23:01:37 得分 15
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
goTop
5 楼ReViSion(和尚)回复于 2006-03-17 23:11:39 得分 0
最好以sa登录,要不然有可能出现权限问题Top




