起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 184|回复: 6

【结】我想自动往数据库中填写数据**

[复制链接]
发表于 2008-3-12 11:45:03 | 显示全部楼层 |阅读模式
我们所做的这个系统需要在项目申请过程中选择了项目的起止年月后,自动计算出中间要经过哪些月份,然后显示给用户一个框架,让用户填写每月的工作计划,请问这是不是必需要用到触发器或者存储过程的功能才能实现?怎么实现?
回复

使用道具 举报

发表于 2008-3-12 11:49:52 | 显示全部楼层
可以用存储过程也可以不用啊,用代码也是一样的,无非就是根据起止年月计算出所有的月份往一个数据表中记录下来,然后用文档展现,然后用户自己根据实际填写每月的计划。
回复 支持 反对

使用道具 举报

发表于 2008-3-12 11:53:33 | 显示全部楼层
可以使用触发器向月份表中插入记录

也可以在信息里利用数据集的事件来编写代码向月份表插入月份记录。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 14:34:37 | 显示全部楼层
贾工回来了,我用触发器了,觉得这样子好像更方便点!就是如何计算起始日期和结束日期之间经历了哪些月份,再插入进度表,这个好像麻烦点阿!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-12 15:49:57 | 显示全部楼层
use XMGLData
GO
IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'TR' AND NAME = 'T_INSERT_XMJBXXB')
      DROP TRIGGER T_INSERT_XMJBXXB
GO

CREATE TRIGGER T_INSERT_XMJBXXB
ON XMJBXXB
FOR INSERT
AS
BEGIN TRANSACTION
     
      declare @ksyear int
      declare @ksmonth int
      declare @jsyear int
      declare @jsmonth int
      declare @j int
      set @ksyear= (select year(xmksrq) from inserted)
      set @ksmonth = (select month(xmksrq) from inserted)
      set @jsyear = (select year(xmjsrq) from inserted)
      set @jsmonth = (select month(xmjsrq) from inserted)
      set @j=1
      while(@ksyear<@jsyear)
      begin
         while(@ksmonth<=12)
         begin
            insert into xmjdjdb(xmbs,nf,yf)
            select xmbs,@ksyear,@ksmonth from inserted
            set @ksmonth=@ksmonth+1
         end
         set @ksyear=@ksyear+1
         while(@j<=@jsmonth)
         begin
            insert into xmjdjdb(xmbs,nf,yf)
            select xmbs,@ksyear,@j from inserted
            set @j=@j+1
         end
         
            
      end
      if(@ksyear=@jsyear)
      begin
         while(@ksmonth<=@jsmonth)
         begin
            insert into xmjdjdb(xmbs,nf,yf)
            select xmbs,@ksyear,@ksmonth from inserted
            set @ksmonth=@ksmonth+1
         end
      end

COMMIT TRANSACTION
GO
问题基本解决,剩下来就是考虑一下如果用户修改起止日期或者用户删除该条项目的情况了,同样使用触发器就可以了
回复 支持 反对

使用道具 举报

发表于 2008-3-12 16:22:14 | 显示全部楼层
楼主,如果以后要从sqlserver迁移到oracle,要注意把触发器也一起搞过去。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-3-13 15:04:41 | 显示全部楼层
知道了,等全部做完了再迁移数据库!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-8 06:09 , Processed in 0.049980 second(s), 16 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表