`
jgsj
  • 浏览: 965720 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多

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

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

分享到:
评论

相关推荐

    存储过程的安全及性能优化

    利用OLE自动化存储过程调用dll 1.创建类库程序集 namespace PB_ExtendProcedure { public class ExtendProcedure { public string SayHi() { return "hello world"; } } } 2.生成动态链接库并注册到系统中...

    Visual C++程序开发范例宝典 - 第8章

    实例272 动态创建视图 实例273 通过视图更改数据 实例274 删除视图 8.6 存储过程 实例275 创建存储过程 实例276 删除存储过程 实例277 在程序中使用存储过程 实例278 调用具有输出参数的存储过程 实例279 编写扩展...

    Visual C# 2008程序设计经典案例设计与实现

    案例4 动态创建和删除文件夹及显示其是否存在 案例5 动态获取文件夹中的文件 案例6 动态搜索文件或文件夹 案例7 动态显示磁盘容量图表 案例8 动态移动文件 案例9 动态复制文件 案例10 动态调用可执行EXE文件 ...

    C# 源码 C#2008经典案例

    案例4 动态创建和删除文件夹及显示其是否存在 案例5 动态获取文件夹中的文件 案例6 动态搜索文件或文件夹 案例7 动态显示磁盘容量图表 案例8 动态移动文件 案例9 动态复制文件 案例1O 动态调用可执行EXE文件 案例11 ...

    C#设计经典案例设计与实现

    案例4 动态创建和删除文件夹及显示其是否存在 案例5 动态获取文件夹中的文件 案例6 动态搜索文件或文件夹 案例7 动态显示磁盘容量图表 案例8 动态移动文件 案例9 动态复制文件 案例1O 动态调用可执行EXE文件 案例11 ...

    Visual+C#+2008程序设计经典案例设计与实现.rar

    案例4 动态创建和删除文件夹及显示其是否存在 案例5 动态获取文件夹中的文件 案例6 动态搜索文件或文件夹 案例7 动态显示磁盘容量图表 案例8 动态移动文件 案例9 动态复制文件 案例1O 动态调用可执行EXE文件 案例11 ...

    Visual C#.NET 2008程序设计案例集锦 (源码)

    案例4.8 利用存储过程修改数据库中的数据 案例4.9 分页显示数据库表中的数据 案例4.10 动态查询数据库表中的数据 案例4.11 SQL Server服务的开启和断开 本章小结 第5章 水晶报表和打印处理技术 案例5.1 水晶...

    Visual C++程序开发范例宝典(PDF扫描版).part3

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

    Visual C++程序开发范例宝典(PDF扫描版).part2

     cc实例214 动态创建视图   cc实例215 通过视图更改数据   cc实例216 删除视图   8.6 触发器   cc实例217 创建触发器   cc实例218 在程序中使用触发器   8.7 存储过程   cc实例219 创建存储...

    Visual C++ 程序开发范例宝典 源码 光盘 part2

    8.3 更新数据 cc实例210 批量修改数据 cc实例211 将指定字段数据为空的记录添上数据 8.4 删除数据 cc实例212 删除单条数据 cc实例213 删除数据库中无用处的记录 8.5 视图 cc实例214 动态创建视图 cc...

    Visual C++程序开发范例宝典(光盘) 第四部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    Visual C++程序开发范例宝典(光盘) 第八部分

    实例214 动态创建视图 实例215 通过视图更改数据 实例216 删除视图 8.6 触发器 实例217 创建触发器 实例218 在程序中使用触发器 8.7 存储过程 实例219 创建存储过程 实例220 删除存储过程 实例221 在程序...

    Toad 使用快速入门

    可以自定义存储过程得模板,在新建存储过程的时候,自动生成程序的框架可以方便的调用Schema Browser,把鼠标定位于某个对象上,F4,Schema Browser打开该对象的详细描述,帮助顺利快速开发程序。支持代码自动更正,...

Global site tag (gtag.js) - Google Analytics