您的位置:首页 > 其它

利用存储过程动态创建字段

2007-02-11 09:18 351 查看
--生产中我们至少有一个订单表,一个生产进度表,如何将订单表与生产进度表合成一张表呢,以下是一个例子,这种方法可以在存储过程中实现,亦可放在客户端实现

CREATE PROCEDURE [dbo].[ProcessPlanForm]--加工进度计划安排表
@SQLQualification varchar(1000),@MaxJDsl int--SQL条件,最大进度数量
as
declare @mySQL varchar(8000)--SQL条件
declare @Inpcolums varchar(1000)--被插入字段列表
set @InpColums=''
declare @Outcolums1 varchar(2000)--插入值1--序号
set @OutColums1=''
declare @Outcolums2 varchar(2000)--插入值2--计划开始
set @OutColums2=''
declare @Outcolums3 varchar(2000)--插入值3--计划日期
set @OutColums3=''
declare @Outcolums4 varchar(2000)--插入值4--接件日期
set @OutColums4=''
declare @Outcolums5 varchar(2000)--插入值5---完成日期
set @OutColums5=''
declare @OutConst varchar(200)--输出列表常量
declare @Fildlist varchar(1000)--字段列表
set @Fildlist=''
set @OutConst='序号,客户,订单编号,品名,材质,成品尺寸,数量,预交期,'
declare @xh int
set @xh=1
set @mysql='
--创建临时表
declare @mytemp table (MYID decimal(18,0) IDENTITY (1,1) NOT NULL,序号 varchar(11) NULL,客户 varchar(5) NULL,订单编号 varchar(30) NULL,品名 varchar(30) NULL , 材质 varchar(15) NULL,成品尺寸 varchar(18) NULL,数量 int NULL,预交期 datetime NULL ,工序 varchar(20) NULL'
while @xh<=@MaxJDsl
begin
--修改表结构
if @FildList=''
set @FildList=',工序'+convert(varchar(2),@xh) +' varchar(20) NULL'
else
set @FildList=@FildList+',工序'+convert(varchar(2),@xh) +' varchar(20) NULL'
--set @mysql=@mysql+'alter table #mytemp add 工序'+convert(varchar(2),@xh)+' varchar(20) null'+char(13)--记录新增字段名列表
--第一次插入值--工序
if @OutColums1=''
set @OutColums1='dbo.findscjdRecNo1(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
else
set @OutColums1=@OutColums1+',dbo.findscjdRecNo1(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
--第二次插入值列表--计划开始
if @OutColums2=''
set @OutColums2='dbo.findscjdRecNo2(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
else
set @OutColums2=@OutColums2+',dbo.findscjdRecNo2(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
--第三次插入值列表--计划完成
if @OutColums3=''
set @OutColums3='dbo.findscjdRecNo3(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
else
set @OutColums3=@OutColums3+',dbo.findscjdRecNo3(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
--第四次插入值列表--接件日期
if @OutColums4=''
set @OutColums4='dbo.findscjdRecNo4(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
else
set @OutColums4=@OutColums4+',dbo.findscjdRecNo4(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
--第五次插入值列表--完成日期
if @OutColums5=''
set @OutColums5='dbo.findscjdRecNo5(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
else
set @OutColums5=@OutColums5+',dbo.findscjdRecNo5(序号,'+convert(varchar(2),@xh)+') 工序'+convert(varchar(2),@xh)
--被插入字段列表
if @InpColums=''
set @InpColums='工序'+convert(varchar(2),@xh)
else
set @InpColums=@InpColums+',工序'+convert(varchar(2),@xh)
set @xh=@xh+1
end
set @mysql=@mysql+@FildList+')'
set @OutColums1='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select '+@OutConst+'''工序'' 工序 ,'+@OutColums1+' from ywdd where '+@SQLQualification--第一条插入语句
set @OutColums2='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''计划开始'' 工序 ,'+@OutColums2+' from ywdd where '+@SQLQualification--第二条插入语句
set @OutColums3='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''计划完成'' 工序 ,'+@OutColums3+' from ywdd where '+@SQLQualification--第三条插入语句
set @OutColums4='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''接件日期'' 工序 ,'+@OutColums4+' from ywdd where '+@SQLQualification--第四条插入语句
set @OutColums5='insert into @mytemp ('+@OutConst+'工序,'+@InpColums+') select 序号,NULL 客户,NULL 订单编号,NULL 品名,NULL 材质,NULL 成品尺寸,NULL 数量,NULL 预交期,''完成日期'' 工序 ,'+@OutColums5+' from ywdd where '+@SQLQualification--第五条插入语句
set @mysql=@mySQL+char(13)+@OutColums1+char(13)+@OutColums2+char(13)+@OutColums3+char(13)+@OutColums4+char(13)+@OutColums5+char(13)
set @mysql=@mysql+'select '+@OutConst+'工序,'+@InpColums+' from @mytemp order by 序号,myid'
exec (@mySQL)
GO
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: