请LZ把函数[f_Da]的代码贴一下?

解决方案 »

  1.   


    ALTER function [dbo].[f_Discount](@aa nvarchar(100),@f nvarchar(10),@i decimal(20,3))
    returns nvarchar(4000)
    as
    begindeclare @aa2 nvarchar(100)declare @y decimal(20,2)
    declare @s nvarchar(4000)
    declare @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=@aaset @s= replace(replace(@aa2,']',@f+rtrim(@i)+')'),'[','(')
    return @s
    end
    --调用测试:select [dbo].[f_Discount]('0.5*[100.000]','+','3')
      

  2.   

    这个就需要用存储过程或者比较复杂的SQL了,请看下面的示例代码:
    declare @f varchar(100) = '100*200'
    declare @sql nvarchar(100) = 'select ' + @f
    EXEC sp_executesql  @sql
      

  3.   

    之所以会报错,是因为你的函数返回的是一个字符串,这个字符串,要加1,肯定是会报错的。其实你的意思应该是,让这个字符串进行运算,然后结果在加1,这里就涉及到公式的解析了,用sql来实现的话,有点麻烦。建议你找找.net方面的公式解析类把。
      

  4.   


    -- 建函数
    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=@aaset @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)
    */
      

  5.   

    测试2,declare @tsql nvarchar(4000),@x nvarchar(4000)select @x=dbo.[f_Discount]('0.5*[100.000]','+','3')select @tsql=N'select '+@x+'+5 ''result'' 'exec(@tsql)/*
    result
    ---------------------------------------
    56.5000(1 row(s) affected)
    */
      

  6.   

    我希望用一条select语句可以完成的