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

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

 
阅读更多

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

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

分享到:
评论

相关推荐

    mysql存储过程动态创建多列

    本文将深入探讨如何利用MySQL存储过程动态创建多列,这是一个高级功能,尤其适用于需要根据运行时变量或条件动态修改表结构的情况。 ### MySQL存储过程动态创建多列 #### 基本概念 在MySQL中,动态地添加列到一个...

    水晶报表动态创建字段

    总之,水晶报表动态创建字段的核心在于利用参数字段和动态SQL查询来适应变化的数据结构。这种技术在处理复杂和可变的数据报告时非常有用,但需要注意的是,动态字段可能导致报表的性能下降,因此在实际应用中需要...

    sql分页存储过程(无论那个表,表中有多少字段都可以用这一个存储过程)

    根据提供的文件信息,本文将详细解释一种通用的SQL分页存储过程实现方法,该方法能够适应不同的表结构、字段数量,并支持自定义排序字段与筛选条件。 ### SQL 分页存储过程解析 #### 标题说明 标题“sql分页存储...

    oracle存储过程学习经典入门

    在存储过程中,select 某一字段时,后面必须紧跟 into,如果 select 整个记录,利用游标的话就另当别论了。在利用 select...into...语法时,必须先确保数据库中有该条记录,否则会报出"no datafound"异常。在存储...

    Sybase存储过程的建立和使用

    除了基本的创建和调用之外,还可以利用存储过程实现更复杂的功能,例如: - **参数化查询**:通过参数传递条件,实现动态查询。 - **事务处理**:利用存储过程处理复杂的事务逻辑。 - **错误处理**:在存储过程中...

    利用存储过程生成报表

    通过以上分析,我们可以看出利用存储过程生成报表的流程大致包括:定义存储过程、创建临时表、执行查询并将结果插入到临时表中。这种做法不仅可以提高报表生成的效率,还能确保数据的安全性和准确性。同时,存储过程...

    使用MYSQL5创建存储过程procedure

    在本主题中,我们将深入探讨如何使用MySQL5创建存储过程,并结合PL/SQL语言来实现分表功能。 首先,让我们了解存储过程的基本语法。在MySQL中,创建存储过程通常包含以下部分: 1. `CREATE PROCEDURE` 关键字,...

    C# 作的动态定义数据库字段

    总结来说,"C# 作的动态定义数据库字段"是一个面向初学者的示例,展示了如何利用C#的元数据和反射能力来创建一个灵活的数据库系统,允许用户在运行时自定义数据结构。这个项目对于学习C#编程、数据库操作以及Web开发...

    oracle存储过程学习经典

    3. **存储过程中的别名与字段冲突**:存储过程中,字段别名不能与字段名称完全相同,尽管编译阶段可能不会报错,但在运行时会引发错误。 4. **处理NULL值**:存储过程中需特别注意NULL值的处理,避免逻辑错误或异常...

    oracle 存储过程学习经典

    3. **别名与字段名冲突**: 在存储过程中,定义的别名不能与字段名相同,即使编译通过,在运行时也会出现错误。 4. **处理NULL值**: 存储过程中需要特别注意对NULL值的处理,避免出现意外的结果。 #### 八、Java调用...

    U8UAP开发报表设置方案——存储过程

    在U8UAP开发环境中,报表的创建与设置是一个关键环节,尤其是涉及到存储过程的运用。存储过程是一种预编译的SQL...通过以上步骤,你可以在用友U8环境下有效地利用存储过程来创建定制化的报表,满足企业的数据分析需求。

    存储过程生成报表.docx

    本文将详细探讨如何在用友T+系统中利用存储过程来生成报表,以及在操作过程中需要注意的关键点。 首先,存储过程是一种预编译的SQL语句集合,它允许开发人员封装复杂的业务逻辑并多次调用,提高数据库操作的效率和...

    DB2存储过程介绍

    3. **安全性**:通过限制对特定存储过程的访问权限,可以增强数据安全性,而不是直接暴露表和字段。 4. **代码复用**:存储过程可以被多个应用程序共享,减少重复代码。 5. **事务管理**:存储过程内可以包含事务...

    sql 万能修改,删除表的存储过程

    在存储过程中,动态SQL(`EXEC`语句)被用来构建并执行一个`UPDATE`语句,根据传入的参数进行数据修改。需要注意的是,这样的设计可能会导致SQL注入问题,因为用户可以直接提供表名和字段名,因此在实际使用时需要...

    Oracle_PLSQL_存储过程

    3. **别名与字段名冲突:** 在存储过程中,别名不能与字段名称相同,否则在运行时会产生错误。 4. **NULL 值处理:** 处理NULL值时需要特别注意,例如在赋值前进行NULL检查。 5. **Java调用Oracle存储过程:** - *...

    字段不确定的动态建表办法

    在存储过程中,我们可以使用 sp_testlist 存储过程来创建表结构和字段类型。sp_testlist 存储过程可以根据用户的需求来确定表的结构和字段类型。 在 getNewID 函数中,我们可以根据用户的需求来获取新的 ID 值。 ...

    SpringMVC实现动态加表及字段并显示数据

    在实现动态功能时,这些配置可能需要根据实际情况调整,比如添加新的数据源以支持动态创建的表,或者配置事务以确保数据库操作的一致性。 总结起来,使用SpringMVC实现动态加表及字段并显示数据,需要理解SpringMVC...

    学生信息管理系统存储过程

    - 创建一个名为 `SelectStudent` 的存储过程,接受两个参数 `@field` 和 `@value`。 - 根据传入的 `@field` 参数决定查询字段。 - 使用动态 SQL 语句实现对不同字段的查询支持。 - 返回查询结果。 #### 五、...

    从SQL存储过程动态创建ASP表单

    在“从SQL存储过程动态创建ASP表单”的场景中,存储过程会根据传入的参数生成相应的表格结构。例如,它可以根据输入值决定显示哪些字段,或者根据特定条件过滤数据。 在描述中提到的"运行时存储过程处理",指的是在...

    .net c#动态创建程序集、类、属性、方法等

    首先,需要创建一个AssemblyBuilder实例来定义程序集,然后添加ModuleBuilder来定义模块,最后利用TypeBuilder创建类并添加字段、属性和方法。 二、动态创建类 创建类的核心在于TypeBuilder类。通过TypeBuilder,...

Global site tag (gtag.js) - Google Analytics