例如:
表A: id(自增列),subType(代号),name(名称),insertDate(日期)想得到的结果:
id  --  subType  --  name  --  typeid  --  insertDate1   --  a1001    --  开始1 -- 1 --  2009-12-01
2   --  a1002    --  开始2 -- 1 --  2009-12-01
3   --  a1003    --  开始3 -- 1 --  2009-12-01
4   --  b1001    --  结束1 -- 2 --  2009-12-01
5   --  b1002    --  结束2 -- 2 --  2009-12-01
6   --  b1003    --  结束3 -- 2 --  2009-12-01
7   --  a1001    --  开始1 -- 1 --  2010-01-01
8   --  a1002    --  开始2 -- 1 --  2010-01-01
9   --  a1003    --  开始3 -- 1 --  2010-01-01
10   --  b1001    --  结束1 -- 2 --  2010-01-01 
11   --  b1002    --  结束2 -- 2 --  2010-01-01
12   --  b1003    --  结束3 -- 2 --  2010-01-01问题就在subType这列,这列是自动生成的,一次插入多条数据如何让该像ID列那样自增呢?这列前缀a b c d 这些是根据typeid来识别的,typeid关联另一张表.关键就是怎么生成像ID列那样的自增

解决方案 »

  1.   

    --下面的代码生成长度为8的编号,编号以BH开头,其余6位为流水号。
    --得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(8)
    AS
    BEGIN
        RETURN(SELECT 'BH'+RIGHT(1000001+ISNULL(RIGHT(MAX(BH),6),0),6) FROM tb WITH(XLOCK,PAGLOCK))
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    BEGIN TRAN
        INSERT tb(col) VALUES(1)
        INSERT tb(col) VALUES(2)
        INSERT tb(col) VALUES(3)
        DELETE tb WHERE col=3
        INSERT tb(col) VALUES(4)
        INSERT tb(BH,col) VALUES(dbo.f_NextBH(),14)
    COMMIT TRAN--显示结果
    SELECT * FROM tb
    /*--结果
    BH         col 
    ---------------- ----------- 
    BH000001  1
    BH000002  2
    BH000003  4
    BH000004  14
    --*/
      

  2.   

    cast (substring(subType,1,1) +id) as col
      

  3.   

    2楼的大哥,如果我要传参数呢?
    因为前缀是根据typeid查出来的
      

  4.   

    高手呢?8楼的大哥,subType列和id列好像没关系吧