if object_id('[tb]') is not null drop table [tb]
go
create table [tb]([品种] varchar(1),[原料价格] int,[公式] varchar(10))
insert [tb]
select 'a',5,'原料价格*2' union all
select 'b',5,'原料价格*5' union all
select 'c',5,'原料价格' union all
select 'd',5,'原料价格/2'select * from [tb]declare @sql nvarchar(max)
select @sql=isnull(@sql+' union all select ''','select ''')+[品种]+''','+rtrim([原料价格])+','''+[公式]+''',[原料成本]='+replace([公式],'原料价格',rtrim([原料价格]))
from tb
--print @sql
exec(@sql)
--测试结果:
/*
------------------------
a 5 原料价格*2 10
b 5 原料价格*5 25
c 5 原料价格 5
d 5 原料价格/2 2
*/

解决方案 »

  1.   

    如果只有*/兩种字符可用函數判斷。。
    要實現動態函數可調用(sp_OA開頭的參數聯機有說明)OLE 物件的方法;在論壇上有例子
      

  2.   

    舉個例子,以下沒有處理錯誤信息
    use tempdb
    go
    create function F_num(
    @S varchar(1000)
    )returns int
    as
    begin
    declare @i int,@obj int
    exec sp_oacreate 'MSScriptControl.ScriptControl',@obj outexec sp_oasetproperty @obj,'Language','vbscript'exec sp_oamethod @obj,'Eval',@i out,@Sreturn(@i)end
    goselect dbo.F_num('5*2*3')
    /*
    -----------
    30(1 個資料列受到影響)
    */
    drop function F_num
      

  3.   

    第一次在csdn发帖,感谢以上朋友这么快就给了答案。谢谢!