--流水号格式: yyMMdd+0001 自增,
--有相同的CO1,CO2则使用相同的流水号
--如果存在同一天的流水号就自增,比如有1209050001 的流水号记录,则从1209050002 开始生成,没有就从yyMMdd0001开始
CREATE TABLE #TMP
(
  ID VARCHAR(10),
  SerialNumber int,  --流水号
  CO1 VARCHAR(10),
  CO2 VARCHAR(20)
)
INSERT INTO #TMP SELECT '0001',1209050001,'GG','MM'
INSERT INTO #TMP SELECT '0002',null,'AA','BB'
INSERT INTO #TMP SELECT '0003',null,'FF','DD'
INSERT INTO #TMP SELECT '0004',null,'CC','BB'
INSERT INTO #TMP SELECT '0005',null,'AA','BB'--最后显示效果
--0001, 1209050001,GG,MM
--0002, 1209050002,AA,BB
--0003, 1209050003,FF,DD
--0004, 1209050004,CC,BB
--0005, 1209050002,AA,BB

解决方案 »

  1.   

    use tempdb  
     go  
     --创建当天序号表  
     create table tabSN(sn int,sndt datetime)  
     go  
     --创建历史序号表  
     create table tabSNHist(sn INT,sndt datetime)  
     go  
       
     --  
     create proc uspSN   
     (  
         @sn char(14) output  
     )  
     as   
         --开始事务  
         set xact_abort on   
         begin transaction   
       
         --判断序号表是否有数据,若没有则新增一条数据  
         if (select count(1) from tabSN)=0  
             begin  
                 insert into tabSN values(000000,GETDATE())  
             end  
       
         --取出序号表中的日期  
         DECLARE @sndt datetime  
         set @sndt=(select sndt from tabSN);  
       
         --判断是否发生跨天情况,,若是则移动到历史表  
         if CONVERT(char(10),@sndt,111)<>CONVERT(char(10),getdate(),111)  
         begin  
             insert into tabSNHist select * from tabSN;  
             truncate table  tabSN;  
             insert into tabSN values(000000,getdate())  
         end  
         --将号码累加1,作为最后操作时间  
         update tabsn set sn=sn+1 ,sndt=GETDATE()  
         --出去序号,转换成YYYYMMDDNNNNNN  
         SELECT @sn=CONVERT(VARCHAR(10),SNDT,112)+RIGHT('000000'+CONVERT(VARCHAR(6),SN),6)  
         FROM tabSN;  
         COMMIT TRANSACTION  
         GO  
       
       
         --使用存储过程产生序号  
         DECLARE @SN CHAR(14)  
         EXEC uspSN @SN OUTPUT  
         SELECT @SN 'SN'  
    代码不是解决你的问题的,不过比较通用,你自己看看来改吧