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

    技术2022-05-11  82

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

     CREATE PROCEDURE [dbo].[ProcessPlanForm]--加工进度计划安排表 @SQLQualification varchar(1000),@MaxJDsl int--SQL条件,最大进度数量asdeclare @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 intset @xh=1set @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  endset @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


    最新回复(0)