liqiang665

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  27 Posts :: 0 Stories :: 14 Comments :: 3 Trackbacks

公告

1.用SQL函数生成自动流水号.
 
流水号格式为:'R'+日期年后二位+二位数月+'-'+二位数日期+自动编号
R0708-2001
R0708-2002
R0708-2003

自定义函数如下:
注:CaiGouInfo为采购单表,CGID为采购单自动流水号

CREATE function new_idr(@a datetime) returns varchar(50)
begin
   ---id为日期格式部分
   declare @id varchar(50),@i int
   select top 1 @id=CGID from CaiGouInfo where left(CGID,8)='R'+(left(convert(varchar(6),@a,12),4)+'-'+right(convert(varchar(6),@a,12),2)) order by CGID desc
   --如果没找到该日期的流水号,则新增加一个流水号,即为当天的第一个流水号
   if @@rowcount=0
      return 'R'+(left(convert(varchar(6),@a,12),4)+'-'+right(convert(varchar(6),@a,12),2))+'01'
   --如果存在该日期的流水号则在该流水的后二位自动编号上加1
   set @i= rtrim(right(@id,2))  +1
   set @id=rtrim(@i)
   --转化流水号后二位为2位字符串
   return 'R'+(left(convert(varchar(6),@a,12),4)+'-'+right(convert(varchar(6),@a,12),2))+right(  '00'+@id ,2 )
end

调用
在数据表里的流水号字段写个默认值,则应该字段为自动流水号
default ([dbo].[new_idr](getdate()))

2.C#代码生成
       因为除自动编号为的键值是不确定的.不像日期格式是确定的6位.所以SQL 自动生成流水号比较麻烦.采用C#编码生成.
       注:BJID是自动生成的报价单号,CustomerProRes是客户产品资料表
        //报价单为客户代码+物料名称+自动编号,自动编号自动增长
        string BJID =CustomerCode+WLName;
        //查找表中报价单中左边的"客户代码+物料名称"字符串是否是当前的客户数据
        //如果找不到则新增加该客户的第一笔产品报价资料
        DataSet ds_bj = kbs.LQSelectTable("*", "CustomerProRes", "left(BJID,len(BJID)-3)='" + BJID + "'", "", "bjtb");
        if (ds_bj.Tables["bjtb"].Rows.Count == 0)
            BJID += "001";
        else
        {
            //如果存在该产品的报价资料,则新增加一笔报价资料.
            int AutoNo;
            //读取该客户资料的最大编号
            DataSet ds_bj2 = kbs.LQSelectTable("max(BJID) as maxbjid", "CustomerProRes", "left(BJID,len(BJID)-3)='" + BJID + "'", "", "bjtb2");
            //取出该客户资料的最大编号的后两位自动编号,并加1
            AutoNo =Convert.ToInt32(ds_bj2.Tables["bjtb2"].Rows[0][0].ToString().Substring(ds_bj2.Tables["bjtb2"].Rows[0][0].ToString().Length - 3)) + 1;
           //最后两位自动编号转成两位字符串
            if (AutoNo.ToString().Length == 1) BJID +="00"+AutoNo;
            else
            {
                if (AutoNo.ToString().Length == 2) BJID += "0"+AutoNo;
                else BJID += AutoNo;
            }
        }

最后直接用insert到相对应的流水号字段即可

posted on 2007-08-21 09:17 青铜时代 阅读(766) 评论(0) 编辑 收藏