利用存储过程动态创建字段
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
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
相关文章推荐
- 利用存储过程动态创建表及基于该表的触发器
- 利用存储过程动态创建表格
- 动态创建SQL Server数据库、表、存储过程等架构信息
- 两个存储过程:一、使用存储过程动态创建数据表。二、插入新记录。
- sql的存储过程实例--循环动态创建表
- c#动态创建存储过程中,提示'go' 附近有语法错误解决方案
- sql server 脚本创建备份数据库的存储过程及利用前述存储过程自动备份数据库的作业
- 利用动态代理实现通用存储过程的调用
- 关于用存储过程动态创建视图的一点心得。
- Sql 存储过程 即返回结果集又返回值 以及动态创建视图
- SQL Server创建存储过程——动态SQL
- 在存储过程中动态创建表
- 存储过程中动态的创建表 报ORA-01031: insufficient privileges权限不足
- 在存储过程中动态的创建连接服务器
- SQL2005创建带有通配符的存储过程(INT字段类型必须在参数中声明为字符串型)
- 动态创建SQL Server数据库、表、存储过程
- c#动态创建存储过程中,提示'go' 附近有语法错误解决方案
- 关于用存储过程中动态创建视图的一点心得。
- 根据日期动态创建数据库的存储过程
- 关于mysql存储过程创建动态表名及参数处理