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
*/
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
*/
要實現動態函數可調用(sp_OA開頭的參數聯機有說明)OLE 物件的方法;在論壇上有例子
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