能不能实现为“ 05040001”的ID
即 05表示年,04表示月。0001表示流水号。0001 这个会自增。同样是用存储过程和事务来防止用户在客户端同时获得一个ID号。大家帮帮忙,给点实例,谢谢

解决方案 »

  1.   

    --下面的代码演示了生成一个日期编号的处理,编号总长度为8,前5位为年月信息,格式为YYMM,后4位为流水号。
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(4),GETDATE(),112)
    GO--得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(8)
    AS
    BEGIN
    DECLARE @dt CHAR(4)
    SELECT @dt=dt FROM v_GetDate
    RETURN(
    SELECT @dt+RIGHT(10001+ISNULL(RIGHT(MAX(BH),4),0),4) 
    FROM tb WITH(XLOCK,PAGLOCK)
    WHERE BH like @dt+'%')
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    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)--显示结果
    SELECT * FROM tb
    /*--结果
    BH           col         
    ------------ ----------- 
    050405000001 1
    050405000002 2
    050405000003 4
    050405000004 14
    --*/
    GODROP TABLE tb
    DROP FUNCTION f_NextBH
    DROP VIEW v_getdate
      

  2.   

    --下面的代码演示了生成一个日期编号的处理,编号总长度为8,前5位为年月信息,格式为YYMM,后4位为流水号。
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(4),GETDATE(),12)
    GO--得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(8)
    AS
    BEGIN
    DECLARE @dt CHAR(4)
    SELECT @dt=dt FROM v_GetDate
    RETURN(
    SELECT @dt+RIGHT(10001+ISNULL(RIGHT(MAX(BH),4),0),4) 
    FROM tb WITH(XLOCK,PAGLOCK)
    WHERE BH like @dt+'%')
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(8) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    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)--显示结果
    SELECT * FROM tb
    /*--结果
    BH       col         
    -------- ----------- 
    05040001 1
    05040002 2
    05040003 4
    05040004 14(所影响的行数为 4 行)
    --*/
    GODROP TABLE tb
    DROP FUNCTION f_NextBH
    DROP VIEW v_getdate
      

  3.   

    --也就是说,对于插入这样写
    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
      

  4.   

    四位的日期,改:
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(4),GETDATE(),112)
    GO
      

  5.   

    四位年,改:
    --下面的代码演示了生成一个日期编号的处理,编号总长度为8,前5位为年月信息,格式为YYMM,后4位为流水号。
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(6),GETDATE(),112)
    GO--得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(10)
    AS
    BEGIN
    DECLARE @dt CHAR(6)
    SELECT @dt=dt from v_GetDate
    RETURN(
    SELECT @dt+RIGHT(10001+ISNULL(RIGHT(MAX(BH),4),0),4) 
    FROM tb WITH(XLOCK,PAGLOCK)
    WHERE BH like @dt+'%')
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(10) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    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)--显示结果
    SELECT * FROM tb
    /*--结果
    BH       col         
    -------- ----------- 
    05040001 1
    05040002 2
    05040003 4
    05040004 14(所影响的行数为 4 行)
    --*/
    GODROP TABLE tb
    DROP FUNCTION f_NextBH
    DROP VIEW v_getdate
      

  6.   

    --下面的代码演示了生成一个日期编号的处理,编号总长度为8,前5位为年月信息,格式为YYMM,后4位为流水号。
    --创建得到当前日期的视图
    CREATE VIEW v_GetDate
    AS
    SELECT dt=CONVERT(CHAR(6),GETDATE(),112)
    GO--得到新编号的函数
    CREATE FUNCTION f_NextBH()
    RETURNS char(10)
    AS
    BEGIN
    DECLARE @dt CHAR(6)
    SELECT @dt=dt FROM v_GetDate
    RETURN(
    SELECT @dt+RIGHT(10001+ISNULL(RIGHT(MAX(BH),4),0),4) 
    FROM tb WITH(XLOCK,PAGLOCK)
    WHERE BH like @dt+'%')
    END
    GO--在表中应用函数
    CREATE TABLE tb(
    BH char(10) PRIMARY KEY DEFAULT dbo.f_NextBH(),
    col int)--插入资料
    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)--显示结果
    SELECT * FROM tb
    /*--结果
    BH       col         
    -------- ----------- 
    05040001 1
    05040002 2
    05040003 4
    05040004 14(所影响的行数为 4 行)
    --*/
    GODROP TABLE tb
    DROP FUNCTION f_NextBH
    DROP VIEW v_getdate