日期:2014-05-17  浏览次数:20661 次

怎样在select语句里执行一个公式呢
写了一个函数,函数返回的结果是一个公式,如下:
select [dbo].[f_Da]('0.5*[100.000]','+','3')
执行后得出结果为:
0.5*(100.000+3.000)

但是执行select后我想得到的结果为公式计算后的值,应该为:51.5

当我这样去执行报错:
select [dbo].[f_Da]('0.5*[100.000]','+','3')+5
消息 245,级别 16,状态 1,第 1 行
在将 nvarchar 值 '0.5*(100.000+3.000)' 转换成数据类型 int 时失败。


------解决方案--------------------

-- 建函数
create function [dbo].[f_Discount]
(@aa nvarchar(100),@f nvarchar(10),@i decimal(20,3))
returns nvarchar(4000)
as
begin
declare @aa2 nvarchar(100),@y decimal(20,2),@s nvarchar(4000),@tsql nvarchar(4000)

if charindex('+',@aa)>0
  set @aa2=SUBSTRING(@aa,1,charindex('+',@aa)-1)+@f+rtrim(@i)+'+' + right(@aa,len(@aa)-charindex('+',@aa))
else
  set @aa2=@aa

set @s=replace(replace(@aa2,']',@f+rtrim(@i)+')'),'[','(')
return @s
end


-- 测试
declare @tsql nvarchar(4000),@x nvarchar(4000)

select @x=dbo.[f_Discount]('0.5*[100.000]','+','3')

select @tsql=N'select '+@x+' ''result'' '

exec(@tsql)

/*
result
---------------------------------------
51.5000

(1 row(s) affected)
*/