用SQLServer   存储过程实现自动生成订单号 
订单号格式如下:201006110001(年+月+日+四位流水号)总共12位 
如果今天是第一张单:那就是:201006110001,如果是第二张单,那单号是:201006110002,第三张单号是:201006110003 
如果是明天的话:第一张单:那就是:201006120001,如果是第二张单,那单号是:201006120002,第三张单号是:201006120003 
用存储过程实现,过程名字为:Order_Pro   ,无参数 
数据表名字为   Order   字段有:ID(自动增量为1),Order_No(单号)
我是新手,希望大家写的详细些

解决方案 »

  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.   

    在学习中遇到这个问题 
    数据库里有编号字段 
    BH00001 
    BH00002 
    BH00003 
    BH00004 
    如何实现自动增长 --下面的代码生成长度为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
    --*/ create table tb
    (id int identity,
    name varchar(10),
    code as 'BH'+right('0000'+cast(id as varchar),5))
    go
    insert tb(name) select 'A'
    union all select 'B'
    union all select 'C'
    union all select 'D'select * from tbdrop table tb/*
    id          name       code         
    ----------- ---------- ------------ 
    1           A          BH00001
    2           B          BH00002
    3           C          BH00003
    4           D          BH00004(所影响的行数为 4 行)
    */
      

  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.   


    --建立
    Create Proc GetOrderNo
    AS
    declare @MaxOrder_No varchar(12)
    select @MaxOrder_No=MAX(Order_No) from [Order] where left(Order_No,8)=convert(varchar(20),GETDATE(),112)
    select convert(varchar(20),GETDATE(),112)+REPLACE(STR(convert(int,substring(@MaxOrder_No,9,4))+1,4),' ','0') AS Order_No--执行
    exec GetOrderNo
      

  5.   

    我想插入数据库一个字段是这样的: 
    ID      PID 
    1        0911200001      当天时间091120+0001 
    2        0911200002      当天时间091120+0002  
    依次类推 
      0911210001      第二天又是取当前时间+0001 
            0911210002      第二天又是取当前时间+0002 
    依次类推 
            0911220001    第二天又是取当前时间+0001 
    ....... 
    这个要怎么实现哦!!!帮帮忙(ID不用管,只求那个编号) 
    -------------------create table tb(ID int IDENTITY,PID varchar(20), PID2 varchar(20))
    gocreate trigger my_trig on tb FOR INSERT
    as
    begin
      declare @cnt as int
      select @cnt = count(1) from tb where pid = (select pid from inserted)
      update tb set pid2 = pid + right('0000'+cast(@cnt as varchar),4) where id = (select id from inserted)
    end
    goinsert into tb(pid) values('091120')
    insert into tb(pid) values('091120')
    insert into tb(pid) values('091121')
    insert into tb(pid) values('091121')select * from tbdrop table tb/*ID          PID                  PID2                 
    ----------- -------------------- -------------------- 
    1           091120               0911200001
    2           091120               0911200002
    3           091121               0911210001
    4           091121               0911210002(所影响的行数为 4 行)
    */
      

  6.   

    -- 建模拟表 
    create table tb(Order_No varchar(12))
    go-- 建存储过程
    create proc GenNewOrderNo
    (@neworderno varchar(12) output)
    as
    begin
    if exists(select Order_No from tb where left(Order_No,8) = convert(varchar(8),getdate(),112))
       select top 1 @neworderno = left(Order_No,8) + right('0000' + cast((cast(right(Order_No,4) as int)) + 1 as varchar(4)),4)  from tb where left(Order_No,8) = convert(varchar(8),getdate(),112) order by Order_No desc
    else
       select @neworderno = convert(varchar(8),getdate(),112)+'0001'
    end
    -- 表内无当天数据时
    declare @neworderno varchar(12)
    exec GenNewOrderNo @neworderno output
    select @neworderno
    /*
    ------------
    201006130001(1 行受影响)
    */-- 表内插入三条数据后,得到
    insert into tb select '201006130001'
         union all select '201006130002'
         union all select '201006130003'
    go
    declare @neworderno varchar(12)
    exec GenNewOrderNo @neworderno output
    select @neworderno
    /*
    ------------
    201006130004(1 行受影响)
    */