CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
花落谁家,你作主! 盛大widget设计大赛英雄榜
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2SE / 基础类

一个关于SQLserver数据项的问题?

楼主hojialiang(jialiang)2002-03-29 16:33:33 在 Java / J2SE / 基础类 提问

该数据项的生成规则是:  
  Syymmddxxxx  
  S-签收单  
  yymmdd--年月日  
  xxxx--4位当天的流水号0001-9999(过了一天后又重新从0001开始)    
   
  该数据项是主键,如何插入才能保证它的唯一性。  
     
  问题点数:50、回复次数:8Top

1 楼pengji(彭乃超)回复于 2002-03-29 16:42:54 得分 0

另外做一个保持当天的流水号!或者用写本地文件的办法保存当天流水号!前一种方法可以使用数据库的定时运行的特性,定时清零!Top

2 楼lyxinfo(雒)回复于 2002-03-29 17:16:40 得分 0

作一个表,两个字段,Genid   (id   int,Pdate   datetime),只有一条记录;  
  使用存储过程得到编号,这样就肯定不会重复了。  
  生成编号的主要语句  
   
      update   Genid  
      set   id   =   right('000'+   rtrim(convert(varchar,isnull((select   id   from   Genid   where   datediff(dd,Pdate,getdate())   =   0),0)   +   1)),4)  
      select   id   //这个就是递增后的编号了。  
      from   genid  
  Top

3 楼lyxinfo(雒)回复于 2002-03-29 18:34:39 得分 0

哦,Update要这样。  
  句  
   
      update   Genid  
      set   id   =   right('000'+   rtrim(convert(varchar,isnull((select   id   from   Genid   where   datediff(dd,Pdate,getdate())   =   0),0)   +   1)),4),  
      pdate   =   case   when   datediff(dd,pdate,getdate())   <>   0   then   getdate()   else   pdate   endTop

4 楼lyxinfo(雒)回复于 2002-03-29 18:53:22 得分 0

唉又错,给个完整的测试:  
  create   table   genid  
  (id   int   primary   key,  
    Pdate   datetime  
  )  
  drop   procedure   Pgenid  
  go  
  create   procedure   PGenid  
  as  
  begin  
      update   Genid  
      set   id   =   (isnull((select   id   from   Genid   where   datediff(dd,Pdate,getdate())   =   0),0)   +   1),  
              pdate   =   (case   when   datediff(dd,pdate,getdate())   <>   0   then   getdate()   else   pdate   end)  
       
      select   right('000'+   rtrim(convert(varchar,id)),4)   from   Genid  
  end  
   
  drop   table   genid  
   
  insert   genid  
  values  
    (1,'2000-1-1')  
   
  exec   Pgenid  
   
  存储过程返回的结果集就是流水号,也可以用OUT的参数了,基本方法就是这样了。Top

5 楼hojialiang(jialiang)回复于 2002-03-30 11:22:31 得分 0

create   table   genid  
  (id   int   primary   key,  
    Pdate   datetime  
  )  
  drop   procedure   Pgenid  
  go  
  create   procedure   PGenid  
  as  
  begin  
      update   Genid  
      set   id   =   (isnull((select   id   from   Genid   where   datediff(dd,Pdate,getdate())   =   0),0)   +   1),  
              pdate   =   (case   when   datediff(dd,pdate,getdate())   <>   0   then   getdate()   else   pdate   end)  
       
      select   right('000'+   rtrim(convert(varchar,id)),4)   from   Genid  
  end  
   
  drop   table   genid   --->这句放这里干什么?  
   
  insert   genid  
  values  
    (1,'2000-1-1')  
   
  exec   Pgenid  
   
  存储过程返回的结果集就是流水号,也可以用OUT的参数了,基本方法就是这样了。Top

6 楼lyxinfo(雒)回复于 2002-03-30 13:08:23 得分 0

呵呵,见笑,那里是测试得时候删除存储过程的,用不到,一下全拷过去了,本来想说明一下得,但是不能连续回三次以上。  
  只有两个Create,再加写入一个种子的Insert是有用的。Top

7 楼hojialiang(jialiang)回复于 2002-03-30 15:06:02 得分 0

太谢谢lyxinfo()了,给你50分。Top

8 楼lyxinfo(雒)回复于 2002-03-30 15:16:08 得分 50

呵呵,客气客气!Top

相关问题

  • 数据项定位问题?.................
  • 怎样获取数据项的列名?
  • update多个数据项时出错
  • 如何响应ListView的数据项双击事件?
  • 数据项定位问题,在线等待中.........
  • 一个小程序的数据项应该有那些?
  • 怎样知道LISTBOX控件中的数据项的个数?
  • 与oracle中的日期数据项比较的问题
  • 相同数据项的内容的合并问题
  • 求教关于Combo Box添加数据项的问题........

关键词

  • 存储过程
  • pdate
  • genid
  • 数据项
  • 流水号
  • getdate
  • datediff
  • rtrim
  • dd
  • isnull

得分解答快速导航

  • 帖主:hojialiang
  • lyxinfo

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo