我想用一个主键。或许是拼接出来的
本来就打算用getdate()做。。
然后转换成int。但是我又想把这个int后面拼上一个自增id
这个自增id的上限1000就可以。
但是保证第二天记录的时候这个拼接的自增值又从1开始记录。。
这样的目的是为了每天看这个id就知道一天有多少条这样的记录

解决方案 »

  1.   

    用一個表號記數器處理,
    或用觸發器和函數處理,效率不高
    http://blog.csdn.net/roy_88/article/details/1424370
      

  2.   

    用一個表記錄最大號
    兩列就行了,每次取完Update一下
    日期 MaxID
      

  3.   

    --下面的代码生成长度为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
    --*/
      

  4.   

    问题这个的确差不多了
    但是如果是第二天的话。那个流水号我想又从000001开始呢
    而且是这样的本来程序设计的是列是int自增的
    所有程序那面是没有写这个字段和值的。
    我不想改动很大有关程序的部分,
    例如
    Id              name
    2011101300001   a
    2011101300002   a
    2011101300003   a
    2011101300004   a
    2011101300005   a
    2011101400001   a
    2011101400002   a
    2011101400003   a
    2011101500001   a2011101500002   a
    2011101500003   a
      

  5.   


    这样做,没有意义.就不说使每天自增从1开始无法实现,即使能实现,如果这一天中的记录被删除掉一些,同样无法获得这一天有多少条记录.为什么要用主键,楼主有没有掂量过?建议楼主直接用自增列作主键,如果想要知道某天有多少条记录,可以直接用 
    select count(*) from tb where 日期=某天
    来获取,而不要用这个方法来获得一个使用麻烦,却不可靠的数据.